vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vB4 Programming Discussions (https://vborg.vbsupport.ru/forumdisplay.php?f=252)
-   -   Help with setting variables (https://vborg.vbsupport.ru/showthread.php?t=280370)

ctcdesign 03-19-2012 10:51 PM

Help with setting variables
 
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):

HTML Code:

<?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:

PHP Code:

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


I get this:

Code:

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):

Code:

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

and then in the template:

Code:

<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:

Code:

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:

Code:

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:


Code:

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!


All times are GMT. The time now is 04:45 PM.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.

X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01120 seconds
  • Memory Usage 1,752KB
  • Queries Executed 10 (?)
More Information
Template Usage:
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (6)bbcode_code_printable
  • (1)bbcode_html_printable
  • (1)bbcode_php_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (5)printthreadbit
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • showthread
Included Files:
  • ./printthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/class_bbcode_alt.php
  • ./includes/class_bbcode.php
  • ./includes/functions_bigthree.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • printthread_start
  • bbcode_fetch_tags
  • bbcode_create
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • printthread_post
  • printthread_complete