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 a New Tab in the navbar
Lynne's Avatar
Lynne
Join Date: Sep 2004
Posts: 41,180

 

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

Here's a pretty simple method for creating a new tab in the navbar, along with a submenu to go along with it. All you need is a unique condition for when your tab will be shown. What you will be making is a plugin to create the Nav Link along with a submenu which Link 1, Link 2, Link 3, and Drop Down which then drops down and has SubLink 1, SubLink 2, and SubLink 3. This is shown below.

NOTE: This is for 4.0.x and 4.1.x. In 4.2.x, you should be using the Navigation Manager.




This article is NOT to be used just to add another link to a submenu. It is for creating the Nav Link tab along with all the submenus. Again, if all you want is to add submenus to an existing tab, then this article is NOT for you!!!

This article is also for use by users who understand the basics of conditions and can write them. The navbar is not really an easy thing to play with if you don't know what you are doing - I think even Wayne said it had issues - so don't try this if you don't understand how to write a condition.

OK, with that out of the way....

Here's the basic template for making your new tab:

Create a plugin (Plugins & Products) > Add New Plugin:
hook location - process_templates_complete *
Title - New Tab for Navbar
Execution Order - 5
(* I used to have this listed as global_state_check but then noticed vb themselves use the process_templates_complete hook location, so I changed it.)

PHP Code:
$tabselected '';
$tablinks '';
if (
THIS_SCRIPT == 'yourpage')
{
    
$vbulletin->options['selectednavtab']='unique_name';
    
$tabselected ' class="selected"';
    
$tablinks '                <ul class="floatcontainer">
                        <li><a href="link1.php">Link 1</a></li>
                            <li class="popupmenu">
                                <a href="javascript://" class="popupctrl">Drop Down</a>
                                <ul class="popupbody popuphover">
                                        <li><a href="sublink1.php">SubLink 1</a></li>
                                        <li><a href="sublink2.php">SubLink 2</a></li>
                                        <li><a href="sublink3.php">SubLink 3</a></li>
                                </ul>
                            </li>
                        <li><a href="link2.php">Link 2</a></li>
                        <li><a href="link3.php">Link 3</a></li>
                </ul> '
;


$template_hook['navtab_end'] .= '<li'.$tabselected.'><a class="navtab" href="link.php">Nav Link</a>'.$tablinks.'</li>' 
Things to take note of:

PHP Code:
if (THIS_SCRIPT == 'yourpage'
Your condition MUST be unique! If you use a condition that is also going to evaluate to true for another tab, then they will both be highlighted and the wrong submenu may show up underneath.

PHP Code:
$vbulletin->options['selectednavtab']='unique_name'
The 'seletednavtab' must also be a unique name. Again, if you have two tabs with the same 'selectednavtab' name, then both tabs will be highlighted.

PHP Code:
$template_hook['navtab_end'] .= '<li'.$tabselected.'><a class="navtab" href="link.php">Nav Link</a>'.$tablinks.'</li>' 
You may use a different template_hook here - it just depends on where you want your tab to be - navtab_start and navtab_middle are also available.


ragtek also posted an article to do the same thing only using a template with the plugin - [HOW TO - vB4] Create a New Tab in the navbar (with template)



Originally posted on vb.org 2009-10-27.

Other related articles of possible interest:
[HOW TO - vB4] Remove the vB Default Navtabs
[HOW TO - vB4] Create your own vBulletin page
Attached Images
File Type: png vb4_nav_links.png (21.8 KB, 0 views)
Reply With Quote
  #312  
Old 08-13-2010, 07:54 PM
Lynne's Avatar
Lynne Lynne is offline
 
Join Date: Sep 2004
Location: California/Idaho
Posts: 41,180
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

You need to use php in a plugin. {vb:template stuff} is not php. You need to use actual $variables.
Reply With Quote
  #313  
Old 08-13-2010, 07:56 PM
pedrossi's Avatar
pedrossi pedrossi is offline
 
Join Date: Mar 2010
Posts: 30
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by Lynne View Post
You need to use php in a plugin. {vb:template stuff} is not php. You need to use actual $variables.
How can I get the results from the {vb:template stuff} into a PHP variable then? Or, how can I use PHP to figure out what the user's ID is? Still new to vb modding...
Reply With Quote
  #314  
Old 08-13-2010, 07:59 PM
Lynne's Avatar
Lynne Lynne is offline
 
Join Date: Sep 2004
Location: California/Idaho
Posts: 41,180
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

If you look in the php code, then you will see how to call out stuff using php. If you want *your* userid, then it would be $vbulletin->userinfo['userid'].
Reply With Quote
  #315  
Old 08-13-2010, 08:30 PM
pedrossi's Avatar
pedrossi pedrossi is offline
 
Join Date: Mar 2010
Posts: 30
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Thanks, that worked!

Now to make it so that only logged in users can see the tab. I'm assuming $vbulletin->userinfo['userid'] returns either empty or '0' if the user isn't logged in, so an if statement should do the job (hopefully) =)

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

In case anyone is interested, here is the code to add to a new vBulletin plugin which will create a conditional navbar tab. If the user is logged in, it displays a tab linking to his profile. If not, it displays a tab linking to the registration page (register.php).

Thanks Cellarius and Lynne for helping me figure it out!

PHP Code:
$tabselected '';
$tablinks '';
$tabselected_nolog '';
$tablinks_nolog '';
if (
THIS_SCRIPT == 'member')
{
    
$vbulletin->options['selectednavtab']='my_profile';
    
$tabselected ' class="selected"';
    
$tablinks '                <ul class="floatcontainer">
                         <li><a href="private.php">Inbox</a></li>
                        <li><a href="profile.php?do=editprofile">Edit Profile</a></li>
                        <li><a href="profile.php?do=editoptions">Account Settings</a></li>
                        <li><a href="profile.php?do=privacy">Privacy Settings</a></li>
                                 </ul> '
;


if (
THIS_SCRIPT == 'register')
{
    
$vbulletin->options['selectednavtab']='sign_up';
    
$tabselected_nolog ' class="selected"';
}

$userid $vbulletin->userinfo['userid'];

if(
$userid == 0)
{
    
    
$template_hook['navtab_start'] .= '<li'.$tabselected_nolog.'><a class="navtab" href=    "register.php">Sign Up</a>'.$tablinks_nolog.'</li>' ;
    
}else if(
$userid 0){

$template_hook['navtab_start'] .= '<li'.$tabselected.'><a class="navtab" href=    "member.php?'.$userid.'">My Profile</a>'.$tablinks.'</li>' ;


Reply With Quote
  #316  
Old 08-14-2010, 10:32 PM
Boofo's Avatar
Boofo Boofo is offline
 
Join Date: Mar 2002
Location: Des Moines, IA (USA)
Posts: 15,776
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Thank you, Lynne, for the well thought out article. I have been trying to figure this out for 2 days now. You made it easy, young lady.

For anyone interested, here is all you need to make a W3C button that will check the markup validation for whatever page of the site you are currently on.

PHP Code:
$template_hook['navtab_end'] .= '<li><a class="navtab" href="http://validator.w3.org/check?uri=referer" target="_blank">W3C</a></li>'
Reply With Quote
  #317  
Old 08-15-2010, 09:08 PM
pedrossi's Avatar
pedrossi pedrossi is offline
 
Join Date: Mar 2010
Posts: 30
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

So I added a link to the user's private message inbox as a sublink to my new tab, but when I click on that it activates the "forum' tab instead of the new tab. Any ideas on what files I have to modify to get the new tab to be activated instead of the forum tab? I'm guessing I need to find a certain condition and change it?
Reply With Quote
  #318  
Old 08-15-2010, 10:20 PM
Boofo's Avatar
Boofo Boofo is offline
 
Join Date: Mar 2002
Location: Des Moines, IA (USA)
Posts: 15,776
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

It should stay with the new tab when it is clicked. Does the tab itself stay selected when you click it?
Reply With Quote
  #319  
Old 08-16-2010, 02:27 AM
pedrossi's Avatar
pedrossi pedrossi is offline
 
Join Date: Mar 2010
Posts: 30
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by Boofo View Post
It should stay with the new tab when it is clicked. Does the tab itself stay selected when you click it?
Yep, it does. I'm thinking it has to do with all that THIS_SCRIPT business, and that there is piece of code that's telling the Forum tab to select itself if I am on the inbox page... but I need to find that piece of code and change it so that it instead selects the New Tab. I could be wrong, though...

I'm thinking I could add a condition to the plugin that says the new tab should be selected if THIS_SCRIPT is the inbox, but that would create a conflict and both the new tab and the forum tab would select themselves, causing a big mess.
Reply With Quote
  #320  
Old 08-16-2010, 03:20 AM
Boofo's Avatar
Boofo Boofo is offline
 
Join Date: Mar 2002
Location: Des Moines, IA (USA)
Posts: 15,776
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Any sub-link you add needs to be under the navbar button you want to user it with. Like you did with the My Profile code.
Reply With Quote
  #321  
Old 08-16-2010, 05:37 AM
pedrossi's Avatar
pedrossi pedrossi is offline
 
Join Date: Mar 2010
Posts: 30
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by Boofo View Post
Any sub-link you add needs to be under the navbar button you want to user it with. Like you did with the My Profile code.
Here's what I've got right now:

http://cl.ly/20PD


When I click the "My Profile" tab, it becomes selected and it shows the right sub-links. "Career Talk" is what I have renamed my "Forum" tab to.

When I click on the sub-link "Inbox", though, it takes the user to the private messages page, but now the "Career Talk" tab becomes selected:

http://cl.ly/20N6

And here is my code:

PHP Code:
$tabselected '';
$tablinks '';
$tabselected_nolog '';
$tablinks_nolog '';
if (
THIS_SCRIPT == 'member')
{
    
$vbulletin->options['selectednavtab']='my_profile';
    
$tabselected ' class="selected"';
    
$tablinks '                <ul class="floatcontainer">
                         <li><a href="private.php">Inbox</a></li>
                        <li><a href="profile.php?do=editprofile">Edit Profile</a></li>
                        <li><a href="profile.php?do=editoptions">Account Settings</a></li>
                        <li><a href="profile.php?do=privacy">Privacy Settings</a></li>
                                 </ul> '
;


if (
THIS_SCRIPT == 'register')
{
    
$vbulletin->options['selectednavtab']='sign_up';
    
$tabselected_nolog ' class="selected"';
}

$userid $vbulletin->userinfo['userid'];

if(
$userid == 0)
{
    
    
$template_hook['navtab_start'] .= '<li'.$tabselected_nolog.'><a class="navtab" href=    "register.php">Sign Up</a>'.$tablinks_nolog.'</li>' ;
    
}else if(
$userid 0){

$template_hook['navtab_start'] .= '<li'.$tabselected.'><a class="navtab" href=    "member.php?'.$userid.'">My Profile</a>'.$tablinks.'</li>' ;


I'm slowly getting there, just need a push in the right direction
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 04:31 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.07982 seconds
  • Memory Usage 2,387KB
  • 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
  • (7)bbcode_php
  • (3)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
  • (2)pagenav_pagelinkrel
  • (11)post_thanks_box
  • (10)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