Go Back   vb.org Archive > vBulletin 4 Discussion > vB4 General Discussions
  #1  
Old 12-04-2014, 07:41 PM
KGodel's Avatar
KGodel KGodel is offline
 
Join Date: May 2011
Location: Indiana
Posts: 332
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default 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.
Reply With Quote
  #2  
Old 12-04-2014, 07:48 PM
kh99 kh99 is offline
 
Join Date: Aug 2009
Location: Maine
Posts: 13,185
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

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.
Reply With Quote
  #3  
Old 12-04-2014, 07:51 PM
KGodel's Avatar
KGodel KGodel is offline
 
Join Date: May 2011
Location: Indiana
Posts: 332
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

I tried your suggestion kh99, still nothing displaying even with the null alert.
Reply With Quote
  #4  
Old 12-04-2014, 08:07 PM
Lynne's Avatar
Lynne Lynne is offline
 
Join Date: Sep 2004
Location: California/Idaho
Posts: 41,180
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

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?
Reply With Quote
Благодарность от:
KGodel
  #5  
Old 12-04-2014, 08:08 PM
Dave Dave is offline
 
Join Date: May 2010
Posts: 2,583
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

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.
Reply With Quote
  #6  
Old 12-04-2014, 08:08 PM
kh99 kh99 is offline
 
Join Date: Aug 2009
Location: Maine
Posts: 13,185
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

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.
Reply With Quote
  #7  
Old 12-04-2014, 08:31 PM
KGodel's Avatar
KGodel KGodel is offline
 
Join Date: May 2011
Location: Indiana
Posts: 332
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

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?
Reply With Quote
  #8  
Old 12-04-2014, 08:52 PM
kh99 kh99 is offline
 
Join Date: Aug 2009
Location: Maine
Posts: 13,185
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

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.
Reply With Quote
Благодарность от:
KGodel
  #9  
Old 12-04-2014, 08:59 PM
KGodel's Avatar
KGodel KGodel is offline
 
Join Date: May 2011
Location: Indiana
Posts: 332
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

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?
Reply With Quote
  #10  
Old 12-04-2014, 09:09 PM
kh99 kh99 is offline
 
Join Date: Aug 2009
Location: Maine
Posts: 13,185
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

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.
Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 04:28 AM.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.05365 seconds
  • Memory Usage 2,273KB
  • Queries Executed 13 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)ad_showthread_beforeqr
  • (1)ad_showthread_firstpost
  • (1)ad_showthread_firstpost_sig
  • (1)ad_showthread_firstpost_start
  • (3)bbcode_code
  • (7)bbcode_php
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (1)pagenav
  • (1)pagenav_curpage
  • (2)pagenav_pagelink
  • (10)post_thanks_box
  • (2)post_thanks_box_bit
  • (10)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (2)post_thanks_postbit
  • (10)post_thanks_postbit_info
  • (10)postbit
  • (10)postbit_onlinestatus
  • (10)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available:
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files:
  • ./showthread.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/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_postinfo_query
  • fetch_postinfo
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showthread_start
  • showthread_getinfo
  • forumjump
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • fetch_musername
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • post_thanks_function_fetch_thanks_bit_start
  • post_thanks_function_show_thanks_date_start
  • post_thanks_function_show_thanks_date_end
  • post_thanks_function_fetch_thanks_bit_end
  • post_thanks_function_fetch_post_thanks_template_start
  • post_thanks_function_fetch_post_thanks_template_end
  • pagenav_page
  • pagenav_complete
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete