PDA

View Full Version : Help with setting variables


ctcdesign
03-19-2012, 10:51 PM
We just switched our forum over to vbulletin and love it but I'm having trouble understanding the way mods are put together. I'm not finding much for documentation on the new variable system in vb4 (We have suite)

I'm trying to update a very simple mod that was available for 3.6 that isn't available for 4 and I'm not getting the variables for some reason. When I install this (updated by me):


<?xml version="1.0" encoding="ISO-8859-1"?>

<product productid="posts_in_last_x_hours" active="1">
<title>Posts In Last X Hours</title>
<description>Show the number of posts created in the last X hours.</description>
<version>1.0</version>
<url></url>
<versioncheckurl></versioncheckurl>
<dependencies></dependencies>
<codes></codes>
<templates></templates>
<plugins>
<plugin active="1" executionorder="5">
<title>Get 24 hours post info</title>
<hookname>forumhome_complete</hookname>
<phpcode><![CDATA[if ($vbulletin->options['posts_last_x_hours_enabled'] == 1)
{
$timeframe = $vbulletin->options['posts_last_x_hours_numhours'];

$posts_last_x_hours = $db->query_read("SELECT COUNT(postid) from " . TABLE_PREFIX . "post WHERE " . TABLE_PREFIX . "post.dateline >= UNIX_TIMESTAMP(DATE_SUB(NOW(),INTERVAL " . $timeframe . " HOUR));");
$posts_last_x_hours = construct_phrase($vbphrase['posts_in_last_x_hours'], $posts_last_x_hours, $timeframe);

$templater->register('posts_last_x_hours', $posts_last_x_hours);

}]]></phpcode>
</plugin>
</plugins>
<phrases>
<phrasetype name="GLOBAL" fieldname="global">
<phrase name="posts_in_last_x_hours" date="0" username="" version=""><![CDATA[There have been {1} post in the last {2} hours.]]></phrase>
</phrasetype>
<phrasetype name="vBulletin Settings" fieldname="vbsettings">
<phrase name="setting_posts_last_x_hours_numhours_desc" date="0" username="" version=""><![CDATA[Specify the amount of time in hours you want to count posts.]]></phrase>
<phrase name="setting_posts_last_x_hours_numhours_title" date="0" username="" version=""><![CDATA[Number of Hours]]></phrase>
<phrase name="setting_posts_last_x_hours_enabled_desc" date="0" username="" version=""><![CDATA[Allows you to enable/disable the hack.]]></phrase>
<phrase name="setting_posts_last_x_hours_enabled_title" date="0" username="" version=""><![CDATA[Enabled?]]></phrase>
<phrase name="settinggroup_posts_last_x_hours" date="0" username="" version=""><![CDATA[Posts Last X Hours]]></phrase>
</phrasetype>
</phrases>
<options>
<settinggroup name="posts_last_x_hours" displayorder="1000">
<setting varname="posts_last_x_hours_enabled" displayorder="10">
<datatype>boolean</datatype>
<optioncode>yesno</optioncode>
<defaultvalue>1</defaultvalue>
</setting>
<setting varname="posts_last_x_hours_numhours" displayorder="20">
<datatype>number</datatype>
<defaultvalue>24</defaultvalue>
</setting>
</settinggroup>
</options>
<helptopics></helptopics>
<cronentries></cronentries>
<faqentries></faqentries>
</product>



And place this in my forumhome template:


<vb:if condition="$vboptions['posts_last_x_hours_enabled'] == 1">
{vb:rawphrase posts_in_last_x_hours}
</vb:if>



I get this:

There have been %1$s post in the last %2$s hours


If I use vb:raw rather than vb:rawphrase the line is not inserted at all...I also checked my php logs and there are no errors.

Sorry if it's obvious but I'm a noob at vbulletin :-) Any help would be appreciated, even a nudge towards some documentation I missed.

Charles

kh99
03-19-2012, 11:20 PM
I think you need to add this line (before or after the other register() call):

$templater->register('timeframe', $timeframe);


and then in the template:

<vb:if condition="$vboptions['posts_last_x_hours_enabled'] == 1">
{vb:rawphrase posts_in_last_x_hours, {vb:raw posts_last_x_hours}, {vb:raw timeframe} }
</vb:if>



BTW, there's some info in the manual that might be helpful: https://www.vbulletin.com/docs/html/ (search for "template syntax")

ctcdesign
03-20-2012, 04:22 PM
Thanks for the help kh99, now I understand how to call the phrase with variables.

I have bigger problems though. For some reason it doesn't seem to be cycling through the code at all so I'll have to play with it more. I changed the php cdata to this:


if ($vbulletin->options['posts_last_x_hours_enabled'])
{
$timeframe = '*';
$posts_last_x_hours = '*';

$posts_last_x_hours = construct_phrase($vbphrase['posts_in_last_x_hours'], $posts_last_x_hours, $timeframe);

$templater->register('posts_last_x_hours', $posts_last_x_hours);
$templater->register('timeframe', $timeframe);
}

and the output is:

There have been post(s) in the last hours.


the "*" doesn't show up in my phrase for {1} or {2}, they come up blank within the phrase.

I'll have to keep playing with it.

kh99
03-20-2012, 04:38 PM
Oh...I didn't notice that $templater isn't defined. You need to use preRegister instead, like this:


vB_Template::preRegister('FORUMHOME', array('posts_last_x_hours' => $posts_last_x_hours,
'timeframe' => $timeframe));

ctcdesign
03-20-2012, 07:03 PM
That worked great :) Thank you so much!