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
  #352  
Old 08-11-2010, 06:22 AM
cellarius's Avatar
cellarius cellarius is offline
 
Join Date: Aug 2005
Posts: 1,987
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Then why don't you create a custom php page in the CMS in the first place? No sense in recreating the whole CMS infrastructure, when you just could use it.
Reply With Quote
  #353  
Old 08-11-2010, 06:53 AM
Tahooma Tahooma is offline
 
Join Date: Aug 2010
Posts: 51
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by cellarius View Post
Then why don't you create a custom php page in the CMS in the first place? No sense in recreating the whole CMS infrastructure, when you just could use it.
My goal is to integrate a mod which uses the whole width of the screen into the "3 columns" design.
As i am very ned wo vBulletin, i thought the easiest way would be to force the .php file into the templates.
Reply With Quote
  #354  
Old 08-11-2010, 08:51 PM
Dragonsys's Avatar
Dragonsys Dragonsys is offline
 
Join Date: Jan 2008
Location: DFW, Texas
Posts: 743
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by Wilfred1 View Post
I wonder if you can help me with this one Lynne

The problem I have is defining the WOS statement for:
Code:
Unknown Location
/index.php?pageid=news_reader
What I have which doesn't work (the others do) is:
Code:
    case '../index.php?pageid=news_reader': 
        $userinfo['activity'] = 'News Reader'; 
        break;
and
Code:
   case 'News Reader': 
        $userinfo['where'] = '<a href="../index.php?pageid=news_reader">News Reader</a>'; 
        $userinfo['action'] = "Viewing Page"; 
        $handled = true; 
        break;
I am trying to find a solution for this as well. What I have tried i using the online_location_preprocess hook.

my code looks like this:
Code:
if ($loc == './error.php?error=400')
{
    $filename = 'error_400.php';
}
if ($loc == './error.php?error=401')
{
    $filename = 'error_401.php';
}
if ($loc == './error.php?error=403')
{
    $filename = 'error_403.php';
}
if ($loc == './error.php?error=404')
{
    $filename = 'error_404.php';
}
if ($loc == './error.php?error=500')
{
    $filename = 'error_500.php';
}
and then in online_location_process i have:
Code:
if ($filename == 'error_400.php')
{
        $userinfo['activity'] = 'error400';
}
if ($filename == 'error_401.php')
{
        $userinfo['activity'] = 'error401';
}
if ($filename == 'error_403.php')
{
        $userinfo['activity'] = 'error403';
}
if ($filename == 'error_404.php')
{
        $userinfo['activity'] = 'error404';
}
if ($filename == 'error_500.php')
{
        $userinfo['activity'] = 'error500';
}
But I still get Unknown Location.
Reply With Quote
  #355  
Old 08-13-2010, 02:12 AM
ArtakEVN's Avatar
ArtakEVN ArtakEVN is offline
 
Join Date: Jan 2010
Location: Toronto
Posts: 24
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by LoveStream View Post
Thank your tutor.
I had met following error, when I using this template page, there is a cookie sent already.

Uh!
PHP Code:
Unable to add cookiesheader already sent.
File: /www/forum/phoenixjournals.php
Line
1

Forums test 
I create scripts as phoenixjournals.php, but it occur if I logout.

How could I solve it? or what deos it mean in this case?

I hope your teaching. Thanks.
Maybe you save your file in unicode.
Reply With Quote
  #356  
Old 08-15-2010, 07:19 PM
choitz choitz is offline
 
Join Date: Jan 2010
Posts: 15
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Hi,
This has all worked brilliantly after flicking a bit between the original and Lynn's article (more of a case of me having to get my head round it).

Now, I don't know if it's a roblem with my custom style, but standard html doesn't seem to be having any effect on my pages, for example:
Code:
<UL><LI>[</LI></UL> <STRONG></STRONG> <I></I>
but;
Code:
 <a href="..."></a>
works. I'd be grateful for any ideas why?

Cheers
Reply With Quote
  #357  
Old 08-15-2010, 08:00 PM
Lynne's Avatar
Lynne Lynne is offline
 
Join Date: Sep 2004
Location: California/Idaho
Posts: 41,180
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Use a div of class="restore" around the code to get back to normal html.
Reply With Quote
  #358  
Old 08-16-2010, 04:53 PM
choitz choitz is offline
 
Join Date: Jan 2010
Posts: 15
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by Lynne View Post
Use a div of class="restore" around the code to get back to normal html.
Thanks for helping me out with a n00b problem Lynn, for the record if anyone else has that problem the double quotes (")after A HREF are left in, but if you use single (') or none at all then it works. Thanks again Lynn!
Reply With Quote
  #359  
Old 08-19-2010, 09:02 AM
AfterWorldForum AfterWorldForum is offline
 
Join Date: Dec 2008
Posts: 154
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Lynne,

Thanks for converting the article to a vB4 version. It's very helpful for those of us offering some custom-built pages.

If you do not mind, I do have a question about tables, though. I've used the approach a lot where I offer a custom page to pull some custom data from the database. Typically, this means I connect to the db, pull out data, and then build one huge HTML string with tables to represent the data.

I have looked, but not managed to find a definite article on how to achieve the same but consistent with the vB4 coding standards. I have tried looking at the CSS classes used in the vB4 pages, but I have to admit that is kind of over my head (I will admit I did not spend THAT much time on it, considering I still am trying to solve lots of issues left over after the migration).

As a simple example, I used to use alt1 and alt2. I can wrap one of those div class="restore"> around the table definition, but were I to totally rewrite my pages so they also match with the vB4 styles I use, how would I go at that, exactly? And where would I be able to find the restore class in the new stylevar setup, so I could actually alter the (for instance) alt1 and alt2 tags?

Sorry if you feel I am hijacking your thread. I just have not found a way to actually solicit for an article or guide, and custom pages is where I imagine lots of people will be using tables.

Thanks in advance, and I apologize for what might appear as an thread hijack.

Peter
Reply With Quote
  #360  
Old 08-19-2010, 02:46 PM
Lynne's Avatar
Lynne Lynne is offline
 
Join Date: Sep 2004
Location: California/Idaho
Posts: 41,180
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

If you do a Search in Templates for ".restore", you'll find them all defined in vbulletin.css. I never change things in that template though, the best thing to do is put new CSS in addiitional.css

If you need help with something, you just post in the main (vB$, in this case) forums. Usually you don't ask for an article, you just ask for help. Then, either the person helping, or the person who got helped, may throw together an article to help others.
Reply With Quote
  #361  
Old 08-19-2010, 04:23 PM
AfterWorldForum AfterWorldForum is offline
 
Join Date: Dec 2008
Posts: 154
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by Lynne View Post
If you do a Search in Templates for ".restore", you'll find them all defined in vbulletin.css. I never change things in that template though, the best thing to do is put new CSS in addiitional.css

If you need help with something, you just post in the main (vB$, in this case) forums. Usually you don't ask for an article, you just ask for help. Then, either the person helping, or the person who got helped, may throw together an article to help others.
Thanks Lynne. I'll have a peek at the vbulletin.css. Should that not work out, I'll post a question
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 02:12 AM.


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.05937 seconds
  • Memory Usage 2,389KB
  • 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
  • (10)bbcode_code
  • (1)bbcode_html
  • (1)bbcode_php
  • (5)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