Go Back   vb.org Archive > vBulletin 4 Discussion > vB4 Programming Discussions
FAQ Community Calendar Today's Posts Search

Reply
 
Thread Tools Display Modes
  #1  
Old 08-05-2011, 03:17 PM
EquinoxWorld EquinoxWorld is offline
 
Join Date: Nov 2009
Location: Naples
Posts: 354
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default Is it possible to register a php function as a variable for use in a template?

hello everyone, simple question; is it possible to register a php function as a variable (with a plugin I presume) then use it inside a template?

I have several small functions I want to be able to put on the same file and then execute them accordingly in each template or page that needs them. The other way I was doing it was just making a new file for each function (not as a function at that point of course), but it doesn't make sense to do several files when I can only do one.

I was using the following plugin sort of successfully. It would register the function fine and parse it in the template but it would display the results of the function above the header at the beginning of the page (before the vb wrapper itself) and not where I placed the vb:raw inside the template.

PHP Code:
require_once('intuitco/cotw/functions/cotw_func_print_nom.php');
  
$cotw_print_nominations cotw_sotw_print_nom(true);
vB_Template::preRegister('COTW_SOTW_NOMINATIONS',array('cotw_print_nominations' => $cotw_print_nominations)); 
Using in this case {vb:raw cotw_print_nominations} inside my template below a sub-block way below the nav-bar, I get the results at the top of the page before the vb page, header and everything else.

If anyone can please spare a couple of minutes and explain why the output of the plugin is ending up way up there and which would be the right way of doing this I would be tremendously appreciative. Thank you for your time in advanced.

Best regards.
Reply With Quote
  #2  
Old 08-05-2011, 03:29 PM
kh99 kh99 is offline
 
Join Date: Aug 2009
Location: Maine
Posts: 13,185
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

If I remember correctly your function cotw_sotw_print_nom() calls "echo($id)" at the end, when I think what you want is to use return $id;

The reason it comes out at the top is because the vbulletin code works by gathering up all the output in a big string, which is then echoed at the end of the script. So if anything you do before that causes output (like calling echo() ), then it comes out before any other output (and so is at the top of the page).
Reply With Quote
  #3  
Old 08-05-2011, 03:33 PM
EquinoxWorld EquinoxWorld is offline
 
Join Date: Nov 2009
Location: Naples
Posts: 354
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by kh99 View Post
If I remember correctly your function cotw_sotw_print_nom() calls "echo($id)" at the end, when I think what you want is to use return $id;

The reason it comes out at the top is because the vbulletin code works by gathering up all the output in a big string, which is then echoed at the end of the script. So if anything you do before that causes output (like calling echo() ), then it comes out before any other output (and so is at the top of the page).
Ahh that's why it's been printing out this function like that. This is the function:
PHP Code:
function cotw_sotw_print_nom($dummy)
{
    global 
$vbulletin;
    
    
$result $vbulletin->db->query_read("SELECT * FROM cotw_sotw_nominations");

if (
mysql_num_rows($result) > 0) { 
    
// yes 
    // print them one after another 
    
echo "<center><table style=margin-top:5px;>"
    while(
$row mysql_fetch_row($result)) { 
        echo 
"<tr>"
        echo 
"<td><center>".$row[0].".)&nbsp;Nominated&nbsp;By:&nbsp;<b style=color:#3B81B7;><a href=http://development.aniworlds.net/member.php?".$row[6]."-".$row[4].">".$row[4]."&nbsp;</a></b></center>";
        echo 
"<center>Added:&nbsp;".date("F j, Y g:i a"strtotime($row[3]))."</center>";
        echo 
"<center>Created By:&nbsp;".$row[5]."</center></td>";
        echo 
"<td><center><img class=oftw_img_nom src =".$row[1]." style=margin-bottom:10px;></center></td>";
        echo 
"</tr>"
    } 
    echo 
"</table></center>"; } 
else { 
    
// no 
    // print status message 
    
echo "No Nominations Have Been Submitted!"


Since it is all being echo'ed then it prints it out first, now I understand. Would it be as easy as replacing echo with return in this case??
Reply With Quote
  #4  
Old 08-05-2011, 03:44 PM
kh99 kh99 is offline
 
Join Date: Aug 2009
Location: Maine
Posts: 13,185
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Well, I see now why you were using the ob_start() and ob_end() orignially, because those let you capture the output to avoid having to change files like this. So, sorry if I misled you before, but it's difficult to answer one question without understanding everything you're trying to do.

So, there are two things you can do (well, at least two things): one would be to do like you were trying to do before:

PHP Code:
ob_start();
require_once(
'intuitco/cotw/functions/cotw_func_print_nom.php');
cotw_sotw_print_nom(true);
$cotw_print_nominations ob_get_contents();
  
ob_end_clean();

vB_Template::preRegister('COTW_SOTW_NOMINATIONS',array('cotw_print_nominations' => $cotw_print_nominations)); 

The problem you were having before is that you were trying to include global.php which you don't need to do because it's been done already at this point. You probably just needed the "global $vbulletin" statement.

The second way would be to change your function to collect up the output in a string instead of the multiple calls to echo, then return the string at the end. If you aren't comfortable with doing that, then you should probably just try the first option.
Reply With Quote
  #5  
Old 08-05-2011, 04:05 PM
EquinoxWorld EquinoxWorld is offline
 
Join Date: Nov 2009
Location: Naples
Posts: 354
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by kh99 View Post
Well, I see now why you were using the ob_start() and ob_end() orignially, because those let you capture the output to avoid having to change files like this. So, sorry if I misled you before, but it's difficult to answer one question without understanding everything you're trying to do.

So, there are two things you can do (well, at least two things): one would be to do like you were trying to do before:

PHP Code:
ob_start();
require_once(
'intuitco/cotw/functions/cotw_func_print_nom.php');
cotw_sotw_print_nom(true);
$cotw_print_nominations ob_get_contents();
  
ob_end_clean();

vB_Template::preRegister('COTW_SOTW_NOMINATIONS',array('cotw_print_nominations' => $cotw_print_nominations)); 

The problem you were having before is that you were trying to include global.php which you don't need to do because it's been done already at this point. You probably just needed the "global $vbulletin" statement.

The second way would be to change your function to collect up the output in a string instead of the multiple calls to echo, then return the string at the end. If you aren't comfortable with doing that, then you should probably just try the first option.
The following plugin works perfect!. I want to say thank you s much for taking time to explain this to me. Now I now so much more on how these plugins operate. No wonder I was confused because before I used to use that to capture output just didn't think to implement it. Thanks again for all your help. This is what finally worked for me to use a function within a template for anyone wondering how it's done:

PHP Code:
ob_start();
require_once(
'intuitco/cotw/functions/cotw_func_print_nom.php');
cotw_sotw_print_nom(true);
$cotw_print_nominations ob_get_contents();
  
ob_end_clean();

vB_Template::preRegister('COTW_SOTW_NOMINATIONS',array('cotw_print_nominations' => $cotw_print_nominations)); 
Reply With Quote
Reply


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 12:55 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.03943 seconds
  • Memory Usage 2,226KB
  • 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
  • (5)bbcode_php
  • (2)bbcode_quote
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (5)post_thanks_box
  • (5)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (5)post_thanks_postbit_info
  • (5)postbit
  • (5)postbit_onlinestatus
  • (5)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_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
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete