Go Back   vb.org Archive > vBulletin Article Depository > Read An Article > vBulletin 4 Articles

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
  #392  
Old 02-09-2011, 06:11 PM
odln018's Avatar
odln018 odln018 is offline
 
Join Date: Mar 2006
Posts: 210
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Ok, I'm making progress with this.

What I'm trying to do is created a Special Access tab for those who have contributed and have access to more features of the site.

My link1.php page contains this:

Code:
define(SpecialAccess, true);
When I click on the Nav link, I want that tab to be highlighted, with items in the sub for "sub link 1", sublink 2", etc.

Here's my plugin code:

Code:
$tabselected = '';
$tablinks = '';
if (THIS_SCRIPT == 'Special')
{

    $vbulletin->options['selectednavtab']='Special';
    $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>' ;

When I click on the tab, I get taken directly to the contents of link1.php

Any corrections would be greatly appreciated.
Reply With Quote
  #393  
Old 02-09-2011, 06:58 PM
Lynne's Avatar
Lynne Lynne is offline
 
Join Date: Sep 2004
Location: California/Idaho
Posts: 41,180
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

You say that right now if you click on the tab, you get taken to link1.php. Isn't that what you want? I'm not understanding what the problem is that you are having.

And on link1.php, do you define THIS_SCRIPT?
Reply With Quote
  #394  
Old 02-16-2011, 10:30 PM
wpeloquin wpeloquin is offline
 
Join Date: May 2006
Location: Behind you...
Posts: 143
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Hello.

I just wanted to say that I used a hybrid between yours and ragtek's. It allows the base of the navtab to be stored in the plugin, with a couple of things that can be edited in the Admin->Options->Plugin, and offloads the submenu into a template that can be edited as needed by the end-user.

Plugin PHP:
Code:
$tabselected = '';
$tablinks = '';

$navtab_name = $vbulletin->options['plugin_navtab_title'];
$navtab_location = $vbulletin->options['plugin_navtab_location'];
      Those are based on Options that i set up, so the user can choose title and location in the Admin->Options->Plugin Options

switch ($location) {
    case '1':
        $tabloc = 'navtab_end'; break;
    case '2':
        $tabloc = 'navtab_middle'; break;
    case '3':
        $tabloc = 'navtab_start'; break;
} 
      The above code determines which option was selected, 1/2/3, to determine location of navtab.

if (THIS_SCRIPT == 'rkc_plugin')
{
    $vbulletin->options['selectednavtab']='rkc_plugin';
    $tabselected = ' class="selected"';
    $tablinks .= vB_Template::create('plugin_navbar_submenu')->render();

} 
$template_hook[$nbloc] .= '<li'.$tabselected.'><a class="navtab" href="pluginpage.php">'.$navtabname.'</a>'.$tablinks.'</li>' ;
Template Code:
Code:
<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>
Reply With Quote
  #395  
Old 02-16-2011, 10:55 PM
Boofo's Avatar
Boofo Boofo is offline
 
Join Date: Mar 2002
Location: Des Moines, IA (USA)
Posts: 15,776
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

You ought to release that.
Reply With Quote
  #396  
Old 02-17-2011, 12:50 PM
Hippy's Avatar
Hippy Hippy is offline
 
Join Date: Dec 2001
Location: USA, New Jersey
Posts: 2,392
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by Boofo View Post
You ought to release that.
I'll second that:up:
Reply With Quote
  #397  
Old 02-21-2011, 01:25 AM
Truth66 Truth66 is offline
 
Join Date: Oct 2010
Posts: 13
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

To try and keep things simple, I just added a couple of tabs to the nav bar. The new tabs appear with the name that I want and are fully clickable to the link that I want.
However, when I click onto my new tab it highlights when it's supposed to and then when the new page appears, the tab is no longer highlighted after I move the cursor. The Forum tab automatically highlights, yet the page does not change to the Forum page.

This only happens with the new tabs that I created. I'm using v4.1.2

The tabs were created as a plugin and the hook location is process_templates_complete

Here's the html in the plugin that I used to create one of the new tabs:

$template_hook['navtab_middle'] .= '<li'.$tabselected.'><a class="navtab" href="http://www.voicescount.com/forumdisplay.php?589-Businesses-Sellers-Listings-U.S.A.-Nationwide-Statewide-and-by-American-Cities">U.S.A. Listings</a>'.$tablinks.'</li>';

Is there anything missing in this html?

Thanks Again
Reply With Quote
  #398  
Old 02-21-2011, 02:59 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 Truth66 View Post
To try and keep things simple, I just added a couple of tabs to the nav bar. The new tabs appear with the name that I want and are fully clickable to the link that I want.
However, when I click onto my new tab it highlights when it's supposed to and then when the new page appears, the tab is no longer highlighted after I move the cursor. The Forum tab automatically highlights, yet the page does not change to the Forum page.

This only happens with the new tabs that I created. I'm using v4.1.2

The tabs were created as a plugin and the hook location is process_templates_complete

Here's the html in the plugin that I used to create one of the new tabs:

$template_hook['navtab_middle'] .= '<li'.$tabselected.'><a class="navtab" href="http://www.voicescount.com/forumdisplay.php?589-Businesses-Sellers-Listings-U.S.A.-Nationwide-Statewide-and-by-American-Cities">U.S.A. Listings</a>'.$tablinks.'</li>';

Is there anything missing in this html?

Thanks Again
You need to make sure that you wrote a valid, unique condition for when you tab is active - this is the example condition given and you will need to change it to be valid for your pages:
PHP Code:
if (THIS_SCRIPT == 'yourpage'
That is just an example and your condition will most likely look totally different.
Reply With Quote
  #399  
Old 02-21-2011, 08:07 PM
Truth66 Truth66 is offline
 
Join Date: Oct 2010
Posts: 13
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Hi Lynne,

I've spent countless hours on this today. In fact I've created three different plugins, using a different code fo each and tested each plugin seperately. All three plugins do the exact same thing. Yet all have the exact same problem. The problem is that the tab I create doesn't stay highlighted after a person clicks onto the tab. The tab that does stay highlighted after my new tab is clicked is the Forum tab.

Here's the three different types of code that I've tried:

Plugin A Code:

$template_hook['navtab_end'] = '<li><a class="navtab" href="forumdisplay.php?589">U.S.A. Listings';

Note: Plugin A Code was explained here:

https://vborg.vbsupport.ru/showthrea...67#post2149967

Plugin B Code:

$template_hook['navtab_middle'] .= '<li'.$tabselected.'><a class="navtab" href="http://www.voicescount.com/forumdisplay.php?589-Businesses-Sellers-Listings-U.S.A.-Nationwide-Statewide-and-by-American-Cities">U.S.A. Listings</a>'.$tablinks.'</li>';

Plugin C Code:

$tabselected = '';
$tablinks = '';
if (THIS_SCRIPT == 'Cdn Listings')
{
$vbulletin->options['selectednavtab']='Cdn Listings_tab';
$tabselected = ' class="selected"';
$tablinks = '
<ul class="floatcontainer">
<li><a href="http://www.voicescount.com/forumdisplay.php?2176-Businesses-Sellers-Listings-Canada-Nationwide-Provincewide-amp-by-Canadian-Cities">Cdn Listings</a></li>
</ul>
';
}
$template_hook['navtab_end'] .= '<li'.$tabselected.'><a class="navtab" href="http://www.voicescount.com/forumdisplay.php?2176-Businesses-Sellers-Listings-Canada-Nationwide-Provincewide-amp-by-Canadian-Cities">Cdn Listings'.$tablinks.'</li>' ;

As you can see I'm trying.

Please review the above codes and I appreciate any insite.

Thanks Again
Reply With Quote
  #400  
Old 02-21-2011, 09:55 PM
Lynne's Avatar
Lynne Lynne is offline
 
Join Date: Sep 2004
Location: California/Idaho
Posts: 41,180
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

For Plugin A & B, you have not posted your unique condition at all, so I don't know where the problem is. I do know that if you are linking to a forumdisplay page that you won't be able to use THIS_SCRIPT because all of the forumdisplay pages have that defined the same:
PHP Code:
define('THIS_SCRIPT''forumdisplay'); 
As for the last, Plugin C, again, you are linking to a forumdisplay page and saying the condition is if THIS_SCRIPT equals 'Cdn Listings' but I don't see how you could possible define that since THIS_SCRIPT is already defined on the forumdisplay page to be 'forumdisplay' as I showed above.

You are going to have to use something like the forumid in the condition. Like:
PHP Code:
if ($GLOBALS['forumid'] == 2176

    
$vbulletin->options['selectednavtab']='whatever'
.... 
Reply With Quote
  #401  
Old 02-21-2011, 11:51 PM
Truth66 Truth66 is offline
 
Join Date: Oct 2010
Posts: 13
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Thanks Lynne,

Your solution to Plugin C works:

I changed:
if (THIS_SCRIPT == 'Cdn Listings')

to:

if ($GLOBALS['forumid'] == 2176)

The single Tab now works the way it's supposed to.

Based on your solution, how would your original code at the start of this thread be changed so that I could do the following:

The main tab says Listings

A person clicks onto Listings and a drop menu appears containing three or more sub tabs listed. Each of these sub tabs is linked to a different forum id.

Thanks Again
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:01 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.09571 seconds
  • Memory Usage 2,370KB
  • 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
  • (4)bbcode_code
  • (7)bbcode_php
  • (2)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