The Arcive of Official vBulletin Modifications Site.It is not a VB3 engine, just a parsed copy! |
|
[HOW TO - vB4] Create your own vBulletin page
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()); ?> 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 |
#712
|
|||
|
|||
OK, this may be a dumb question, but here goes:
I followed the instructions of creating a new tab. Worked perfectly. Then, I followed these directions to create a new page in vBulletin and it worked perfectly. Now, I would like to incorporate all of my existing html pages (outside of vBulletin) I have created for my website within vBulletin. How do I link up the new page I created within Vbulletin to my existing pages? I want all of my pages to be within vBulletin so thatall of the formatting remains exactly the same. Do I copy and paste all of the html into the new template I just created, or can you simply direct the new template to point at the existing html file? Hope I didn't confuse everyone. Thanks, |
#713
|
||||
|
||||
You will need to copy your page html into a new template that is called in the php page you make.
|
#714
|
||||
|
||||
And make sure you have valid html afterwards - you need to copy just stuff between the body tags, not the head etc., or you will end up with doubles.
|
#715
|
|||
|
|||
Hi,
I have this: test.php 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); $templater->register('includebody', $includebody); print_output($templater->render()); ?> 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> {vb:raw includebody} {vb:raw footer} </body> </html> Code:
if (THIS_SCRIPT == 'test') { ob_start(); include('./test/game/start.php'); $includebody = ob_get_contents(); ob_end_clean(); } When I changed the global_start to global_bootstrap_init_start the php file that was been called no longer displayed. Can anyone help with this please. |
#716
|
|||
|
|||
I think your problem is that global_bootstrap_init_start code is called inside a function, so your $includebody variable is not global. You could fix it by adding a "global $includebody" statement.
But if that plugin is only being executed when your custom script is running, you could also just move the plugin code to in to your test.php script. It will work exactly the same - there's no reason that code has to be at the global_start hook, it's just that that's a good place to put it if you want to include an external file when you're not writing a custom php script. |
#717
|
|||
|
|||
Quote:
|
#718
|
|||
|
|||
Quote:
It did change the characters but it's still not written in Hebrew. example: ???? ????? ???? ??? I didn't understand how I can solve it via the link you have provided. Do you have any other suggestions? |
#719
|
|||
|
|||
Over the past day I have used this tutorial and thread and others to create pages that link to menu options and it is working exactly as expected.
Now I want to embed a knowledge base tool (KBPublisher) within a vb4 page so it has the vb menus over it and vbstyles. I did this in vb3 and am now working the vb4 issues with this tutorial. I am at the 98% point. The kb tool integrates and works well all with the vb menus. The problem is that it doesn't recognize the user login information and I am having trouble figuring out how to pass the information through the rendering process. All of my test cases recognized the user including the php file if called directly rather than through the kb tool, including highlighting the added buttons. So most of the information is getting through. I am hoping to get help on how to pass the userinfo through the rendering process so I can display the kb system within this vbpage. It looks pretty awesome, but just keeps asking my sign-up even though I am logged in and any page I shift to recognizes me. My php code is pretty vanilla and is called knowledgebase.php: PHP Code:
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} <title>{meta_title}</title> <meta http-equiv="content-type" content="text/html; charset={meta_charset}" /> <meta http-equiv="content-language" content="{meta_content_lang}" /> <meta name="keywords" content="{meta_keywords}" /> <meta name="description" content="{meta_description}" /> <meta name="robots" content="{meta_robots}" /> <!--[if IE]> <link rel="stylesheet" type="text/css" href="{common_ie_css}" /> <![endif]--> <link rel="stylesheet" type="text/css" href="{common_css}" /> <link rel="stylesheet" type="text/css" href="{common_view_css}" /> {style_css_links} {rss_head_links} <script src="{base_href}client/jscript/common.js" type="text/javascript"></script> </head> <body> {vb:raw header} {vb:raw navbar} <div id="pagetitle"> <h1>{vb:raw pagetitle}</h1> </div> <h2 class="blockhead">Title</h2> <div class="blackbody"> {content} </div> {vb:raw footer} </body> </html> {style_css_links}, {rss_head_links}, and {content} as shown in the default kbpublisher template file shown here: HTML Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>{meta_title}</title> <meta http-equiv="content-type" content="text/html; charset={meta_charset}" /> <meta http-equiv="content-language" content="{meta_content_lang}" /> <meta name="keywords" content="{meta_keywords}" /> <meta name="description" content="{meta_description}" /> <meta name="robots" content="{meta_robots}" /> <!--[if IE]> <link rel="stylesheet" type="text/css" href="{common_ie_css}" /> <![endif]--> <link rel="stylesheet" type="text/css" href="{common_css}" /> <link rel="stylesheet" type="text/css" href="{common_view_css}" /> {style_css_links} {rss_head_links} <script src="{base_href}client/jscript/common.js" type="text/javascript"></script> </head> <body> your html here {content} your html here </body> </html> then the KBPublisher system renders the page replacing the {tags} with the appropriate code. Obviously the {content} tag is where the KB software gets inserted (it's great). KBPublisher is open source and I can modify the index.php file if needed. I did it for the VB3 integration but naturally I need to minimize the number of hacks to make support easy. However, inside the index.php file for KBPublisher is the following comment: PHP Code:
The way the kb software works is that when I call its index.php I have already specified in a configuration file the name of the template file, in this case knowledgebase.php, which uses the vb rendering system which calls the vb template. Everything displays just the way I want, but it keeps showing the user as not logged in. I know this is a long entry, but I wanted to be complete for the help. Plus, if we get this solved, others might like to know how to integrate a comprehensive knowledgebase tool within a vb page. I have experimented with various incarnations of input security token but I either didn't get the format correct, the location correct, or was otherwise unsuccessful |
#720
|
|||
|
|||
Check your "Path to Save Cookies" setting under Settings > Options > Cookies and HTTP Header Options in the adminCP. Like it says in the comments, this must be set to / if you want the vb cookies to be sent no matter which directory your custom page is in.
|
#721
|
|||
|
|||
Quote:
admincp -> options -> cookies and HTTP Header Options Path to Save Cookies is set to a ; / I also experimented with Cookie domain selected .touringmotorgliders.org as well as the default 'blank' to my domain .touringmotorgliders.org with no difference. Incidentally, I can put knowledgebase.php into the same directory as the forum and it doesn't make a difference. The index.php file for the kbpublisher system needs to be in its directory. I can add the global cast in that file, but it doesn't make any difference, unless I can find a way to pass the user information. Thanks. So I am still experimenting ... |
|
|
X vBulletin 3.8.12 by vBS Debug Information | |
---|---|
|
|
More Information | |
Template Usage:
Phrase Groups Available:
|
Included Files:
Hooks Called:
|