Go Back   vb.org Archive > vBulletin Article Depository > Read An Article > vBulletin 4 Articles
FAQ Community Calendar Today's Posts Search

Reply
 
Thread Tools
[HOW TO - vB4] Create your own vBulletin page
Lynne's Avatar
Lynne
Join Date: Sep 2004
Posts: 41,180

 

California/Idaho
Show Printable Version Email this Page Subscription
Lynne Lynne is offline 11-15-2009, 10:00 PM

This is an updated article on how to create your own vbulletin powered page. It's only for use with vB4.

This is NOT my work. I'm posting this from another thread where vB Style took the time to write this out. And his work is based on the article by Gary King here - How to create your own vBulletin-powered page! (uses vB templates)

Instructions to Create your Own Page:


1. Create the php page:
- Create a new file, whatever you want to call it (let's say test.php).
- Open up test.php and add the following (replace TEST with whatever template you want to show - WARNING: the template name is CASE SENSITIVE!!!):
Code:
<?php

// ####################### SET PHP ENVIRONMENT ###########################
error_reporting(E_ALL & ~E_NOTICE);

// #################### DEFINE IMPORTANT CONSTANTS #######################

define('THIS_SCRIPT', 'test');
define('CSRF_PROTECTION', true);  
// change this depending on your filename

// ################### PRE-CACHE TEMPLATES AND DATA ######################
// get special phrase groups
$phrasegroups = array();

// get special data templates from the datastore
$specialtemplates = array();

// pre-cache templates used by all actions
$globaltemplates = array('TEST',
);

// pre-cache templates used by specific actions
$actiontemplates = array();

// ######################### REQUIRE BACK-END ############################
// if your page is outside of your normal vb forums directory, you should change directories by uncommenting the next line
// chdir ('/path/to/your/forums');
require_once('./global.php');

// #######################################################################
// ######################## START MAIN SCRIPT ############################
// #######################################################################

$navbits = construct_navbits(array('' => 'Test Page'));
$navbar = render_navbar_template($navbits);

// ###### YOUR CUSTOM CODE GOES HERE #####
$pagetitle = 'My Page Title';

// ###### NOW YOUR TEMPLATE IS BEING RENDERED ######

$templater = vB_Template::create('TEST');
$templater->register_page_templates();
$templater->register('navbar', $navbar);
$templater->register('pagetitle', $pagetitle);
print_output($templater->render());

?>
- Be sure to change 'TEST' to the actual template name (WARNING: the template name is CASE SENSITIVE!!!), and change 'test' to the filename or a unique name for the page. Also, change 'Test Page' and 'My Page Title' to whatever you want to show in the navbits, such as 'Viewing Member Profile' (just an example).

2. Create the Template:
- If you are in debug mode, create the template in your MASTER STYLE so it shows up in all your styles, otherwise make sure you create the template in the style you are using. If following the page above, call the template TEST (WARNING: the template name is CASE SENSITIVE!!!) with the following content:
HTML Code:
{vb:stylevar htmldoctype}
<html xmlns="http://www.w3.org/1999/xhtml" dir="{vb:stylevar textdirection}" lang="{vb:stylevar languagecode}" id="vbulletin_html">
  <head>
    <title>{vb:raw vboptions.bbtitle} - {vb:raw pagetitle}</title>
    {vb:raw headinclude}
    {vb:raw headinclude_bottom}
  </head>
  <body>
    
    {vb:raw header}
    
    {vb:raw navbar}
    
    <div id="pagetitle">
      <h1>{vb:raw pagetitle}</h1>
    </div>
    
    <h2 class="blockhead">Title</h2>
    <div class="blockbody">
      <div class="blockrow">
        Text
      </div>
    </div>
    
    {vb:raw footer}
  </body>
</html>
.
Instructions to Add your Page to the Who's Online List (WOL):
Create two plugins using the following hooks. Replace mypage and similar with your information.

1. hook location - online_location_process:
Code:
switch ($filename)
{
    case 'test.php':
        $userinfo['activity'] = 'mypage';
        break;
// add more cases here if you have more than one custom page. no need for multiple plugins. one plugin can handle all.
}
.
2. hook location online_location_unknown:
Code:
switch ($userinfo['activity'])
{
    case 'mypage':
        $userinfo['where'] = '<a href="test.php?'.$vbulletin->session->vars[sessionurl].'">My Page</a>';
        $userinfo['action'] = "Viewing My Page";
        $handled = true;
        break;
// add more cases here if you have more than one custom page. no need for multiple plugins. one plugin can handle all.
}
.
The colored part in the code above shows what you need to change in the plugins (both reds should be the same and both blues should be the same, whereas green can be whatever you want).


Please see this article for help with rendering templates - [vB4] Rendering templates and registering variables - a short guide
Reply With Quote
  #242  
Old 03-08-2010, 08:31 PM
Lynne's Avatar
Lynne Lynne is offline
 
Join Date: Sep 2004
Location: California/Idaho
Posts: 41,180
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by Joseph Witchard View Post
I just meant that all the pages in the Admin area have a common theme with each other (the navigation menu on the left, the same colors, same style of buttons, etc.). In the same way, the main forum area has its own theme with its pages (same colors and buttons, etc.). What I was asking is what do you do to get your custom pages to go with the theme of the area they're in. If you're making a page to run in the Admin CP, how do you get it to look similar to the other pages in the Admin CP? If you're making a page for the main forum area, how do you make it where it looks like the rest of your forum pages?
In the case of the forums, using the template system with common templates is what makes the pages look the same. In the case of the admincp, it's a frame, so you don't need to do much to make it look the same.
Reply With Quote
  #243  
Old 03-09-2010, 12:10 AM
Joseph Witchard Joseph Witchard is offline
 
Join Date: Jul 2007
Posts: 82
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

What are the common templates in your example? And do you mean that you have to build an Admin page from scratch? There are no common templates for it?
Reply With Quote
  #244  
Old 03-09-2010, 12:41 AM
CoZmicShReddeR's Avatar
CoZmicShReddeR CoZmicShReddeR is offline
 
Join Date: Sep 2006
Location: MI, USA
Posts: 338
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Hello Lynne, could you please help meh figure out how to fix inframe page for this setup? I tried but the information is posting above the header...

http://www.cozworld.com/hlstatsx.php

Code:
// ###### YOUR CUSTOM CODE GOES HERE #####
$pagetitle = 'HLstatsX';
echo "<iframe src =\"http://www.cozworld.com/hlxstats/hlstats.php\" frameborder=0 width=100% height=800 scrolling=yes> \n";
echo "</iframe> \n";
// ###### NOW YOUR TEMPLATE IS BEING RENDERED ######
Here is the actual link http://www.cozworld.com/hlxstats/hlstats.php

Thanks...
Reply With Quote
  #245  
Old 03-09-2010, 01:44 AM
Lynne's Avatar
Lynne Lynne is offline
 
Join Date: Sep 2004
Location: California/Idaho
Posts: 41,180
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by Joseph Witchard View Post
What are the common templates in your example? And do you mean that you have to build an Admin page from scratch? There are no common templates for it?
The header, headinclude, footer, and navbar are all used in the test template I posted. You don't have to include them, but if you don't, then you won't get the look of the forums.

This article is really not about the admin cp. The admin cp doesn't use templates at all.

Quote:
Originally Posted by CoZmicShReddeR View Post
Hello Lynne, could you please help meh figure out how to fix inframe page for this setup? I tried but the information is posting above the header...

http://www.cozworld.com/hlstatsx.php

Code:
// ###### YOUR CUSTOM CODE GOES HERE #####
$pagetitle = 'HLstatsX';
echo "<iframe src =\"http://www.cozworld.com/hlxstats/hlstats.php\" frameborder=0 width=100% height=800 scrolling=yes> \n";
echo "</iframe> \n";
// ###### NOW YOUR TEMPLATE IS BEING RENDERED ######
Here is the actual link http://www.cozworld.com/hlxstats/hlstats.php

Thanks...
echo just echos the info wherever the code happens to be called in the page - which is not somewhere in the middle of the template where you want it to go. If you look at my example, output is entered into a variable and the variable is placed in the template where you want the output to go.
Reply With Quote
  #246  
Old 03-09-2010, 07:41 AM
CoZmicShReddeR's Avatar
CoZmicShReddeR CoZmicShReddeR is offline
 
Join Date: Sep 2006
Location: MI, USA
Posts: 338
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Wow, thanks so much I was going nutz!
Reply With Quote
  #247  
Old 03-10-2010, 02:05 AM
Joseph Witchard Joseph Witchard is offline
 
Join Date: Jul 2007
Posts: 82
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

All right then. Thanks, Lynn. Appreciate it
Reply With Quote
  #248  
Old 03-11-2010, 01:24 AM
Affixxx Affixxx is offline
 
Join Date: Jan 2010
Posts: 2
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Hey Lynne,
Whats wrong with using the GENERIC_SHELL?

Heres a function I made that uses it

PHP Code:
function generatePage($pagetitle$navbar$content$template='GENERIC_SHELL')
{
        
//Page Generation Function by Affix
    
$templater vB_Template::create($template);
    
$templater->register_page_templates();
    
$templater->register('navbar'$navbar);
    
$templater->register('pagetitle'$pagetitle);
    
$templater->register('HTML''<br />' $content);
    
print_output($templater->render());

That way all you really need to do is

PHP Code:
$content 'Your Content';
$pagetitle 'Test Content';
$navbits construct_navbits(array('' => 'Test Page'));
$navbar render_navbar_template($navbits);
generatePage($pagetitle$navbar$content); 
Fairly Simple and it will save space in your Database and it uses what vBulletin already provides you.
Reply With Quote
  #249  
Old 03-11-2010, 02:08 AM
Joseph Witchard Joseph Witchard is offline
 
Join Date: Jul 2007
Posts: 82
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by Affixxx View Post
Hey Lynne,
Whats wrong with using the GENERIC_SHELL?

Heres a function I made that uses it

PHP Code:
function generatePage($pagetitle$navbar$content$template='GENERIC_SHELL')
{
        
//Page Generation Function by Affix
    
$templater vB_Template::create($template);
    
$templater->register_page_templates();
    
$templater->register('navbar'$navbar);
    
$templater->register('pagetitle'$pagetitle);
    
$templater->register('HTML''<br />' $content);
    
print_output($templater->render());

That way all you really need to do is

PHP Code:
$content 'Your Content';
$pagetitle 'Test Content';
$navbits construct_navbits(array('' => 'Test Page'));
$navbar render_navbar_template($navbits);
generatePage($pagetitle$navbar$content); 
Fairly Simple and it will save space in your Database and it uses what vBulletin already provides you.
Speaking of functions, are you not required to preRegister them as you are with variables?
Reply With Quote
  #250  
Old 03-11-2010, 02:25 AM
Lynne's Avatar
Lynne Lynne is offline
 
Join Date: Sep 2004
Location: California/Idaho
Posts: 41,180
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

The GENERIC_SHELL would be fine. Some people like to fill their template with a bunch of html and would rather type it out in the template rather than assign it all to a variable to be output. You are welcome to put up an article on how to do this using the GENERIC_SHELL - users welcome having options to pick from when they do things.
Reply With Quote
  #251  
Old 03-15-2010, 07:14 PM
desi-boy's Avatar
desi-boy desi-boy is offline
 
Join Date: Nov 2008
Location: France
Posts: 98
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

thnxxxx Excellent!

can u help me
how can i add an iframe ( it's A html Page) in this ... i mean in Test.php
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 11:33 PM.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.08441 seconds
  • Memory Usage 2,402KB
  • Queries Executed 26 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)ad_showthread_beforeqr
  • (5)bbcode_code
  • (1)bbcode_html
  • (4)bbcode_php
  • (4)bbcode_quote
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)modsystem_article
  • (1)navbar
  • (4)navbar_link
  • (120)option
  • (1)pagenav
  • (1)pagenav_curpage
  • (4)pagenav_pagelink
  • (3)pagenav_pagelinkrel
  • (11)post_thanks_box
  • (58)post_thanks_box_bit
  • (11)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (1)post_thanks_postbit
  • (11)post_thanks_postbit_info
  • (10)postbit
  • (11)postbit_onlinestatus
  • (11)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available:
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files:
  • ./showthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showthread_start
  • showthread_getinfo
  • forumjump
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • fetch_musername
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • post_thanks_function_fetch_thanks_bit_start
  • post_thanks_function_show_thanks_date_start
  • post_thanks_function_show_thanks_date_end
  • post_thanks_function_fetch_thanks_bit_end
  • post_thanks_function_fetch_post_thanks_template_start
  • post_thanks_function_fetch_post_thanks_template_end
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • pagenav_page
  • pagenav_complete
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete