unvollständige Ausgabe von Variablen

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
Dungeonwatcher
Mitglied
Beiträge: 635
Registriert: 11.07.2004 10:04
Wohnort: Berlin

unvollständige Ausgabe von Variablen

Beitrag von Dungeonwatcher »

Hi große Meister der PHP Kunst! 8)

Ich versuche seit einigen Tagen eine Live Statistik für Call of Duty an das Template System von PHPBB2 anzupassen. Das Original schaut so und mein bisheriges Ergebnis so aus. Im Original wird der kplt. HTML Teil in der PHP Datei erstellt. Ich habe dies getrennt in die call_of_duty_stat.php die alles startet, ein Template call_of_duty_stat.tpl und eine Sprachdatei lang_call_of_duty_stat.php.

Aktuell hänge ich an 2 Problemen fest. Zum einen wird in der Spielerliste nur ein Spieler angezeigt, obwohl mehrere online sind. Der Originalcode sieht dazu so aus:

Code: Alles auswählen

$last_value = count($output) - 1;
$players_string = $output[$last_value];
$players_string = explode("\n", $players_string);
for ($i = 1; $i != count($players_string); $i++) {
$split = explode(" ", $players_string[$i], 3);
$playerlist[$i-1]['score'] = $split[0];
$playerlist[$i-1]['ping'] = $split[1];
$playerlist[$i-1]['player'] = $split[2];
}

function cmp ($a, $b) {
	if ($a["score"] > $b["score"]) {
	return -1;
	}
	if ($a["score"] < $b["score"]) {
	return 1;
	}
	if ($a["score"] == $b["score"]) {
	return 0;
	} 	
}
@usort($playerlist, "cmp");
$players = count($playerlist) - 1;

[...]

<?
for ($i = 0; $i != (count($playerlist) -1); $i++) {
?>
  <tr>
    <td><?=farben(str_replace("\"", "", $playerlist[$i]['player']))?></td>
    <td width="54"><?=$playerlist[$i]['score']?></td>
    <td width="64"><?=$playerlist[$i]['ping']?></td>
  </tr>
<? } ?>
Daraus habe ich folgendes gemacht:

Code: Alles auswählen

		$last_value = count($output) - 1;
		$players_string = $output[$last_value];
		$players_string = explode("\n", $players_string);
		for ($i = 1; $i != count($players_string); $i++)
			{
				$split = explode(" ", $players_string[$i], 3);
				$playerlist[$i-1]['score'] = $split[0];
				$playerlist[$i-1]['ping'] = $split[1];
				$playerlist[$i-1]['player'] = $split[2];
			}

		function cmp ($a, $b)
			{
				if ($a["score"] > $b["score"])
					{
						return -1;
					}
				if ($a["score"] < $b["score"])
					{
						return 1;
					}
				if ($a["score"] == $b["score"])
					{
						return 0;
					}
			}
			@usort($playerlist, "cmp");
			$players = count($playerlist) - 1;
	}

	for ($i = 0; $i != (count($playerlist) -1); $i++)
	{
		$template->assign_vars(array(
			'PLAYER'          => farben(str_replace("\"", "", $playerlist[$i]['player'])),
			'PLAYER_SCORE'    => $playerlist[$i]['score'],
			'PLAYER_PING'     => $playerlist[$i]['ping']));
	}
Im Template wird das dann mit {PLAYER}, {PLAYER_SCORE} und {PLAYER_PING} ausgegeben, aber leider nur für den zuerst eingeloggten Spieler. :-?

Code: Alles auswählen

<table width="400" border="0" cellpadding="0" cellspacing="1" align="center">
  <tr>
    <td class="row1" align="center" height="20"><span class="explaintitle">{L_GAMER_NAME}</span></td>
    <td class="row1" align="center" height="20"><span class="explaintitle">{L_GAMER_POINT}</span></td>
    <td class="row1" align="center" height="20"><span class="explaintitle">{L_GAMER_PING}</span></td>
  </tr>
  <tr>
    <td class="row2" align="center" height="20">{PLAYER}</td>
    <td class="row2" width="54" align="center" height="20">{PLAYER_SCORE}</td>
    <td class="row2" width="64" align="center" height="20">{PLAYER_PING}</td>
  </tr>
</table>
Was läuft hier falsch?
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

Dein Fehler: Du hast im Template keine Blöcke benutzt.
Mit einem Block kannst du sich wiederholende Abschnitte generieren in die jeweils andere variablen eingefügt werden: KB:template_syntax

Du musst also

Code: Alles auswählen

<!-- BEGIN spieler -->
{spieler.XY}
<!-- END spieler -->
und im PHP Teil

Code: Alles auswählen

$template->assign_block_vars('spieler', array(...));
benutzen statt deiner Version.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Benutzeravatar
Dungeonwatcher
Mitglied
Beiträge: 635
Registriert: 11.07.2004 10:04
Wohnort: Berlin

Beitrag von Dungeonwatcher »

Hi" 8)

Großes THNX, ich hab's nun hinbekommen. Auch wenn es ein bisschen gedauert hat. :roll:

Bye
Zuletzt geändert von Dungeonwatcher am 01.02.2008 16:37, insgesamt 1-mal geändert.
Benutzeravatar
djchrisnet
Mitglied
Beiträge: 1275
Registriert: 29.06.2007 15:52
Wohnort: Elmshorn
Kontaktdaten:

Beitrag von djchrisnet »

es muss folgender Massen heißen:

Code: Alles auswählen

   <!-- BEGIN spieler --> 
<tr>
  <td class="row2" align="center">{spieler.PLAYER}<br /></td>
  <td class="row2" width="54" align="center">{spieler.PLAYER_SCORE}</td>
  <td class="row2" width="64" align="center">{spieler.PLAYER_PING}</td>
</tr>
<!-- END spieler -->
Benutzeravatar
Dungeonwatcher
Mitglied
Beiträge: 635
Registriert: 11.07.2004 10:04
Wohnort: Berlin

Beitrag von Dungeonwatcher »

Jupp, genau das habe ich endlich auch begriffen gehabt. :roll:

THNX noch mal. 8)

Bye
Antworten

Zurück zu „Coding & Technik“