PDA

View Full Version : Image in postbit but not in PMs


mathforum
01-25-2014, 10:03 PM
Can someone explain how this part of my postbit template could output in one situation but not another?

<vb:if condition="$post['showuserranks'] OR $post['arcadeawards']">
<dt>Awards</dt> <dd>{vb:raw post.arcadeawardimg}{vb:raw awardimages}</dd>
</vb:if>

I realize that two plugins are outputting "{vb:raw post.arcadeawardimg}{vb:raw awardimages}" at some point but I can't figure out where. These plugins are written in a way that the postbit in PMs render an empty box for the template code in the above box. Maybe this is because the private message files aren't set to trigger the plugins? I am looking for advice on locating the important commands from the later stages of the program. So I'm trying to work backwards since I am certain the quoted text is connected to plugins and images...

I searched in the plugins for "$post['showuserranks']" and found it a couple of times in the mod that's for the ranks. Is this logical? I don't know what I'm looking for exactly.

--------------- Added 1390693606 at 1390693606 ---------------

I'm trying not to post too much of someone's code but here is a chunk that I think could contain an important part of rendering:
$post['showuserranks'] = false;

if ($post['num_ranks'] = $db->num_rows($alluserranks))
{
$ra_i = 0;

while ($rank = $db->fetch_array($alluserranks))
{
$ra_i++;
if ($ra_i <= $vbulletin->options['ra_display_limit'])
{
//- VB3 -// eval('$post[userranks] .= "' . fetch_template('ranks_bit') . '";');
//- BEGIN VB4 -//
$templater = vB_Template::create('ranks_bit');
$templater->register('rank', $rank);
$post[userranks] .= $templater->render();
//- END VB4 -//

This ends with rendering a template and variable and I don't see this happen much in the plugin code. Am I close to finding the source of the variables?

kh99
01-26-2014, 01:36 PM
You might want to try this "search plugin code" mod: https://vborg.vbsupport.ru/showthread.php?t=265976 and search for "awardimages" to see if it's set by a plugin.

mathforum
01-26-2014, 07:46 PM
Hi kh99,

That's exactly what I did last night found this bit:

$templater = vB_Template::create($vbulletin->options[cat_yars_postbit_style]);
$templater->register('post', $post);
$templatevalues['awardimages'] = $templater->render();
vB_Template::preRegister('postbit_legacy', $templatevalues);

That is definitely referencing the image but it's location is postbit_display_complete, which makes me think it's not actually rendering the image here, rather just referencing it to add as a variable for postbit_legacy.

If order to enable these images in PMs, I did to find the conditional statement that starts the execution and add this to it:

<vb:if condition="THIS_SCRIPT == 'private'">
....
</vb:if>

but I'm not sure yet. Setting up a dev site right now to test out changes to plugins without messing things up too much so I can't try it yet but I think I have some better understanding of why PMs don't automatically get the same things to use that posts do, despite looking the same. Plugins usually call on a condition like $post[thing] = something and if I am not mistaken, the $post[''] code won't reference PM content.

Any comments?

kh99
01-26-2014, 08:06 PM
Hmm...I guess it depends on what the cat_yars_postbit_style template expects to find in $post. Certainly if there's an 'if' on THIS_SCRIPT somewhere then you'll need to add private to the check, but it could be there's another plugin somewhere that's adding the data to $post. So I'd check that template then search the plugins for any fields that are used from $post (i.e. {vb:raw post.something})

BTW, this is kind of on the line between a programming question and help with a mod, and normally we require questions about mods to be asked in the mod thread. So I'll just say that maybe you could get more help by posting your question in the mod thread.

mathforum
01-26-2014, 08:23 PM
I can see that, but in my defense this is more so about the process of working backwards to find the right code from something that was output. I have worked with various programming languages for a while to a level where I can usually follow code pretty easily, but with vBulletin I often find myself not knowing where functions and variables come from. It's getting easier and easier, but I don't know how coders can locate these things so quickly.

I'll try to frame questions more discreetly next time. This really is useful for me and it's a long process.

kh99
01-26-2014, 08:51 PM
It's OK. Like I said, it's kind of on the line so I thought I'd mention it before someone else did.

tbworld
01-26-2014, 08:53 PM
Sounds to me like you are doing fine. :) vBulletin is a large script and does take some time to process it, at the level you are working with it now. Use a good IDE that will help you identify inheritance and dependencies in PHP.

I have been working with vBulletin since 2009 and there is still some parts of vBulletin I have not completely gone through.

Nice board. :)

squidsk
01-29-2014, 03:01 PM
Hi kh99,

That's exactly what I did last night found this bit:

$templater = vB_Template::create($vbulletin->options[cat_yars_postbit_style]);
$templater->register('post', $post);
$templatevalues['awardimages'] = $templater->render();
vB_Template::preRegister('postbit_legacy', $templatevalues);

That is definitely referencing the image but it's location is postbit_display_complete, which makes me think it's not actually rendering the image here, rather just referencing it to add as a variable for postbit_legacy.

If order to enable these images in PMs, I did to find the conditional statement that starts the execution and add this to it:

<vb:if condition="THIS_SCRIPT == 'private'">
....
</vb:if>

but I'm not sure yet. Setting up a dev site right now to test out changes to plugins without messing things up too much so I can't try it yet but I think I have some better understanding of why PMs don't automatically get the same things to use that posts do, despite looking the same. Plugins usually call on a condition like $post[thing] = something and if I am not mistaken, the $post[''] code won't reference PM content.

Any comments?
Based on the code you're posting from the YaRS mod, and comparing it to the current code from the product xml, it looks like you're either running a very customized version of it, or an outdated one. I'd recommend going back to the base install to see if that helps sort out the problem as I know the current version has the ability to displays images in the postbit(_legacy) for PMs.