Hey all,
let me start by thanking all you guys for the great cms system you made, and offcourse all the snippets you guys provide!
But i have ran into a small problem (hope it’s small).
I’m currently working on a clansite for battlefield 2 and wanted to put some memberinfo screen on it.
Here’s the site:
http://www.cwgdesigns.com/teamwoot/
I’ve got the script running outside modx like so:
http://www.cwgdesigns.com/teamwoot/bf2.php
My problem is however when i make a snippet of the php file it runs into an error :
’Error: array_push() [function.array-push]: First argument should be an array ’
Here’s the original php code it runs on:
<?php
$clanid="15947";
function startTag($parser, $name, $attrs) {
global $stack;
$tag=array("name"=>$name,"attrs"=>$attrs);
array_push($stack,$tag);
}
function cdata($parser, $cdata) {
global $stack;
$stack[count($stack)-1][’cdata’] .= $cdata;
}
function endTag($parser, $name) {
global $stack;
$stack[count($stack)-2][’children’][] = $stack[count($stack)-1];
array_pop($stack);
}
// Parse XML
$stack = array();
$claninfo = array();
$clanstats = array();
$playerstats = array();
$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startTag", "endTag");
xml_set_character_data_handler($xml_parser, "cdata");
$xmllink="http://bf2tracker.com/livefeed/xml_clanprofile.php?clanid=$clanid";
$data = xml_parse($xml_parser,file_get_contents($xmllink));
if(!$data) die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser)));
xml_parser_free($xml_parser);
// Get Data
// Get Clan Profile Data
for($i = 0; $i < sizeof($stack[0][children][0][children]); $i++) {
$valname=$stack[0][children][0][children][$i][name];
$claninfo[$valname]=$stack[0][children][0][children][$i][cdata];
}
// Get Clan Stats Data
for($i = 0; $i < sizeof($stack[0][children][1][children]); $i++) {
$valname=$stack[0][children][1][children][$i][name];
$clanstats[$valname]=$stack[0][children][1][children][$i][cdata];
}
// Get Player Data
for($i = 0; $i < sizeof($stack[0][children][2][children]); $i++) {
for($x = 0; $x < sizeof($stack[0][children][2][children][$i][children]); $x++) {
$valname=$stack[0][children][2][children][$i][children][$x][name];
$value=$stack[0][children][2][children][$i][children][$x][cdata];
if($valname=="PLAYERID") $pid=$value;
$playerstats[$pid][$valname]=$value;
}
}
// Now we have 3 arrays with all stats and infos
// print_r($claninfo);
//print_r($clanstats);
// print_r($playerstats);
// Prepare table for info/stats
echo "<table align=\"center\" cellpadding=\"2\" cellspacing=\"0\">\n
<tr><th colspan=\"12\">Clan info/statistics</td></tr>\n
<tr><th>ID</td>\n
<th>Name</td>\n
<th>Tag</td>\n
<th>CO</td>\n
<th>Score</td>\n
<th>TM</td>\n
<th>WM</td>\n
<th>LM</td>\n
<th>Kills</td>\n
<th>KillAs.</td>\n
<th>Deaths</td>\n
<th>Ratio</td>\n
</tr>\n";
//get clan info
foreach($claninfo as $key => $value) {
$clanname=$claninfo[CLANNAME];
$clanid=$claninfo[CLANID];
$clanurl=$claninfo[CLANSTATSURL];
$clantag=$claninfo[CLANTAG];
$clanCO=$claninfo[CLANCOUNTRY];
}
// get Clan Stats
foreach($clanstats as $key => $value) {
$clanK=$clanstats[KILLS];
$clanKA=$clanstats[KILLASS];
$clanD=$clanstats[DEATHS];
$clanGS=$clanstats[SCORE];
$clanRATIO=$clanstats[KDRATIO];
$clanMA=$clanstats[MATCHES];
$clanWI=$clanstats[WINS];
$clanLO=$clanstats[LOSS];
}
//show in table
echo "<tr class=\"gen\">\n
<td align=\"center\" class=\"row1\">$clanid</a></td>\n
<td class=\"row1\"><a target=\"_blank\" href=\"$clanurl\">$clanname</a></td>\n
<td class=\"row1\">$clantag</td>\n
<td class=\"row1\">$clanCO</td>\n
<td align=\"right\" class=\"row1\">$clanGS</td>\n
<td align=\"right\" class=\"row1\">$clanMA</td>\n
<td align=\"right\" class=\"row1\">$clanWI</td>\n
<td align=\"right\" class=\"row1\">$clanLO</td>\n
<td align=\"right\" class=\"row1\">$clanK</td>\n
<td align=\"right\" class=\"row1\">$clanKA</td>\n
<td align=\"right\" class=\"row1\">$clanD</td>\n
<td align=\"right\" class=\"row1\">$clanRATIO</td>\n
</tr>\n
</table>";
// Prepare Player Stats table
echo "<table align=\"center\" cellpadding=\"2\" cellspacing=\"0\">\n
<tr><th colspan=\"12\">Player Stats</td></tr>\n
<tr>\n";
// remove/add pictures depending how many members you have in your clan.
// Also change the rowspan to suit. remove the first cell if you dont want the pics at all
echo " <td width=\"150\" align=\"left\" rowspan=\"25\" valign=\"top\" class=\"row2\">\n
<img border=\"0\" src=\"bf2/images/engineer.jpg\" width=\"150\" height=\"224\">\n
<img border=\"0\" src=\"bf2/images/sniper.jpg\" width=\"150\" height=\"224\">\n
</td>\n
<th>Rank</td>\n
<th>Status</td>\n
<th>Name</td>\n
<th>CO</td>\n
<th>GS</td>\n
<th>TM</td>\n
<th>WM</td>\n
<th>LM</td>\n
<th>TT</td>\n
<th>SM</td>\n
<th>SH</td>\n
</tr>\n";
$row="row2";
//sorting by global score
function sort_by_gscore($a, $b) {return strnatcmp($b["PLAYERGLOBALSCORE"],$a["PLAYERGLOBALSCORE"]);}
usort($playerstats,sort_by_gscore);
// get player stats
foreach($playerstats as $key => $value) {
$playername=$playerstats[$key][PLAYERNAME];
$playerurl=$playerstats[$key][PLAYERSTATSURL];
$playerid=$playerstats[$key][PLAYERID];
$playerGS=$playerstats[$key][PLAYERGLOBALSCORE];
$playerCO=$playerstats[$key][PLAYERCOUNTRY];
$playerMA=$playerstats[$key][PLAYERMATCHES];
$playerWI=$playerstats[$key][PLAYERWINS];
$playerLO=$playerstats[$key][PLAYERLOSS];
$playerTI=$playerstats[$key][PLAYERTIME];
// average score/match
if ($playerGS>0) $avescore=round($playerGS/$playerMA, 1);
else $avescore="N/A";
// playing time in hrs
if ($playerstats[$key][PLAYERTIME]> 0) $playerTI=round(($playerstats[$key][PLAYERTIME])/3600, 1);
else $playerTI=0.0;
// average score/hr
if (($playerGS>0) and ($playerTI>0)) $hrscore=round($playerGS/$playerTI, 1);
else $hrscore="N/A";
if($playerstats[$key][PLAYERRANK]!="") $playerrank=$playerstats[$key][PLAYERRANK];
else $playerrank=0;
if($playerstats[$key][PLAYERCOUNTRY]!="-") $playerCO=$playerstats[$key][PLAYERCOUNTRY];
else $playerCO="unknown";
if($playerstats[$key][PLAYERSTATUS]=="1") $statuspic="ponline.gif";
else $statuspic="poffline.gif";
//change the row color
if ($row=="row2") $row="row1"; else $row="row2";
// print player stats
echo "<tr class=\"gen\">\n
<td align=\"center\" class=$row><img border=\"0\" src=\"bf2/images/ranksmall_$playerrank.gif\" width=\"16\" height=\"16\"></td>\n
<td class=$row><img border=\"0\" src=\"bf2/images/$statuspic\" width=\"42\" height=\"16\"></td>\n
<td class=$row><a target=\"_blank\" href=\"$playerurl\">$playername</a></td>\n
<td class=$row><img border=\"0\" src=\"bf2/images/flags/$playerCO.gif\" width=\"18\" height=\"12\"></td>\n
<td align=\"right\" class=$row>$playerGS</td>\n
<td align=\"right\" class=$row>$playerMA</td>\n
<td align=\"right\" class=$row>$playerWI</td>\n
<td align=\"right\" class=$row>$playerLO</td>\n
<td align=\"right\" class=$row>$playerTI</td>\n
<td align=\"right\" class=$row>$avescore</td>\n
<td align=\"right\" class=$row>$hrscore</td>\n
</tr>\n";
}
echo "<tr class=\"gensmall\"><td class=\"row1\" colspan=\"12\" align=\"center\"></td></tr>\n
<tr class=\"gensmall\"><td class=\"row2\" colspan=\"12\" align=\"center\"></td></tr>\n
</table>\n";
?>
Since i’m a total noob at php scripting i was wandering if you guys know a solution for this problem.
Greetz,
WiGeTS