Register Members List Search Today's Posts Mark Forums Read

Reply
 
Article Options
vB4.2 Navigation Manager - how to discussion
AusPhotography
Join Date: Nov 2007
Posts: 521

Hobart & Adelaide .au
by AusPhotography AusPhotography is offline 19 May 2012

I have vB 4.2.0 BETA 1 running in my test system.

Products that use templates/hooks to integrate with the navbar will need the following changes to work with the Navigation Manager.

Please post code snips and hints in this thread, we are all on a learning curve.

1. Remove old style navigation hooks/templates etc.

2. Create a new <navigation> section in the product XML file
(You can create the navigation in the navigation manager, linked to a product then export the product file as a skeleton)

3. Set any conditionals in a hook or in your main code
Eg. $show['apmgtug'] = true; is set for one of the menu items in my example
My example relies on $show['member'] = true; as well.
Leave the <show> tag empty for 'public' tabs/links

4. If you have multiple scripts, leave <scripts> blank and set $root at the new hooks set_navigation_tab_fallaback or set_navigation_tab_vbview


Block Disabled:      (Update License Status)  
Suspended or Unlicensed Members Cannot View Code.

I hope that helps you get a quick leg up for this change.

I would probably have a new vB4.2 code base because of the differences, you could have the same code base with some sort of version check.

In the end the new navigation integration is better and easier.

Here are sample <navigation> from one of my own plugins...


Block Disabled:      (Update License Status)  
Suspended or Unlicensed Members Cannot View Code.

Sample phrases the give the text of the navigation items.

Block Disabled:      (Update License Status)  
Suspended or Unlicensed Members Cannot View Code.

--------------- Added 19 May 2012 at 02:31 ---------------

Pull down menu's can also be coded.
Have a look at the vB source for examples.
Specifically "./install/vbulletin-navigation.xml"

Last edited by AusPhotography; 26 May 2012 at 01:19..
Views: 30968
Reply With Quote
Comments
  #2  
Old 19 May 2012, 12:01
nhawk nhawk is offline
 
Join Date: Jan 2011
FYI, the navtab_end template hook in 4.2.0 still works the same as it did in 4.1.12.

It's the navbar that gives headaches.

You can add to the navbar with a DB routine too.

EDIT: But this does totally screw up dynamically built navbar links. On first glance it looks like a phrase needs to be created for each navbar link. If that's the case, the maintenance DB routines for a dynamically created link will be interesting.

Last edited by nhawk; 19 May 2012 at 12:32.
Reply With Quote
  #3  
Old 19 May 2012, 14:34
Paul M's Avatar
Paul M Paul M is offline
 
Join Date: Sep 2004
Real name: Paul M
FYI, the 'show' check can use multiple variables, so if you want a link to only appear if $show['cond1'] and $show['cond2'] are set, you add them both, separated by a dot

<show>cond1.cond2</show>

Custom $show variables can be created pretty much in any hook, as the navigation is almost the last thing built, but two common ones added for the purpose are load_show_variables & load_forum_show_variables.
__________________
Former vBulletin.org Staff Member


Cable Forum
Please do not PM me about custom work - I no longer undertake any.
Note: I will not answer support questions via e-mail or PM - please use the relevant thread or forum.
Reply With Quote
  #4  
Old 19 May 2012, 17:34
Andreas's Avatar
Andreas Andreas is offline
 
Join Date: Jan 2004
Real name: Andreas
But this does totally screw up dynamically built navbar links
IMHO, there should be no dynamically created links as this defeats the purpose of the navigation manager, which is to allow the administrator full control over the menu structure.

May I ask why you would need dynamically created links?
Reply With Quote
  #5  
Old 19 May 2012, 18:04
nhawk nhawk is offline
 
Join Date: Jan 2011
Originally Posted by Andreas View Post
IMHO, there should be no dynamically created links as this defeats the purpose of the navigation manager, which is to allow the administrator full control over the menu structure.

May I ask why you would need dynamically created links?
Posted on vB.com..

'user' in this case means the administrator.

ie: A mod uses a portion of the information entered by the user for the navbar link, say the 'title' portion of the user entry. In order to create the navbar link in the community menu, that 'title' must be also be saved in the phrase table of vB. And then the additional navbar link must be created in the navigation table. Along with that a $show variable must be created in a plugin if the member has permission to view that link.

Now because different 'titles' can have different permissions, there has to be a different $show for each menu item.

That seems like a lot to go through for something that use to take a one line piece of code to throw the menu selection in the community menu in earlier versions.

Last edited by nhawk; 19 May 2012 at 18:15.
Reply With Quote
  #6  
Old 19 May 2012, 18:32
Andreas's Avatar
Andreas Andreas is offline
 
Join Date: Jan 2004
Real name: Andreas
Originally Posted by nhawk View Post
A mod uses a portion of the information entered by the user for the navbar link, say the 'title' portion of the user entry. In order to create the navbar link in the community menu, that 'title' must be also be saved in the phrase table of vB.
Can you give a concreate example of an Add-on so it is easier to understand what exactly you are talking abount?
As far as I understand you intentions by now is that the Add-on allows the administrator to set the title for a link in the Community Menu on the Forum tab?
This can easily be achived by just using the Navigation Manager to rename the link.


And then the additional navbar link must be created in the navigation table.
If it is a "static" link - yes, it should be added to the navigation table upon Add-on installation.
(Which will happen automatically if you have already added that link on your developement system, assigned in to the Add-on and exported the XML).


Along with that a $show variable must be created in a plugin if the member has permission to view that link.

Now because different 'titles' can have different permissions, there has to be a different $show for each menu item.
Yes, you have to check the permissions and set a flag wether to show the link or not.
But again this is not different from how it worked in vB 4.1


That seems like a lot to go through for something that use to take a one line piece of code to throw the menu selection in the community menu in earlier versions.
Not really, in fact it does require less work in my mind:

In vB 4.1 you had to
  • Add a template for the link
  • Add the phrase for the link
  • Create a setting to let the user select where the link should appear (eg. template hook)
  • Write code to check the setting, the user permissions and to render the template for the selected template hook
... and still the administrator might have wanted to have the link appear on a completely different location

In vB 4.2
  • Add the link in Navigation Manager
  • Write a Plug-in to check permissions and set the $show-Flag
Reply With Quote
  #7  
Old 19 May 2012, 18:39
nhawk nhawk is offline
 
Join Date: Jan 2011
Originally Posted by Andreas View Post
Can you give a concreate example of an Add-on so it is easier to understand what exactly you are talking abount?
Sure.. it's my Advanced Application Forms..

Here's a snippet of the code to add an application type to the community menu...

Block Disabled:      (Update License Status)  
Suspended or Unlicensed Members Cannot View Code.

Don't get me wrong. I can create the menu in the database when the application is created. It just seems like more work to me.

This reminds me of the addition of the <vb:each> in templates...
Nobody is going to tell me that reading a database, parse the data to build an array, sending that array to the template and parsing it a second time is faster than bulding/formating the array and sending it in all one lump piece of data to the template. It's just not possible. Two parses take double the time. But that's a different topic.

Last edited by nhawk; 19 May 2012 at 18:48.
Reply With Quote
  #8  
Old 19 May 2012, 19:17
Andreas's Avatar
Andreas Andreas is offline
 
Join Date: Jan 2004
Real name: Andreas
Originally Posted by nhawk View Post
Here's a snippet of the code to add an application type to the community menu...

Block Disabled:      (Update License Status)  
Suspended or Unlicensed Members Cannot View Code.
Thanks, that's what I expected

The idea behind Navigation Manager is to give the Administrator full control over the menu structure - if you are creating links dynamically at runtime (which is still possible) you are IMHO somewhat defeating that goal.

This reminds me of the addition of the <vb:each> in templates...
Nobody is going to tell me that reading a database, parse the data to build an array, sending that array to the template and parsing it a second time is faster than bulding/formating the array and sending it in all one lump piece of data to the template.
<vb:each> is a lot faster then doing a ton of vB_Template::create() ... render() calls in a loop

Here is a little benchmark:

Block Disabled:      (Update License Status)  
Suspended or Unlicensed Members Cannot View Code.

Reply With Quote
  #9  
Old 19 May 2012, 20:13
Paul M's Avatar
Paul M Paul M is offline
 
Join Date: Sep 2004
Real name: Paul M
Just in case you dont bother running that benchmark, here is the result on my local test environment

Time taken for 10.000 Bit Templates: 1.2209470272064
Time taken for 10.000 Array-Elements with <vb:each>: 0.010501146316528 (over 100x faster)
Success - Both methods yielded the same result data

and on my remote test server ;

Time taken for 10.000 Bit Templates: 1.3666188716888
Time taken for 10.000 Array-Elements with <vb:each>: 0.01978611946106 (over 70x faster)
Success - Both methods yielded the same result data
__________________
Former vBulletin.org Staff Member


