PDA

View Full Version : Activeusers in Navbar template question


Boofo
12-08-2010, 04:55 PM
Is there a way to check for activers users in another template, like the navbar, without running a query for it there? Like they do in the forumdisplay.

Boofo
12-10-2010, 04:02 AM
Anyone have any idea on this?

Lynne
12-10-2010, 04:37 AM
There is a query for it in the forumdisplay page. Look at line 332.

Boofo
12-10-2010, 04:54 AM
Actually, I saw that query but didn't see anything about activeusers around it until it did the activeusers template render.

So there is no way to pre-register it from somewhere else for the navbar template then?

calorie
12-10-2010, 04:59 AM
Shot in the dark, untested, and all that with vBulletin 4.1.0 Patch Level 2...

Say you want active users in the navbar template when you are on the forum.php page. Try adding a plugin to the forumhome_complete hook with this code:

vB_Template::preRegister('navbar', array('activeusers' => $activeusers));


Then use the following in the navbar template wherever you want it to appear:

<div>
<ol class="commalist">
{vb:raw activeusers}
</ol>
</div>


If it works, you can do the same type of thing as above except for the forumdisplay.php page change the hook to forumdisplay_complete and use the following instead (because $navbar is set earlier in forumdisplay.php than forum.php so create it again):

vB_Template::preRegister('navbar', array('activeusers' => $activeusers));
$navbar = render_navbar_template($navbits);


And for the the showthread.php page, the hook would be showthread_complete with the same code as with the forumdisplay.php page.

Whatever vB kicks out to $activeusers on those various pages should (unless this is all baked) be what you get in the navbar save for tweaks. :o

Boofo
12-10-2010, 07:42 AM
Shot in the dark, untested, and all that with vBulletin 4.1.0 Patch Level 2...

Say you want active users in the navbar template when you are on the forum.php page. Try adding a plugin to the forumhome_complete hook with this code:

vB_Template::preRegister('navbar', array('activeusers' => $activeusers));


Then use the following in the navbar template wherever you want it to appear:

<div>
<ol class="commalist">
{vb:raw activeusers}
</ol>
</div>


If it works, you can do the same type of thing as above except for the forumdisplay.php page change the hook to forumdisplay_complete and use the following instead (because $navbar is set earlier in forumdisplay.php than forum.php so create it again):

vB_Template::preRegister('navbar', array('activeusers' => $activeusers));
$navbar = render_navbar_template($navbits);


And for the the showthread.php page, the hook would be showthread_complete with the same code as with the forumdisplay.php page.

Whatever vB kicks out to $activeusers on those various pages should (unless this is all baked) be what you get in the navbar save for tweaks. :o

I tried pre-registering the template like you showed for the forumhome but it still isn't working like I want it to. Here is what I am trying to do. I have the following code in the parse_templates hook for the navbar, after adding the pre-register portion of it to the forumhome_complete hook. I want the link to only show if there are activeusers on the site.

if ($activeusers)
{
$template_hook['navbar_community_menu_end'] .= '<li><a href="usermap.php' . $session[sessionurl_q] . '">' . $vbphrase['usermap'] . '</a></li>';
}


It doesn't show the link on the forumhome. I really don't want to add a query for this to the parse_template hook as it will add a query to every page, won't it?

calorie
12-10-2010, 04:26 PM
The parse_templates hook is inside the process_templates function where $activeusers is not in scope. You can try globaling it like below, but if you still get nothing, then it could be that $activeusers isn't set yet, so $activeusers doesn't exist at the parse_templates hook:

global $activeusers;

if ($activeusers)
{
$template_hook['navbar_community_menu_end'] .= '<li><a href="usermap.php' .
$session[sessionurl_q] . '">' . $vbphrase['usermap'] . '</a></li>';
}


If $activeusers isn't set, how about doing something like this instead?

if ($vbulletin->userinfo['userid'])
{
$template_hook['navbar_community_menu_end'] .= '<li><a href="usermap.php' .
$session[sessionurl_q] . '">' . $vbphrase['usermap'] . '</a></li>';
}

That way you can forgo the other stuff, and you'll know that at least one person is active, the logged in member who can see the link to the user map. It might not quite be what you are after, but there will be at least one logged in person if the link appears.

Boofo
12-10-2010, 04:59 PM
Globalizing activeusers didn't work either, so it must not be set yet, like you said. I can go with the $vbulletin->userinfo['userid'] and leave it at that. Guests won't be able to view it, but that might actually be a good thing in the long run.

Thank you very much for all the help, Carrie. At least we gave it a shot. ;)