View Full Version : Need to add a menu to the subnav with a plugin
steven s
12-29-2009, 10:28 PM
I'm looking to add a dropdown at the beginning of the subnav in the forum and CMS.
Probably the blog too. I have the html.
For the navbar I need to enter it in two places, one for those registered and one for guests.
It will be the first item in the bar.
Same in the CMS and blog.
I can hard code it all with no problem, but need to remember if I make a change in 1 place, I need to change it in 3 or places.
In vB3 I created a plugin that stored a variable.
The variable $mymenu in this case would be the html.
Then I'd hardcode $mymenu where I needed it and edit the plugin when necessary.
Another way I used to edit templates was find and replace.
I don't understand how to do it in vB4.
I've read a couple articles on how to use the new variables.
I just don't understand it.
Perhaps I can make a plugin that stores the html as in vB3?, I still don't understand how to use that variable in a template.
Any advice?
Lynne
12-29-2009, 11:08 PM
You can probably write the plugin and have the contents in a variable, $mymenu, just like before and then preregister the variable for use in the navbar. That should be no problem. I think the blog and cms also use templates for the link, so you'd have to preregister it for them also. Then you'd have to edit the templates to add the variable.
vB_Template::preRegister('navbar', array('mymenu' => $mymenu));
steven s
12-29-2009, 11:39 PM
I'm thinking then my plugin would need to be
Hook: process_templates_complete
vB_Template::preRegister('navbar', array('mymenu' => $mymenu));
$mymenu='menu will go here';
Placing $mymenu in the navbar template just displays $mymenu. :(
Lynne
12-30-2009, 02:47 AM
You don't use $mymenu anymore - you need to use the new syntax. The new syntax is {vb:raw mymenu} . Check the functions.php page where the navbar is rendered and make sure your hook is located *before* that.
steven s
12-30-2009, 10:27 PM
You don't use $mymenu anymore - you need to use the new syntax. The new syntax is {vb:raw mymenu} . Check the functions.php page where the navbar is rendered and make sure your hook is located *before* that.
Thanks,
You would think the hook should be navbits_complete, if I am reading this correctly.
($hook = vBulletinHook::fetch_hook('navbits_complete')) ? eval($hook) : false;
return $code;
}
/**
* Renders the navbar template with the specified navbits
*
* @param array Array of navbit information
*
* @return string Navbar HTML
*/
function render_navbar_template($navbits)
{
global $vbulletin;
$templater = vB_Template::create('navbar');
// Resolve the root segment
$templater->register('bbmenu', $vbulletin->options['bbmenu']);
$templater->register('ad_location', $GLOBALS['ad_location']);
$templater->register('foruminfo', $GLOBALS['foruminfo']);
$templater->register('navbar_reloadurl', $GLOBALS['navbar_reloadurl']);
$templater->register('navbits', $navbits);
$templater->register('notices', $GLOBALS['notices']);
$templater->register('notifications_menubits', $GLOBALS['notifications_menubits']);
$templater->register('notifications_total', $GLOBALS['notifications_total']);
$templater->register('pmbox', $GLOBALS['pmbox']);
$templater->register('return_link', $GLOBALS['return_link']);
$templater->register('template_hook', $GLOBALS['template_hook']);
return $templater->render();
}
I'm missing something simple.
Lynne
12-30-2009, 10:36 PM
No, you aren't reading that correctly. That is a function. It gets called from somewhere and that is where you would look backwards from.
steven s
12-30-2009, 11:17 PM
Looking at your tab, I realize that I had this reversed. It should be
$mymenu=' html here';
vB_Template::preRegister('navbar', array('mymenu' => $mymenu));
Still don't understand the hooks since navbit_complete and some other hooks seem to work.
But thanks! I'm on my way.
Lynne
12-30-2009, 11:23 PM
If it works, great! I could be that the hook is called right before the function is called (but it isn't obvious in the code you posted).
steven s
12-31-2009, 12:35 AM
Now I'm trying to use the same plugin in the CMS subnav.
Am I able to preRegister twice within the same plugin?
I changed the variable to chapterprograms.
vB_Template::preRegister('navbar', array('chapterprograms' => $chapterprograms));
vB_Template::preRegister('vbcms_navbar_link', array('chapterprograms' => $chapterprograms));
Lynne
12-31-2009, 02:22 AM
Sure, you can preregister a variable for a couple of templates in one plugin. You just need to make sure it is the proper plugin to use for each of those templates.
vBulletin® v3.8.12 by vBS, Copyright ©2000-2025, vBulletin Solutions Inc.