Cable Forum
Please do not PM me about custom work - I no longer undertake any.
Note: I will not answer support questions via e-mail or PM - please use the relevant thread or forum.
Reply With Quote
  #10  
Old 19 May 2012, 21:04
nhawk nhawk is offline
 
Join Date: Jan 2011
I've already given in to the idea of having to create the menu additions in the database and have the update for that particular mod ready to be released. And those menu selections were always under the admin's control to begin with. Now they can just move them around a little more.

The bechmark isn't exactly what I was talking about. In the case of rendering bits templates I agree it's much faster.

But I see people using it something like this...


Block Disabled:      (Update License Status)  
Suspended or Unlicensed Members Cannot View Code.

When bulding the array as a static value and displaying it as a single value is much faster..

Block Disabled:      (Update License Status)  
Suspended or Unlicensed Members Cannot View Code.


Last edited by nhawk; 19 May 2012 at 21:16.
Reply With Quote
  #11  
Old 19 May 2012, 21:44
Andreas's Avatar
Andreas Andreas is offline
 
Join Date: Jan 2004
Real name: Andreas
Originally Posted by nhawk View Post
But I see people using it something like this...


Block Disabled:      (Update License Status)  
Suspended or Unlicensed Members Cannot View Code.
Although that is a bit slower than hardcoding the HTML, this is the way it should be done as it separates the presentation from the business logic.

If the designer want's to do smth. complletely different from <ul> he can do that by simply modifying the template - with the list entries being generated in PHP he can't
Reply With Quote
  #12  
Old 19 May 2012, 23:25
kh99 kh99 is offline
 
Join Date: Aug 2009
Real name: Kevin
Originally Posted by Andreas View Post
<vb:each> is a lot faster then doing a ton of vB_Template::create() ... render() calls in a loop
I'm curious, do you know why that is? Is it the time needed to create the objects?
Reply With Quote
  #13  
Old 20 May 2012, 08:14
AusPhotography's Avatar
AusPhotography AusPhotography is offline
 
Join Date: Nov 2007
Real name: Rick-owner, Kym-admin
Originally Posted by kh99 View Post
I'm curious, do you know why that is? Is it the time needed to create the objects?
The render uses 'eval' 'nuff said

Kym
__________________
www.AusPhotography.net.au a.k.a. AP is a photography forum where members share their photography, photo editing skills and techniques. We run regular photographic competitions; Rick (site owner) and Kym (site tech) using this account
*** Home of the AP fully comprehensive vb4 photographic competition management solution ***
Reply With Quote
  #14  
Old 20 May 2012, 08:45
AusPhotography's Avatar
AusPhotography AusPhotography is offline
 
Join Date: Nov 2007
Real name: Rick-owner, Kym-admin
This is very handy... http://www.vbulletin.org/forum/showthread.php?t=283123 (Thanks Andreas)

Also Scott's post on vb.com https://www.vbulletin.com/forum/show...56#post2295256
__________________
www.AusPhotography.net.au a.k.a. AP is a photography forum where members share their photography, photo editing skills and techniques. We run regular photographic competitions; Rick (site owner) and Kym (site tech) using this account
*** Home of the AP fully comprehensive vb4 photographic competition management solution ***
Reply With Quote
  #15  
Old 20 May 2012, 12:22
nhawk nhawk is offline
 
Join Date: Jan 2011
Originally Posted by Andreas View Post
Although that is a bit slower than hardcoding the HTML, this is the way it should be done as it separates the presentation from the business logic.

If the designer want's to do smth. complletely different from <ul> he can do that by simply modifying the template - with the list entries being generated in PHP he can't
Even though I'm not a big fan of anything that increases processing time, I see your point.

And a note for any other coders that might want to add menus via DB addition rather than at installation.. Be sure you run build_language() after adding the navigation and phrase info. If you don't, your phrase won't appear in the menus.

EDIT: Another note.. The information that's the original topic of this thread gets added to the install XML when you export it. So, you just need to create the navigation links and export a new XML for the mod.

Last edited by nhawk; 20 May 2012 at 13:28.
Reply With Quote
Reply

Similar Article
Article Author Type Replies Last Post
Administrative and Maintenance Tools Navigation Manager Enhancements Andreas vBulletin 4.x Add-ons 337 03 Jan 2018 16:58



Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Article Options

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


New To Site? Need Help?

All times are GMT. The time now is 16:36.

Layout Options | Width: Wide Color: