PDA

View Full Version : Variables question (should be extremely easy for vB coders with minimal experience)


TJFweb
10-31-2005, 10:35 PM
Hi,

I have the following code that gets executed in a hook at postbit_display_start, courtesy of Wetwired who has a GREAT Activity hack:


//Separate out cashcount
$WWU002cashcount=$vbulletin->userinfo[points];
if($WWU002cashcount<1){
$WWU002_cashd=array(1=>'s',2=>'s',3=>'s',4=>'s',5=>'s',6=>'s',7=>'s',8=>'s',9=>'0');
}else{//($WWU002cashcount<1)
for($i=9;$i>0;$i--){
$WWU002digit=$WWU002cashcount%10;
$WWU002cashcount=floor($WWU002cashcount/10);
if(($WWU002digit==0)&&($WWU002cashcount==0)){
$WWU002_cashd[$i]='s';
}else{//(($WWU002digit==0)&&($WWU002cashcount==0))
$WWU002_cashd[$i]=$WWU002digit;
}//endif(($WWU002digit==0)&&($WWU002cashcount==0))
}//endfor($i=9;$i>0;$i++)
}//endif($WWU002cashcount<1)

(Not really important) This later gets used in the postbit by way of:

<img src="$stylevar[imgdir_misc]/activity/posts$WWU002_cashd[1].gif" class="il" /><img src="$stylevar[imgdir_misc]/activity/posts$WWU002_cashd[2].gif" class="im" /><img src="$stylevar[imgdir_misc]/activity/posts$WWU002_cashd[3].gif" class="im" /><img src="$stylevar[imgdir_misc]/activity/posts$WWU002_cashd[4].gif" class="im" /><img src="$stylevar[imgdir_misc]/activity/posts$WWU002_cashd[5].gif" class="im" /><img src="$stylevar[imgdir_misc]/activity/posts$WWU002_cashd[6].gif" class="im" /><img src="$stylevar[imgdir_misc]/activity/posts$WWU002_cashd[7].gif" class="im" /><img src="$stylevar[imgdir_misc]/activity/posts$WWU002_cashd[8].gif" class="im" /><img src="$stylevar[imgdir_misc]/activity/posts$WWU002_cashd[9].gif" class="ir" />

*** Anyway, back to the main hook code. I'm quite confused about defining $WWU002cashcount=$vbulletin->userinfo[points];

$vbulletin->userinfo[points] is meant to give the number of (uCash) points that a user possesses. In the postbit, the point count can be called simply by using $post[points]. However, I think that a different value is necessary when retrieving this value outside of the postbit (i.e. in hooks like this one) as defining $WWU002cashcount as $vbulletin->userinfo[points] or $post[points] doesn't work.

I noticed that uCash has this hook at global_start:
// ## <ucash>
require_once(DIR . '/includes/functions_ucs_shared.php');
if ($vbulletin->options['ucash_enablesystem'] == 1)
{ // It's enabled! Yay!
$vbulletin->userinfo['points'] = ucash_number_format($vbulletin->userinfo[$vbulletin->options['ucash_pointsfield']], true);
}
$show['ucash'] = true;
// ## </ucs>

Shouldn't that define $vbulletin->userinfo['points'] globally so it can be used anywhere (i.e. in hooks as well)?

Please inform me if I haven't provided enough information as my knowledge is pretty basic in this area.

Thanks for any help in advance!

WetWired
11-01-2005, 02:47 PM
Well, the userinfo variable applys to the current logged in user, not the user with the post. Also, WWU002 is a prefix to denote variables used by the plugin uniquely identified by 'WWU002' (activity modification); no reason to keep it for your own plugin.
You should probably be using $post['points'], as this seems to be the variable for the posting user's points. Also, if uCash allows a negative ballance or if $post['points'] has a decimal point, the code will need to be modified.

For figuring out what's going on in your code, I suggest enabling debug mode (https://vborg.vbsupport.ru/showthread.php?t=82835), and using calls to devdebug() with the variable you want to see the value of, which will put it in a dropdown box that will appear at the bottom of the page.

TJFweb
11-02-2005, 04:55 AM
Awesome, I got it working using the $post[points] variable.

I just had to hook the plugin to postbit_display_complete as it must have been executing before the uCash hook was (which is also in postbit_display_complete).

I hacked the uCash global file to not insert commas and now everything displays very nicely alongside my activity stats. COOL :)

I renamed the variables and added it as its own plugin. It looks like this (I take it that I can remove the // and anything that comes after it in each line?):
//Separate out cashcount
$icon_cashcount=$post[points];
if($icon_cashcount<1){
$icon_cashd=array(1=>'s',2=>'s',3=>'s',4=>'s',5=>'s',6=>'s',7=>'s',8=>'s',9=>'0');
}else{//($icon_cashcount<1)
for($i=9;$i>0;$i--){
$icon_cashdigit=$icon_cashcount%10;
$icon_cashcount=floor($icon_cashcount/10);
if(($icon_cashdigit==0)&&($icon_cashcount==0)){
$icon_cashd[$i]='s';
}else{//(($icon_cashdigit==0)&&($icon_cashcount==0))
$icon_cashd[$i]=$icon_cashdigit;
}//endif(($icon_cashdigit==0)&&($icon_cashcount==0))
}//endfor($i=9;$i>0;$i++)
}//endif($icon_cashcount<1)

Could I ask one last favor? If it doesn't require a heap of extra work, is it possible to insert a line or two of code so that a $ sign gif (given by element 'ds') can appear just before a non zero element (in place of the first 's' element) in the array (i.e. $icon_cashd[xxx]='ds')? My digits show perfectly, but it would be nice to have a preceding dollar sign too.

Thanks a lot, WetWired. You've been a great help.

WetWired
11-02-2005, 09:17 PM
//Separate out cashcount
$icon_doonce=1;
$icon_cashcount=$post[points];
if($icon_cashcount<1){
$icon_cashd=array(1=>'s',2=>'s',3=>'s',4=>'s',5=>'s',6=>'s',7=>'s',8=>'s',9=>'0');
}else{//($icon_cashcount<1)
for($i=9;$i>0;$i--){
$icon_cashdigit=$icon_cashcount%10;
$icon_cashcount=floor($icon_cashcount/10);
if(($icon_cashdigit==0)&&($icon_cashcount==0)){
if($icon_doonce){
$icon_doonce=0;
$icon_cashd[$i]='ds';
}else{//($icon_doonce)
$icon_cashd[$i]='s';
}//endif($icon_doonce)
}else{//(($icon_cashdigit==0)&&($icon_cashcount==0))
$icon_cashd[$i]=$icon_cashdigit;
}//endif(($icon_cashdigit==0)&&($icon_cashcount==0))
}//endfor($i=9;$i>0;$i++)
}//endif($icon_cashcount<1)
And yes, the // starts a comment, so vB doesn't care about the stuff after it.

TJFweb
11-02-2005, 11:38 PM
Thanks so much! It worked like a charm.

Activity Modification 2.5.0 for hack of the month ;)

Here's what my postbit looks like now... Much less vertical space usage due to the Activity Mod layout.