phumphries
08-09-2001, 10:00 PM
This is an update to the hack that I released for vB1.1.3.
I don't know how many of you remember back to the old off-line reader dial up BBS days, but there was an option on many of those beasts to randomly add a "tag line" from a text file to your signature.
In showthread.php, find both occurances of:$postbits .= getpostbit($post);and add
// begin TagLine Hack
$tagsignature = $post[signature];
$tagline = "\\[tagline]";
$tagpostid = $post[postid];
if (eregi($tagline,$tagsignature)) {
//don't want the signature cache anymore (only the first postid would be processed!)
unset($sigcache);
// create an array holding the signature components
$tags = split($tagline,$tagsignature);
// output the first segment, which will be the signature line plus the constant signature
$tagsignature = $tags[0];
// add the tag according to the mod of the postid
$tagcount = count($tags)-1;
if ($tagcount > 0) {
$tagid = ($tagpostid % $tagcount) + 1;
$tagsignature .= $tags[$tagid];
}
}
$post[signature] = $tagsignature;
// end TagLine Hack
right before it (in both places -- just in case you ever use the showpost routine).
In printthread.php, find:
if (!isset($sigcache["$post[userid]"])) {
$post[signature]=bbcodeparse($post[signature],0,$allowsmilies);
eval("\\$post[signature] = \\"".gettemplate("postbit_signature")."\\";");
$sigcache["$post[userid]"] = $post[signature];
} else {
$post[signature] = $sigcache["$post[userid]"];
}
and replace it with:
// begin TagLine Hack
$tagsignature = $post[signature];
$tagline = "\\[tagline]";
$tagpostid = $post[postid];
if (eregi($tagline,$tagsignature)) {
//don't want the signature cache anymore (only the first postid would be processed!)
unset($sigcache);
// create an array holding the signature components
$tags = split($tagline,$tagsignature);
// output the first segment, which will be the signature line plus the constant signature
$tagsignature = $tags[0];
// add the tag according to the mod of the postid
$tagcount = count($tags)-1;
if ($tagcount > 0) {
$tagid = ($tagpostid % $tagcount) + 1;
$tagsignature .= $tags[$tagid];
}
}
$post[signature] = bbcodeparse($tagsignature,0,$allowsmilies);
eval("\\$post[signature] = \\"".gettemplate("postbit_signature")."\\";");
// end TagLine Hack
This eliminates caching of the signatures at the same time as processing the tag lines. Make sure that you do not replace any part of the surrounding if statement, which puts a blank signature on posts that do not meet the requirements.
In newreply.php and newthread.php, find if ($signature) {
$post['signature'] = bbcodeparse($bbuserinfo['signature'],0,$allowsmilie);
eval("\$post[signature] = \"".gettemplate("postbit_signature")."\";");
$previewmessage.=$post['signature'];
}
and change it to if ($signature) {
$post['signature'] = bbcodeparse($bbuserinfo['signature'],0,$allowsmilie);
// begin TagLine Hack
$tagsignature = $post['signature'];
$tagline = "\\[tagline]";
if (eregi($tagline,$tagsignature)) {
// create an array holding the signature components
$tags = split($tagline,$tagsignature);
// output the first segment, which will be the signature line plus the constant signature
$tagsignature = $tags[0];
// don't show any taglines in Preview mode
}
$post['signature'] = $tagsignature;
// end TagLine Hack
eval("\$post[signature] = \"".gettemplate("postbit_signature")."\";");
$previewmessage.=$post['signature'];
}
In private.php, find if ($message[showsignature] and $allowsignatures and trim($post[signature])!="") {
$post[signature]=bbcodeparse($post[signature],0,$allowsmilies);
eval("\$post[signature] = \"".gettemplate("postbit_signature")."\";");
} else {
$post[signature] = "";
}
and change it to if ($message[showsignature] and $allowsignatures and trim($post[signature])!="") {
$post[signature]=bbcodeparse($post[signature],0,$allowsmilies);
// begin TagLine Hack
$tagsignature = $post['signature'];
$tagline = "\\[tagline]";
if (eregi($tagline,$tagsignature)) {
// create an array holding the signature components
$tags = split($tagline,$tagsignature);
// output the first segment, which will be the signature line plus the constant signature
$tagsignature = $tags[0];
// add the tag according to the mod of the postid
$tagcount = count($tags)-1;
if ($tagcount > 0) {
$tagid = ($privatemessageid % $tagcount) + 1;
$tagsignature .= $tags[$tagid];
}
}
$post['signature'] = $tagsignature;
// end TagLine Hack
eval("\$post[signature] = \"".gettemplate("postbit_signature")."\";");
} else {
$post[signature] = "";
}The newthread.php and newreply.php changes are subtly different from the showthread.php and private.php changes because those routines handle the signature a little differently. I decided not to show the tag line in the "preview" as the tag is supposed to be psuedo random and actually will change as new tags are added to the signature, any way.
So, how does it work? After installing the three modifications above, you change your signature fromMy SigtoMy Sig
[tagline]
My first tag.
[tagline]
My second tag.
[tagline]
My third tag.
It can be multiple lines, too.
[tagline]
&cWhen a post is displayed, the showthread.php routine you modified, above, checks the user's signature for the [tagline] keyword (which you can change -- see the code), and selects, based on the index number of the post, a tag line from any number that have been entered by the user. Users who do not add tag lines to their signatures are unaffected. If you have some tag lines and never change them, the effect is that your posts display different tag lines but always the same one for each individual post. If you change or add tag lines, the modulus operation shifts them all around. The other way to implement this would be to use the random number function in PHP, but the described effect is the one that I was after (not completely random).
You can quickly test it out by just applying the showthread.php modification. This is also a good way to see in the "Preview" mode what your signature variable is outputing before it gets "arrayed" by the PHP code. :)
And, you can use vB Code (http://www.vbulletin.com/forum/misc.php?action=bbcode) in your tag lines so that you can even have rotating links to important messages as per eva2000's tip (http://www.vbulletin.com/forum/showthread.php?threadid=2259) in another forum.
I don't know how many of you remember back to the old off-line reader dial up BBS days, but there was an option on many of those beasts to randomly add a "tag line" from a text file to your signature.
In showthread.php, find both occurances of:$postbits .= getpostbit($post);and add
// begin TagLine Hack
$tagsignature = $post[signature];
$tagline = "\\[tagline]";
$tagpostid = $post[postid];
if (eregi($tagline,$tagsignature)) {
//don't want the signature cache anymore (only the first postid would be processed!)
unset($sigcache);
// create an array holding the signature components
$tags = split($tagline,$tagsignature);
// output the first segment, which will be the signature line plus the constant signature
$tagsignature = $tags[0];
// add the tag according to the mod of the postid
$tagcount = count($tags)-1;
if ($tagcount > 0) {
$tagid = ($tagpostid % $tagcount) + 1;
$tagsignature .= $tags[$tagid];
}
}
$post[signature] = $tagsignature;
// end TagLine Hack
right before it (in both places -- just in case you ever use the showpost routine).
In printthread.php, find:
if (!isset($sigcache["$post[userid]"])) {
$post[signature]=bbcodeparse($post[signature],0,$allowsmilies);
eval("\\$post[signature] = \\"".gettemplate("postbit_signature")."\\";");
$sigcache["$post[userid]"] = $post[signature];
} else {
$post[signature] = $sigcache["$post[userid]"];
}
and replace it with:
// begin TagLine Hack
$tagsignature = $post[signature];
$tagline = "\\[tagline]";
$tagpostid = $post[postid];
if (eregi($tagline,$tagsignature)) {
//don't want the signature cache anymore (only the first postid would be processed!)
unset($sigcache);
// create an array holding the signature components
$tags = split($tagline,$tagsignature);
// output the first segment, which will be the signature line plus the constant signature
$tagsignature = $tags[0];
// add the tag according to the mod of the postid
$tagcount = count($tags)-1;
if ($tagcount > 0) {
$tagid = ($tagpostid % $tagcount) + 1;
$tagsignature .= $tags[$tagid];
}
}
$post[signature] = bbcodeparse($tagsignature,0,$allowsmilies);
eval("\\$post[signature] = \\"".gettemplate("postbit_signature")."\\";");
// end TagLine Hack
This eliminates caching of the signatures at the same time as processing the tag lines. Make sure that you do not replace any part of the surrounding if statement, which puts a blank signature on posts that do not meet the requirements.
In newreply.php and newthread.php, find if ($signature) {
$post['signature'] = bbcodeparse($bbuserinfo['signature'],0,$allowsmilie);
eval("\$post[signature] = \"".gettemplate("postbit_signature")."\";");
$previewmessage.=$post['signature'];
}
and change it to if ($signature) {
$post['signature'] = bbcodeparse($bbuserinfo['signature'],0,$allowsmilie);
// begin TagLine Hack
$tagsignature = $post['signature'];
$tagline = "\\[tagline]";
if (eregi($tagline,$tagsignature)) {
// create an array holding the signature components
$tags = split($tagline,$tagsignature);
// output the first segment, which will be the signature line plus the constant signature
$tagsignature = $tags[0];
// don't show any taglines in Preview mode
}
$post['signature'] = $tagsignature;
// end TagLine Hack
eval("\$post[signature] = \"".gettemplate("postbit_signature")."\";");
$previewmessage.=$post['signature'];
}
In private.php, find if ($message[showsignature] and $allowsignatures and trim($post[signature])!="") {
$post[signature]=bbcodeparse($post[signature],0,$allowsmilies);
eval("\$post[signature] = \"".gettemplate("postbit_signature")."\";");
} else {
$post[signature] = "";
}
and change it to if ($message[showsignature] and $allowsignatures and trim($post[signature])!="") {
$post[signature]=bbcodeparse($post[signature],0,$allowsmilies);
// begin TagLine Hack
$tagsignature = $post['signature'];
$tagline = "\\[tagline]";
if (eregi($tagline,$tagsignature)) {
// create an array holding the signature components
$tags = split($tagline,$tagsignature);
// output the first segment, which will be the signature line plus the constant signature
$tagsignature = $tags[0];
// add the tag according to the mod of the postid
$tagcount = count($tags)-1;
if ($tagcount > 0) {
$tagid = ($privatemessageid % $tagcount) + 1;
$tagsignature .= $tags[$tagid];
}
}
$post['signature'] = $tagsignature;
// end TagLine Hack
eval("\$post[signature] = \"".gettemplate("postbit_signature")."\";");
} else {
$post[signature] = "";
}The newthread.php and newreply.php changes are subtly different from the showthread.php and private.php changes because those routines handle the signature a little differently. I decided not to show the tag line in the "preview" as the tag is supposed to be psuedo random and actually will change as new tags are added to the signature, any way.
So, how does it work? After installing the three modifications above, you change your signature fromMy SigtoMy Sig
[tagline]
My first tag.
[tagline]
My second tag.
[tagline]
My third tag.
It can be multiple lines, too.
[tagline]
&cWhen a post is displayed, the showthread.php routine you modified, above, checks the user's signature for the [tagline] keyword (which you can change -- see the code), and selects, based on the index number of the post, a tag line from any number that have been entered by the user. Users who do not add tag lines to their signatures are unaffected. If you have some tag lines and never change them, the effect is that your posts display different tag lines but always the same one for each individual post. If you change or add tag lines, the modulus operation shifts them all around. The other way to implement this would be to use the random number function in PHP, but the described effect is the one that I was after (not completely random).
You can quickly test it out by just applying the showthread.php modification. This is also a good way to see in the "Preview" mode what your signature variable is outputing before it gets "arrayed" by the PHP code. :)
And, you can use vB Code (http://www.vbulletin.com/forum/misc.php?action=bbcode) in your tag lines so that you can even have rotating links to important messages as per eva2000's tip (http://www.vbulletin.com/forum/showthread.php?threadid=2259) in another forum.