vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vB4 General Discussions (https://vborg.vbsupport.ru/forumdisplay.php?f=251)
-   -   Template Variable Issue (https://vborg.vbsupport.ru/showthread.php?t=315830)

KGodel 12-04-2014 07:41 PM

Template Variable Issue
 
Hey guys. Before proceeding, I have read https://vborg.vbsupport.ru/showthread.php?t=228078 and am still not sure what's up with my code.

First, I have this function which is based on a user profile field single select menu.

PHP Code:

function get_ccode ($countryname) {
    
    
$json file_get_contents('http://country.io/names.json');

    
$countries json_decode($jsontrue);

    while (
$cname current($countries)) {
        if (
$cname == $countryname) {
            return 
key($countries);
        }
        
next($countries);
    }


This and other functions are located in a folder on the server. I have added a plugin at the hook "global_bootstrap_init_start" with this code:

PHP Code:

require(DIR '/custom/functions.php'); 

I am now trying to create a code to output a template variable in postbit_legacy. This is the code I have for my plugin which is at the hook "process_templates_complete".

PHP Code:

$country $user['field58'];
$ccode get_ccode($country);
    if (
$ccode != null) {
        
$imgoutput "<img src='images/flags/$ccode.png' />&nbsp;&nbsp;";
    }

$templater vB_Template::create('countrytemplate');
    
$templater->register('cimg'$imgoutput);
$templatevalues['ccimg'] = $templater->render();
vB_Template::preRegister('postbit_legacy'$templatevalues); 

Then I attempt t use {vb:raw ccimg} in the postbit_legacy template and nothing appears. Where am I going wrong? Thanks in advance.

kh99 12-04-2014 07:48 PM

I think the first thing I'd do is to make sure that $imgoutput is set to something even if get_ccode returns null, just for testing. Maybe something like:
Code:

    if ($ccode != null) {
        $imgoutput = "<img src='images/flags/$ccode.png' />&nbsp;&nbsp;";
    }
    else {
        $imgoutput = "get_ccode('$country') returned null";
    }


If it's still blank then at least you know that it's something to do with the templates.

KGodel 12-04-2014 07:51 PM

I tried your suggestion kh99, still nothing displaying even with the null alert.

Lynne 12-04-2014 08:07 PM

What is the content of the template countrytemplate? And have you turned on the option to view templates in the source code and verified it isn't being called?

Dave 12-04-2014 08:08 PM

PHP Code:

$templater->register('cimg'$imgoutput); 

But you say you use {vb:raw ccimg}? Notice the extra c.

Edit: nvm you used
PHP Code:

$templatevalues['ccimg'] = $templater->render(); 

although I never used that before.

kh99 12-04-2014 08:08 PM

OK, maybe try
Code:

$templatevalues['ccimg'] = "ccimg";
(you can put it right after the existing line so you don't have to delete anything). And see if that shows anything.

Edit: two more good answers snuck in above mine, but I think we're all thinking along the same lines, which is to find out if your template is rendering like you expect.

KGodel 12-04-2014 08:31 PM

It did display "ccimg" after inserting the line kh99 suggested. Also, I am not sure what the content of countrytemplate is. Is it unnecessary to define a new template to add a variable?

kh99 12-04-2014 08:52 PM

Oh, yeah, if you didn't create a template named 'countrytemplate' then that's the problem. You could do this:

PHP Code:

$country $user['field58']; 
$ccode get_ccode($country); 
    if (
$ccode != null) { 
        
$imgoutput "<img src='images/flags/$ccode.png' />&nbsp;&nbsp;"
    } 

$templatevalues['ccimg'] = $imgoutput
vB_Template::preRegister('postbit_legacy'$templatevalues); 


or if you want you could create a template called countrytemplate. Maybe it could contain this:
Code:

<img src='images/flags/{vb:raw ccode}.png' />&nbsp;&nbsp;

and then the plugin would be
PHP Code:

$country $user['field58']; 
$ccode get_ccode($country); 

$templater vB_Template::create('countrytemplate'); 
    
$templater->register('cccode'$ccode); 
$templatevalues['ccimg'] = $templater->render(); 
vB_Template::preRegister('postbit_legacy'$templatevalues); 


I don't think it matters much, but some people like to keep all html in templates.

KGodel 12-04-2014 08:59 PM

Makes sense. I tried the way you suggested, and it does work. The issue is that country isn't being set. Do I need to do something else to get the field of the person who made the post?

kh99 12-04-2014 09:09 PM

Oh, yeah, I didn't even think about that. Probably what you should do is use hook location postbit_display_complete, and use $post['field58'] (the $post array has the userinfo of the post's author).

Also what you could do if you wanted, instead of preRegistering to postbit_legacy, is to set $post['ccode'], then just use {vb:raw post.ccode}. I guess that's kind of cheating but as long as nothing else is setting a ccode value then it will work.


All times are GMT. The time now is 08:07 AM.

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.01369 seconds
  • Memory Usage 1,764KB
  • 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
  • (3)bbcode_code_printable
  • (7)bbcode_php_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)pagenav
  • (1)pagenav_curpage
  • (2)pagenav_pagelink
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (10)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
  • pagenav_page
  • pagenav_complete
  • bbcode_fetch_tags
  • bbcode_create
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • printthread_post
  • printthread_complete