Dynamic Tab Content for Postbit_Legacy

Emiyashirou

New Member
ver felt your postbit_legacy template was just too long? Or maybe you'd like to add more content to your postbit_legacy, but you don't like the cluttered look or extended length of the post, especially when most posts are only a handful of sentences? Almost every decent modification here on vB.org has the option to add a link or a display to your postbit templates, and you've likely struggled, as I have, to come up with just the info you want to display, likely excluding things you thought would look real nice, but just couldn't justify the room for.

Now I've seen several good modifications that address this problem, and all of them are pretty nice. I've seen everything from a drop-down menu that displays the content, to a box that can be opened and closed just underneath the avatar. All of them are practical in their own way, and here's one more way that I worked out using a script from Dynamic Drive's website called Tab Content Script. This cleaned up my postbit_legacy just the way I wanted, and let me add even more content then I would have originally intended. It also allowed me to organize content in whatever manner I wished. I love it and I think you will too.


Screenshots
Attachment 83353 Attachment 83352


Live Demo
Click any of the grey dots beneath the user's avatars.


Difficulty: Intermediate
A few things you should know before moving forward. The instructions for this mod are not your standard template modification instructions. It's going to presume that you've edited your postbit_legacy before and that your somewhat familiar with its content, with HTML and how to wrap <if condition=""> conditionals. So it's not going to be a "look for this line of code, add this under it" kind of traditional tutorial. What I'm going to do is show you the basic code, how to implement it and then let you do with it what you want. That is, after all, the reason I came up with mod in first place, and I know everyone wont have the same postbit content and/or will want to set theirs up differently.

With that said, knowledge of how to modify your templates and basic HTML coding is something every vBulletin administrator should have. I'm not a coder. I'm a complete hack. But I know enough to take some of the wealth of code snippets available on the web and attempt to use them in new and inventive ways. Administrating a vB forum is that much more satisfying as a result.


Installation
To add this to your forum requires you to upload some files and one edit to your postbit_legacy template. If you don't know what that template does, it's the template that controls the look of your posts when you've chosen to have avatars and information appear to the left hand side of your posts. If you don't use that look for your forum, but instead use the one where avatars appear above your posts, then that means you use the postbit template, and this modification wasn't designed to look right on that template.

Step 1.
First things first. After downloading the Attachment 83351 file, extract the contents and upload the postbit_tabs folder your forum's root directory.

Step 2.
Right click and download this javascript file from the Dynamic Drive website: tabcontent.js (You can also download it from this page.) Upload it to the postbit_tabs folder you just added to your website.

Step 3.
Now to access your postbit_legacy template, go to Admin CP >>> Styles & Templates >>> Style Manager >>> "Expand one of your styles" >>> Postbit Templates >>> postbit_legacy.

From here, your going to add a basic set of code from which you can then customize it. You can pretty much add it anywhere in the template, but most likely your going to want to add it just below the avatar. If that's the case, your avatar code is most likely going to look something like this:
PHP:
<if condition="$show['avatar']">
    <div class="smallfont">
     &nbsp;<br /><a href="member.php?$session[sessionurl]u=$post[userid]"><img src="$post[avatarurl]" $post[avwidth] $post[avheight] alt="<phrase 1="$post[username]">$vbphrase[xs_avatar]</phrase>" border="0" /></a>
    </div>
   </if>

Below that add this basic set of code. Remember to keep the copyright information intact for legal use:

PHP:
<!-- BEGIN AJAX CONTENT -->
<head>
<link rel="stylesheet" type="text/css" href="postbit_tabs/tabcontent.css" />
<script type="text/javascript" src="postbit_tabs/tabcontent.js">
/***********************************************
* Tab Content script v2.2- © Dynamic Drive DHTML code library (www.dynamicdrive.com)
* This notice MUST stay intact for legal use
* Visit Dynamic Drive at http://www.dynamicdrive.com/ for full source code
***********************************************/
</script>
</head>
 
<div id="$post[postid]postbittabs" class="djdot">
<ul>
<li><span title="View Tab 1"><a href="#" rel="$post[postid]tab1" id="selected">&nbsp;</a></span></li>
<li><span title="View Tab 2"><a href="#" rel="$post[postid]tab2">&nbsp;</a></span></li>
<li><span title="View Tab 3"><a href="#" rel="$post[postid]tab3">&nbsp;</a></span></li>
<li><span title="View Tab 4"><a href="#" rel="$post[postid]tab4">&nbsp;</a></span></li>
<li><span title="View Tab 5"><a href="#" rel="$post[postid]tab5">&nbsp;</a></span></li>
</ul>
<br style="clear: left" />
</div>
 
 
 
