Go Back   vb.org Archive > vBulletin Article Depository > Read An Article > vBulletin 3 Articles
How to create your own vBulletin-powered page! (uses vB templates)
Gary King's Avatar
Gary King
Join Date: Jan 2002
Posts: 2,046

 

Show Printable Version Email this Page Subscription
Gary King Gary King is offline 03-03-2004, 10:00 PM

Want to create your very own vBulletin powered page which includes the header, footer, and the user permissions system as well?

Well now you can

Want to know how it will look? Take a look at the attached screenshot below!

Now includes the Who's Online modification!
Also, instructions included on how to create your own pages that are integrated with current vBulletin files!

I'm going to give you a generic page but you can easily modify the contents of the page by changing the template

So here we go

Instructions:

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):
PHP Code:
<?php

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

// #################### DEFINE IMPORTANT CONSTANTS #######################
define('NO_REGISTER_GLOBALS'1);
define('THIS_SCRIPT''test'); // 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 ############################
require_once('./global.php');

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

$navbits = array();
$navbits[$parent] = 'Test Page';

$navbits construct_navbits($navbits);
eval(
'$navbar = "' fetch_template('navbar') . '";');
eval(
'print_output("' fetch_template('TEST') . '");');

?>
Be sure to change 'TEST' to the actual template name, and change 'test' to the filename. Also, change 'Test Page' to whatever you want to show in the navbar, such as 'Viewing Member Profile' (just an example).

Now create the template, called TEST with the following content:
HTML Code:
$stylevar[htmldoctype]
<html dir="$stylevar[textdirection]" lang="$stylevar[languagecode]">
<head>
<title>$vboptions[bbtitle]</title>
$headinclude
</head>
<body>
$header

$navbar

<table class="tborder" cellpadding="$stylevar[cellpadding]" cellspacing="$stylevar[cellspacing]" border="0" width="100%" align="center">
<tr>
    <td class="tcat">Title</td>
</tr>
<tr>
    <td class="alt1">Text</td>
</tr>
</table>

$footer
</body>
</html>
All done
Now check it out by going to test.php

Who's Online Modification

Now if you want to show who is browsing this new page of yours, just open up includes/functions_online.php and find:
PHP Code:
    case 'bugs.php':
        
$userinfo['activity'] = 'bugs';
        break; 
Below, add:
PHP Code:
    case 'test.php':
        
$userinfo['activity'] = 'test';
        break; 
(Be sure to change the values to your own!)

Then find:
PHP Code:
        case 'modcplogin':
            
$userinfo['action'] = $vbphrase['moderator_control_panel_login'];
            break; 
Below add:
PHP Code:
        case 'test':
            
$userinfo['action'] = 'Viewing Test Page';
            break; 
All done!

----------------------------------

Also if you want to create your own pages 'within' current vBulletin files, do the following:

Open the file you want, and then right before the final ?> in the source code, add the following:

PHP Code:
if ($_REQUEST['do'] == 'xxx')
{
    eval(
'print_output("' fetch_template('TEMPLATE_XXX') . '");');

Replace 'xxx' with whatever you want ?do= in the query string to be (for example, replace 'xxx' with 'showprofile' so then someone would type in example.php?do=showprofile to view this template.) Then of course, change TEMPLATE_XXX to your template name, it's that simple!


edit by Lynne: If running 3.8.4 or above, see this post to take care of the PHP 5.3.0-related problems - https://vborg.vbsupport.ru/showpost....postcount=1171
Attached Images
File Type: jpg template_test.jpg (62.5 KB, 0 views)
Reply With Quote
  #1292  
Old 12-09-2010, 12:06 PM
ghostpt ghostpt is offline
 
Join Date: Oct 2007
Posts: 17
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Hi everyone.

The page title is set on the template,

Code:
<title>$vboptions[bbtitle]</title>
... is there way to set title dynamically within the custom php file?

Thanks in advance.
Reply With Quote
  #1293  
Old 12-09-2010, 02:06 PM
BirdOPrey5's Avatar
BirdOPrey5 BirdOPrey5 is offline
Senior Member
 
Join Date: Jun 2008
Location: New York
Posts: 10,610
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

If you make a variable on the .php file like $customtitle, then put <title>$customtitle</title> in the template that *should* work. I'd try it at least.
Reply With Quote
  #1294  
Old 12-09-2010, 04:29 PM
ghostpt ghostpt is offline
 
Join Date: Oct 2007
Posts: 17
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by BirdOPrey5 View Post
If you make a variable on the .php file like $customtitle, then put <title>$customtitle</title> in the template that *should* work. I'd try it at least.

Thanks BirdOPrey5, I'll give it a try!

Edit: Worked like a charm, thanks!
Reply With Quote
  #1295  
Old 12-13-2010, 11:24 AM
ni_hao ni_hao is offline
 
Join Date: Nov 2006
Posts: 11
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Thanks for the tutorial, works perfect!
Reply With Quote
  #1296  
Old 12-17-2010, 04:28 AM
just.b.jealous just.b.jealous is offline
 
Join Date: Aug 2009
Location: Middle of no where.
Posts: 74
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

I need some help guys, I've got my page working for the most part. I just need to know how to make it parse BBCode that's being pulled from vBulletins threads.
Reply With Quote
  #1297  
Old 12-17-2010, 04:37 AM
BirdOPrey5's Avatar
BirdOPrey5 BirdOPrey5 is offline
Senior Member
 
Join Date: Jun 2008
Location: New York
Posts: 10,610
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by just.b.jealous View Post
I need some help guys, I've got my page working for the most part. I just need to know how to make it parse BBCode that's being pulled from vBulletins threads.
You need to initialize and use the BB Code parser...
In the php file near the top add the lines:

PHP Code:
   require_once(DIR '/includes/class_bbcode.php');
   
$bbcode_parser =& new vB_BbCodeParser($GLOBALS['vbulletin'], fetch_tag_list(),true); 
Then you can use this line (change the $rawthread and $parsedthread variables to your needs) to get the parsed output (BB Code converted to HTML)

PHP Code:
 $parsedthread=  $bbcode_parser->parse($rawthread ,'nonforum'true); 
The "true" on the end is to parse smilies too... if you don't want smilies make it "false".
Reply With Quote
  #1298  
Old 12-19-2010, 09:15 PM
just.b.jealous just.b.jealous is offline
 
Join Date: Aug 2009
Location: Middle of no where.
Posts: 74
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by BirdOPrey5 View Post
You need to initialize and use the BB Code parser...
In the php file near the top add the lines:

PHP Code:
   require_once(DIR '/includes/class_bbcode.php');
   
$bbcode_parser =& new vB_BbCodeParser($GLOBALS['vbulletin'], fetch_tag_list(),true); 
Then you can use this line (change the $rawthread and $parsedthread variables to your needs) to get the parsed output (BB Code converted to HTML)

PHP Code:
 $parsedthread=  $bbcode_parser->parse($rawthread ,'nonforum'true); 
The "true" on the end is to parse smilies too... if you don't want smilies make it "false".
awesome, thanks for helping me out,.. I'm a little stuck at the moment though,.. could you take a look at my test.php page for me- it's still not parsing BBCode,..

PHP Code:
<?php
// ####################### SET PHP ENVIRONMENT ###########################
error_reporting(E_ALL & ~E_NOTICE & ~8192);  
require_once(
DIR '/includes/class_bbcode.php'); 
$bbcode_parser =& new vB_BbCodeParser($GLOBALS['vbulletin'], fetch_tag_list(),true);
$parsedthread=  $bbcode_parser->parse($rawthread ,'nonforum'true);
// #################### DEFINE IMPORTANT CONSTANTS #######################
define('NO_REGISTER_GLOBALS'1);
define('THIS_SCRIPT''test'); // change this depending on this files name
// ################### 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 ############################
require_once('./global.php');
// #######################################################################
// ######################## START MAIN SCRIPT ############################
// #######################################################################
eval('print_output("' fetch_template('TEST') . '");');
?>
Using:
PHP Code:
require_once(DIR '/includes/class_bbcode.php'); 
Gives me this error:
Quote:
Warning: require_once(DIR/includes/class_bbcode.php) [function.require-once]: failed to open stream: No such file or directory in /forum/test.php on line 4
Fatal error: require_once() [function.require]: Failed opening required 'DIR/includes/class_bbcode.php' (include_path='.:/usr/local/php5/lib/php') in /forum/test.php on line 4
Using:
PHP Code:
require_once('./includes/class_bbcode.php'); 
Gives me this error:
Quote:
Fatal error: Class 'vBulletinHook' not found in /forum/includes/class_bbcode.php on line 2463
I'm also a little confused on what to do with:
Then you can use this line (change the $rawthread and $parsedthread variables to your needs) to get the parsed output (BB Code converted to HTML)
Reply With Quote
  #1299  
Old 12-20-2010, 12:31 AM
BirdOPrey5's Avatar
BirdOPrey5 BirdOPrey5 is offline
Senior Member
 
Join Date: Jun 2008
Location: New York
Posts: 10,610
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

It looks like the errors are because you need the require_once ('./global.php') file above everything else basically... in your script directly under the "error reporting" line near the top. Also if this php file is in the same directory as your forum root (where global.php is located) you don't need the ./ just use require_once ('global.php');

Quote:
I'm also a little confused on what to do with:
Then you can use this line (change the $rawthread and $parsedthread variables to your needs) to get the parsed output (BB Code converted to HTML)
What variable stores the text you need to have parsed? I'm calling it $rawthread in my code... and the output of the BB Code Parsing function, the "translated" text if you will, I'm calling $parsedthread. You can use any names you want but whatever you call $parsedthread is going to be the data you want to output to the browser.

--------------- Added [DATE]1292812596[/DATE] at [TIME]1292812596[/TIME] ---------------

Looking over your code you seem to be missing any data to parse... You don't parse a template usually, a template should have real HTML not BB Code. Usually text like posts and signatures would be the only things requiring parsing.
Reply With Quote
  #1300  
Old 12-20-2010, 07:18 PM
just.b.jealous just.b.jealous is offline
 
Join Date: Aug 2009
Location: Middle of no where.
Posts: 74
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Well I'm making some progress at least,.. you've got it working- which I owe you millions of thanks for, but I'm having an issue of it parsing a little to much onto the page.

I'll break down what I'm trying to accomplish.

The test.php page calls a new template called test,.
The test template calls a plugin named $homepage_recent_post,..
$homepage_recent_post displays:
7 recent threads from specific subforums,
Display the thread title,
Display the date posted,
Display who posted it,
Display the pagetext, (the post itself),
Display a link to that thread.

If I setup my test.php page like:
PHP Code:
<?php
// ####################### SET PHP ENVIRONMENT ###########################
error_reporting(E_ALL & ~E_NOTICE & ~8192);  
// ######################### REQUIRE BACK-END ############################
require_once('global.php');
// #################### DEFINE IMPORTANT CONSTANTS #######################
define('NO_REGISTER_GLOBALS'1);
define('THIS_SCRIPT''test'); // change this depending on this files name
// ################### 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();
// #######################################################################
// ######################## START MAIN SCRIPT ############################
// #######################################################################
eval('print_output("' fetch_template('TEST') . '");');
?>

With this plugin:
PHP Code:
$numposts='7';

$thrdqry $vbulletin->db->query_read("
    SELECT thread.threadid, thread.title, username, post.dateline, post.pagetext FROM " 
TABLE_PREFIX "thread AS thread
            LEFT JOIN " 
TABLE_PREFIX "post AS post ON thread.firstpostid = post.postid
            WHERE thread.forumid IN (61, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 130, 131, 132, 133, 134, 136, 137, 138, 139) AND thread.visible = '1'
    ORDER BY thread.dateline DESC
    LIMIT 0, 
$numposts ");

while (
$thrds $vbulletin->db->fetch_array($thrdqry))    
{
    
$postdate vbdate($vbulletin->options['dateformat'], $thrds['dateline'], true);
    
$posttime vbdate($vbulletin->options['timeformat'], $thrds['dateline']);
    
$homepage_recent_post .=<<<EOD
<div class="post-1 post type-post hentry category-uncategorized" id="post-1">
    <h2 class="title"><a href="showthread.php?t=
$thrds[threadid]" target="_blank" alt="$thrds[title]" title="$thrds[title]">
        
$thrds[title]
</a>
    </h2>
    <div class="postdate">
        <img src="images/date.png" /> 
$postdate <img src="images/user.png" /> $thrds[username] 
    </div>
    <div class="entry">
        <p>
$thrds[pagetext]</p><a href="showthread.php?t=$thrds[threadid]" target="_blank" alt="$thrds[title]" title="$thrds[title]">
        Read more..
</a><br/><br/>
    </div>
</div>
EOD;
            


I'll get the 7 last post, but they're unparsed.

Now if I setup my test.php like:
PHP Code:
<?php
// ####################### SET PHP ENVIRONMENT ###########################
error_reporting(E_ALL & ~E_NOTICE & ~8192);  
// ######################### REQUIRE BACK-END ############################
require_once('global.php');
require_once(
'includes/class_bbcode.php'); 
$bbcode_parser =& new vB_BbCodeParser($GLOBALS['vbulletin'], fetch_tag_list(),true);
$homepage_recent_post=  $bbcode_parser->parse($homepage_recent_post ,'nonforum'true);
// #################### DEFINE IMPORTANT CONSTANTS #######################
define('NO_REGISTER_GLOBALS'1);
define('THIS_SCRIPT''test'); // change this depending on this files name
// ################### 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();
// #######################################################################
// ######################## START MAIN SCRIPT ############################
// #######################################################################
eval('print_output("' fetch_template('TEST') . '");');
?>

and with the same $homepage_recent_post plugin, it'll parse the plugin- pagetext
and all, but then it's parsing too much onto my page. Here's an example of the same post from above, but parsed.

Is there any way to parse just post.pagetext onto this page instead of parsing the entire plugin? If so, how do I go about doing it?
Reply With Quote
  #1301  
Old 12-20-2010, 08:21 PM
BirdOPrey5's Avatar
BirdOPrey5 BirdOPrey5 is offline
Senior Member
 
Join Date: Jun 2008
Location: New York
Posts: 10,610
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

The BB Code parsing needs to be done in your plugin not the .php file...

Using the 1st version you posted in the above post make the plugin into:

PHP Code:
$numposts='7';

$thrdqry $vbulletin->db->query_read("
    SELECT thread.threadid, thread.title, username, post.dateline, post.pagetext FROM " 
TABLE_PREFIX "thread AS thread
            LEFT JOIN " 
TABLE_PREFIX "post AS post ON thread.firstpostid = post.postid
            WHERE thread.forumid IN (61, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 130, 131, 132, 133, 134, 136, 137, 138, 139) AND thread.visible = '1'
    ORDER BY thread.dateline DESC
    LIMIT 0, 
$numposts ");

while (
$thrds $vbulletin->db->fetch_array($thrdqry))    
{
    
$postdate vbdate($vbulletin->options['dateformat'], $thrds['dateline'], true);
    
$posttime vbdate($vbulletin->options['timeformat'], $thrds['dateline']);



//Code I added

$thrds[pagetext] =  $bbcode_parser->parse($thrds[pagetext] ,'nonforum'true);  





    
$homepage_recent_post .=<<<EOD
<div class="post-1 post type-post hentry category-uncategorized" id="post-1">
    <h2 class="title"><a href="showthread.php?t=
$thrds[threadid]" target="_blank" alt="$thrds[title]" title="$thrds[title]">
        
$thrds[title]
</a>
    </h2>
    <div class="postdate">
        <img src="images/date.png" /> 
$postdate <img src="images/user.png" /> $thrds[username] 
    </div>
    <div class="entry">
        <p>
$thrds[pagetext]</p><a href="showthread.php?t=$thrds[threadid]" target="_blank" alt="$thrds[title]" title="$thrds[title]">
        Read more..
</a><br/><br/>
    </div>
</div>
EOD;
            

Don't forget to put the:
PHP Code:
 require_once(DIR '/includes/class_bbcode.php');
   
$bbcode_parser =& new vB_BbCodeParser($GLOBALS['vbulletin'], fetch_tag_list(),true); 
At the top of the plugin now... and you may need global.php too, try it and see.
Reply With Quote
Reply

Thread Tools

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 01:36 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.05520 seconds
  • Memory Usage 2,436KB
  • 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
  • (1)bbcode_code
  • (1)bbcode_html
  • (18)bbcode_php
  • (6)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
  • (5)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
  • (1)postbit_attachment
  • (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_attachment
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • pagenav_page
  • pagenav_complete
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete