PDA

View Full Version : Access $post variables in external php


CampinCarl
02-26-2011, 04:01 PM
okay. I'm writing a tiny widget for the post_legacy template that uses a players $post['field5'] (or their steam id for steam) information to make a html widget with they're associated stats. The only problem im running into is that i cant access the $post['field5'] from the php script that gets included in the template with a plugin.

Any help would be great.

Lynne
02-26-2011, 04:03 PM
You need to post your exact code that your are using in order for us to help you. Please post your plugin code and let us know the hook location you are using and post any template code you have added also and let us know what template. Please post all code in code/php/html tags.

CampinCarl
02-26-2011, 04:20 PM
Okay should of done that lol.

This is the PHP (stat_widget.php):
<head>
<style>
#BigBox {
color: #fff;
padding: 4px 4px;
text-decoration: none;
-moz-border-radius: 7px;
-webkit-border-radius: 7px;
-moz-box-shadow: 0 1px 3px rgba(0,0,0,0.5);
-webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.5);
}
</style>
</head>

<?php
//SteamID
$steamid=$post['field5'];

//GET GAMEME INFORMATION
define("CLIENT_API_URL", "http://protf2.gameme.com/api");

//GRAB STATS
$tfpxml = new SimpleXMLElement(file_get_contents(CLIENT_API_URL."/playerinfo/tf/".$steamid));
if (count($tfpxml->playerinfo[0]->player) > 0) {
$tfplayerdata = array();
$tfplayerdata['name'] = $tfpxml->playerinfo[0]->player[0]->name;
$tfplayerdata['cc'] = $tfpxml->playerinfo[0]->player[0]->cc;
$tfplayerdata['clanname'] = $tfpxml->playerinfo[0]->player[0]->clanname;
$tfplayerdata['id'] = $tfpxml->playerinfo[0]->player[0]->id;
$tfplayerdata['time'] = $tfpxml->playerinfo[0]->player[0]->time;
$tfplayerdata['rank'] = $tfpxml->playerinfo[0]->player[0]->rank;
$tfplayerdata['skill'] = $tfpxml->playerinfo[0]->player[0]->skill;
$tfplayerdata['kills'] = $tfpxml->playerinfo[0]->player[0]->kills;
$tfplayerdata['deaths'] = $tfpxml->playerinfo[0]->player[0]->deaths;
$tfdays= intval($playerdata['time']/60/60/24);
$tfhours= intval(($playerdata['time']/60/60)-($days*24));
$tfminutes= intval(($playerdata['time']/60)-($hours*60)-($days*24*60));
$tfseconds= intval(($playerdata['time'])-($hours*60*60)-($days*24*60*60)-($minutes*60));
}

//ECHO THE INFO
IF ($tfplayerdata['id']<>'') {
echo '<table style="float:right; valign:middle; width:170px;">';
echo '<tr></tr>';
echo '<tr><td valign="middle" rowspan="2">';
echo '<table style="z-index:2; padding:0px; width:50px; position:relative; left:+0px; background: black url(http://zurb.com/images/alert-overlay.png) repeat-x; " id="BigBox">';
echo '<tr><td valign="middle" align="center" style="padding: 3px 0px 3px 0px;"><a href="http://protf2.gameme.com/playerinfo/'.$tfplayerdata['id'].'"><img name="TF2 Stats" src="http://forum.specialattack.net/images/icons/tf2.png"/></a></td></tr>';
echo '</table>';
echo '</td></tr>';
echo '<tr><td valign="middle">';
echo '<table height="41" style="position:relative; left:-40px; background: gray url(http://zurb.com/images/alert-overlay.png) repeat-x;" id="BigBox">';
echo '<tr><td style="text-shadow:1px 1px 1px rgba(0,0,0,0.75);padding: 0px 10px 0px 25px;"><b>Rank: </b>'.$tfplayerdata['rank'].'<br><b>Points: </b>'.$tfplayerdata['skill'].'</td></tr>';
echo '</table>';
echo '</td></tr>';
echo '</table>';
}
?>

This is a snip from the template where I modded it (postbit_legacy)
{vb:raw template_hook.postbit_messagearea_start}
<vb:if condition="$post['title'] OR $show['messageicon']">
<vb:if condition="$post['field5']">{vb:raw statswidget}</vb:if>
<h2 class="title icon">
<vb:if condition="$show['messageicon']"><img src="{vb:raw post.iconpath}" alt="{vb:raw post.icontitle}" /> </vb:if>{vb:raw post.title}
</h2>
</vb:if>

And then this is the plugin: (hook location: global_start)
ob_start();
require_once('/home/protf2/public_html/stat_widget.php');
$statswidget = ob_get_contents();
ob_end_clean();
vB_Template::preRegister('postbit_legacy',array('s tatswidget' => $statswidget));



I used this to create the plugin http://www.vbulletin.com/forum/showthread.php/173937-How-to-Include-a-PHP-or-HTML-File

Lynne
02-26-2011, 05:02 PM
You cannot have a <head> tag in the code. You are only allowed one <head> tag per page and you are going to cause a problem if you have another.

And, global_start is deprecated - you should not use it. But, besides that, it is at the very beginning of the code when $post is not even defined. If you want to use a $post variable, you need to use a hook that can get this information like a postbit_display_* hook location.

CampinCarl
02-26-2011, 06:15 PM
All of that stuff works. And the head tag because the box gets formatted correctly. its just that the data is blank.

I set the hook to postbit_display_complete and it didnt work neither.

Lynne
02-26-2011, 06:21 PM
And the data will remain blank because you cannot access the $post variable at global_start - it doesn't exist there. $post is the information about the user making the post, so you will have several different $post['field5'] on the page - a different one for each $post. global_start (which is deprecated and will disappear in the future and break any products using it) is called once on the page at the beginning. It does not have any $post data available to it.

CampinCarl
02-26-2011, 06:33 PM
Okay i lied. It works after i set the correct hook location. But the widget only shows up on the first post of each thread.

Lynne
02-26-2011, 07:47 PM
What hook location did you change to?

CampinCarl
02-26-2011, 07:59 PM
I set it as postbit_display_complete

Lynne
02-26-2011, 08:43 PM
Can we get a link to see this?

CampinCarl
02-26-2011, 09:53 PM
<a href="http://70.32.39.153/~protf2/showthread.php?t=2" target="_blank">http://70.32.39.153/~protf2/showthread.php?t=2</a>

Lynne
02-26-2011, 10:43 PM
First off, you have really invalid html on your page. You cannot have another <head> tag in there. Big NO NO. You WILL cause issues by doing that. You also can only use an id once on a page. If you have already used the id "BigBox", then you cannot use it again on that page or you WILL cause issues. (BigBox1, BigBox2, BigBox3, fine.... but they can't all be id BigBox.) You also cannot have <tr></tr>. That is invalid. Any <tr> tag must have at least one <td> tag in it - why do you have that in there? Try fixing those things first.

And what is that other item in the same place you want this to go? Are you sure it isn't interferring with this working?

CampinCarl
02-26-2011, 10:50 PM
The PHP file just says echo 't'; and it still only puts t on the first post

Lynne
02-27-2011, 05:01 PM
change your require_once to include in your plugin.

(Add your CSS to either additional.css template or to one that only gets called on that page. Or to the SHOWTHREAD template itself.)