<div class="smallfont">
 
<!--TAB 1 CONTENT -->
<div id="$post[postid]tab1" class="tabcontent">
<div class="info">Tab 1 Content:Block A</div>
<div class="info">Tab 1 Content:Block B</div>
<div class="info">Tab 1 Content:Block C</div>
</div>
 
<!-- TAB 2 CONTENT -->
<div id="$post[postid]tab2" class="tabcontent">
<div class="info">Tab 2 Content:Block A</div>
<div class="info">Tab 2 Content:Block B</div>
<div class="info">Tab 2 Content:Block C</div>
<div class="info">Tab 2 Content:Block D</div>
</div>
 
<!-- TAB 3 CONTENT -->
<div id="$post[postid]tab3" class="tabcontent">
<div class="info">Tab 3 Content:Block A</div>
<div class="info">Tab 3 Content:Block B</div>
<div class="info">Tab 3 Content:Block C</div>
<div class="info">Tab 3 Content:Block D</div>
<div class="info">Tab 3 Content:Block E</div>
<div class="info">Tab 3 Content:Block F</div>
</div>
 
<!-- TAB 4 CONTENT -->
<div id="$post[postid]tab4" class="tabcontent">
<div class="info">Tab 4 Content:Block A</div>
<div class="info">Tab 4 Content:Block B</div>
<div class="info">Tab 4 Content:Block C</div>
</div>
 
<!-- TAB 5 CONTENT -->
<div id="$post[postid]tab5" class="tabcontent">
<div class="info">Tab 5 Content:Block A</div>
<div class="info">Tab 5 Content:Block B</div>
<div class="info">Tab 5 Content:Block C</div>
<div class="info">Tab 5 Content:Block D</div>
<div class="info">Tab 5 Content:Block E</div>
<div class="info">Tab 5 Content:Block F</div>
<div class="info">Tab 5 Content:Block G</div>
<div class="info">Tab 5 Content:Block H</div>
<div class="info">Tab 5 Content:Block I</div>
</div>
 
</div>
 
<script type="text/javascript">
var mytabs=new ddtabcontent("$post[postid]postbittabs")
mytabs.setpersist(true)
mytabs.setselectedClassTarget("link")
mytabs.init()
</script>
<!-- END AJAX CONTENT -->

Now go to your forum and see if your tabs are displaying properly and your not getting any errors. You should have five dot tabs that display five different sets of information when clicked.

Final Steps.
Now comes the hard part. Now you have to decide what you want to put in those places called Tab 1 Content:Block A, etc. This is where knowledge of your postbit_legacy template comes into play. Your now going to move whatever content you want in the respective tabs from their current location into the tabs. This is entirely up to you, but you can use my forum as an example. In the next post, I'll put an example of what some of the things you can put there and what the blocks of code look like. But for the most part, this entirely customizable

There are a few things in the code above you should not edit, but I'll cover those in the next post. I'll also explain how to remove tabs, add more and how to make sure they work the way they should. Don't like the color of the dot tabs? Too bad....NO WAIT! Don't go! I'm just kidding. I'll explain how to change the colors for the dots and what that Photoshop file in the ZIP file is for.


Known Bugs
There is one minor issue with the tabs that I've noticed only occurs when using the AJAX quick reply and inline editing. Actually it's two issues, but I've only seen one or the other on my live site vs. my demo board. In one instance, the entire content of all your tabs displays all at once when posting/editing using AJAX. This is not a huge deal, as the only person who sees it do that is the person doing the posting/editing. And it will return to normal anytime he reloads or refreshes the page. The other instance is when after posting/editing through AJAX, no tab content appears, except the dot tabs. This is also not a huge deal as the same thing will happen here; only the poster sees it and it will look normal anytime he returns or reloads the page. I think it's a minor trade off for the sleek look it gives your forum the rest of the time.
 
Basic Breakdown
Here's a basic explanation as to how the code works. This should help you to create new tabs and to know what not to remove if you want one to work properly.

Take a look at this line in the Step 3 code:
PHP:
<li><span title="View Tab 1"><a href="#" rel="$post[postid]tab1" id="selected">&nbsp;</a></span></li>

span></li>
This line of code and the ones like it are your dot tabs. The rel="" portion of the <a> tag is how you determine what it will show when clicked. The rel="" will have the exact same name as the id="" of the DIV it controls. What's the DIV it controls? I'm glad I asked. Scroll down a bit and take a look at this code:

PHP:
<!--TAB 1 CONTENT -->
<div id="$post[postid]tab1" class="tabcontent">
<div class="info">Tab 1 Content:Block A</div>
<div class="info">Tab 1 Content:Block B</div>
<div class="info">Tab 1 Content:Block C</div>
</div>

Notice very first DIV tag (the main container for this tab) has the ID of $post[postid]tab1. This is the exactly the same as the REL of the dot tab above. This is how the script knows what to show. If you want to add additional tabs like these, then this will be the only portion that will need to be different. The REL and the ID MUST have the $post[postid]portion to work properly. The tab# portion can be anything, but it must be unique to that tab.

In addition, the SPAN TITLE can be changed to whatever you want the tooltip to show when you mouseover the dot tabs.

More Options
PHP:
mytabs.setpersist(true)

This line of code sets the persistence of a clicked tab each time a user returns to that page during the same browser session. Set to true, and the last clicked tab will always display that tab on reload. Set to false, and it will show the tab with the ID selected each time. Note that each tab is unique, and having this set to true won't make much of a difference to your users view of the forum. The only tab that will ever persist is the one he/she clicked on, on a specific post in a specific thread, and only there. And only during the same browser session.

PHP:
mytabs.init()

But a number inside the parenthesis to determine how many seconds you want to pass between each time the tabs automatically toggle themselves. I have not tried this option yet, and I can imagine that it would be very annoying. But I figured, why not let you try it.
 
Default Postbit Legacy Code Bits
Here's a few of the things that come standard in vBulletin that you might want to move to the various DIV containers.

Online Status:
Code:
<div class="info">$post[onlinestatus] </div>

Posts:
Code:
<div class="info">$vbphrase[posts]: $post[posts]</div>

Age:
Code:
 <if condition="$post['age']"><div class="info">$vbphrase[age]: $post[age]</div></if>

Join Date :
Code:
 <if condition="$post['joindate']"><div class="info">$vbphrase[join_date]: $post[joindate]</div></if>

Biography :
Code:
 <if condition="$post[field1]"><div class="info"><b>Biography:</b> $post[field1]</div></if>

Interests :
Code:
 <if condition="$post[field3]"><div class="info"><b>Interests:</b> $post[field3]</div></if>

Occupation:
Code:
 <if condition="$post[field4]"><div class="info"><b>Occupation:</b> $post[field4]</div></if>

Infractions:
Code:
<if condition="$show['infraction']"><div class="info">$vbphrase[infractions]: $post[warnings]/$post[infractions] ($post[ipoints])</div></if>

Reputation :
Code:
<if condition="$show['infraction']"><div class="info">$vbphrase[infractions]: $post[warnings]/$post[infractions] ($post[ipoints])</div></if>
               <if condition="$show['reputation']"><div class="info"><span id="repdisplay_$post[postid]_$post[userid]">$post[reputationdisplay]</span></div></if>
               <if condition="$show['reppower']"><div class="info">$vbphrase[reppower]: <span id="reppower_$post[postid]_$post[userid]">$post[reppower]</span></div></if>

Instant Messengers :
Code:
<if condition="$post[icqicon] or $post[aimicon] or $post[msnicon] or $post[yahooicon] or $post[skypeicon]"><div class="info">$post[icqicon] $post[aimicon] $post[msnicon] $post[yahooicon] $post[skypeicon]</div></if>

Common Hack Postbit_Legacy Code Bits
Here's a few code bits that you'll find in some of the more common vBulletin modifications that you might have installed that you'd like to move to the DIV containers.

vBCredits :
Code:
<if condition="$show['credits_post']">
     <div class="info">
      $vbphrase[credits]: <span id="cdt_$post[postid]_$post[userid]">$post[credits]</span> <if condition="$show['credits_donate']">[<a href="credits.php?$session[sessionurl]do=manage&u=$post[userid]#donate">$vbphrase[donate]</a>]</if> <if condition="$show['credits_check']">[<a href="credits.php?$session[sessionurl]do=banking&u=$post[userid]">$vbphrase[check]</a>]</if>
     </div>
    </if>

Countries/Region Flags (Replace 8 and 9 with whatever fields your using):
Code:
 <!-- FLAGS START -->
   <if condition="$post['field8'] OR $post['field9']">
      <div class="info">
      <if condition="$post[field8]">
         <img src="images/flags/$post[field8].gif" alt="$post[field8]" /></if>
 
      <if condition="$post[field9]">
         <img src="images/region/$post[field9].gif" alt="$post[field9]" /></if>
      </div>
   </if>
   <!-- / FLAG END -->

Ipb Arcade :
Code:
<div class="info">
        <if condition="$crowns">
 $post[crowns]$post[champtext]
   <else />
   $post[username] has not championed any arcade games.   </if>
      </div>
 
Back
Top