Seite 1 von 3

Problem mit While-Ausgabe und/oder Popup-Problem

Verfasst: 18.07.2005 18:23
von t2004
Hallo,

ich zerbreche mir nun schon gewisse Zeit den Kopf über ein Problem mit einer While-Schleife. Folgendes habe ich gemacht:
in der Datei usercp_viewprofil.php habe ich folgende zeilen hinzugefügt

Code: Alles auswählen

$sql = "SELECT * FROM phpbb_warn_reason WHERE user_id='".$poster_id."'"; 
$warnprofildata = mysql_query($sql) OR die(mysql_error("Haut nicht hin"));
while($row = mysql_fetch_assoc($warnprofildata)) {
        echo "<tr><td width='190px'>".$row['user_date']." </td><td width='240px'> ".$row['user_reason']."</td><td width='160px'>".$row['user_god']."</td><td width='160px'><input type='submit' name='".$row['warn_id']."' Value='Löschen'></td></tr>\n";
}
Mit dem html-code dazwischen sicherlich nicht elegant, aber ich wollte halt ne Tabelle drumrumhaben...nunja, nun zum Problem:
In der profil_view_body.tpl möchte ich den Inhalt der Abfrage unterhalb der Interessen anzeigen lassen. Die Daten werden in der tpl angezeigt, nur sind die nicht da, wo ich die haben möchte (oben unter dem Header werden die momentan angezeigt)

Eine andere möglichkeit die ich mir überlegt habe ist, das ganze über einen Link in einem Popup-Fenster ausgeben zulassen. Wobei ich den Link in der usercp_viewprofil.php einrichten müßte, aber wie mache ich das? Einen Link darstellen ist nicht das problem, ebenso wenig, wie die Abfrage, wann der Link erscheinen soll und wann nicht...doch an diesem blöden Popup beiß ich mir noch die Zähne aus.

Wäre toll wenn jemand zu einem der beiden Probleme einen lösungvorschlag hat...ode rmich in die richtige Richuntg shcubst.

Danke schon mal fürs lesen (was stellenweise sicherlich nicht einfach gewesen ist).

mfg

Verfasst: 18.07.2005 18:41
von D@ve
Die Daten werden in der tpl angezeigt, nur sind die nicht da, wo ich die haben möchte (oben unter dem Header werden die momentan angezeigt)
Logisch, wenn Du mit der Template-Engine schaffst, musst Du auch mit den Template-Variablen arbeiten, dann ist der Echo-Befehl (bzw. jegliche Ausgabe in der php-Datei) tabu. Arbeite mit der Funktion template->assign_block_vars() und erstelle Dir eigene Platzhalter. Am besten schaust Du Dir das mal in einer Forendatei (zB. viewtopic.php) an. Gibt auch einige Artikel in der KB wo das erklärt ist.

Gruß, Dave

Verfasst: 19.07.2005 15:02
von t2004
D@ve hat geschrieben:
Die Daten werden in der tpl angezeigt, nur sind die nicht da, wo ich die haben möchte (oben unter dem Header werden die momentan angezeigt)
Logisch, wenn Du mit der Template-Engine schaffst, musst Du auch mit den Template-Variablen arbeiten, dann ist der Echo-Befehl (bzw. jegliche Ausgabe in der php-Datei) tabu. Arbeite mit der Funktion template->assign_block_vars() und erstelle Dir eigene Platzhalter. Am besten schaust Du Dir das mal in einer Forendatei (zB. viewtopic.php) an. Gibt auch einige Artikel in der KB wo das erklärt ist.

Gruß, Dave
Hi,

Danke für Deine Antwort. Habe mir das mal studiert, aber einen wirklichen erfolg konnte ich damit leider nicht so ganz verbuchen. Ich habe es mit der assign_block-vars versucht:

Code: Alles auswählen

while($row = $db->sql_fetchrow($warnings)){
	$template->assign_block_vars('list', array(
	'DATE' => "test",//<tr><td>".$row['user_date']."</td>",
	'REASON' => "<td>".$row['user_reason']."</td>", 
	'MOD' => "<td>".$row['user_god']."</td>",
	'KILL' => sprintf ("<td><input type='submit' name='".$row['warn_id']."' Value='Löschen'></td></tr><br>\n")
));
Wobei ich die variable DATE mit einem normalen Text zum testen belegt habe. In der profil_view_body.tpl wird allerdings auf diese Weise nichts angezeigt...nicht einmal "Test".... in der TPL sind die betreffenden stellen mit {list.DATE}(und so weiter) gekennzeichnet

Habe den Code umgebaut gehabt nach:

Code: Alles auswählen

while($row = $db->sql_fetchrow($warnings)){
	$template->assign_vars(array(
	'DATE' => "<tr><td>".$row['user_date']."</td>",
	'REASON' => "<td>".$row['user_reason']."</td>", 
	'MOD' => "<td>".$row['user_god']."</td>",
	'KILL' => sprintf ("<td><input type='submit' name='".$row['warn_id']."' Value='Löschen'></td></tr><br>\n")
));
In der TPL die Platzhalter geändert und es wird mir eine Zeile angezeigt (die Inhaltlich richtig ist)...nur sollten es eigentlich 2 maximal aber 3 Zeilen sein die er mir da anzeigen soll und der Inhalt ist auch nicht immer der gleiche...also einfach die Reihe mit den Platzhaltern kopieren und unter der ersten zeile einfügen geht nicht (dann würde ich ja 2x zeile eins haben).
Ich denke mal, das mein 2. Code zwar so oft durch die Tabelle geht, wie es die Schleife vorgibt, aber dabei immer die aktuelle Zeile Überschreibt?! Wie könnte ich das umgehen?

mfg

Verfasst: 19.07.2005 15:07
von Blutgerinsel
Zeig mal deine Templatedatei

Verfasst: 19.07.2005 17:01
von t2004
Da es sich um die 0815-view_profil_body.tpl handelt habe ich mal nur einen auszug aus der Datei (wo die einträge sind) gepostet:

Code: Alles auswählen

[...]</span></b></td>
		</tr>
		<tr> 
		  <td valign="top" align="right" nowrap="nowrap"><span class="gen">{L_INTERESTS}:</span></td>
		  <td> <b><span class="gen">{INTERESTS}</span></b></td>
		</tr>{DATE}{REASON}{MOD}{KILL}
	  </table>
	</td>
  </tr>
[...]
mfg

Edit: Dieser Auszug ist passend zu der funktionierenden assign_vars-Variante in meinem vorherigen Posting!

Verfasst: 19.07.2005 17:49
von Pyramide
t2004 hat geschrieben:in der TPL sind die betreffenden stellen mit {list.DATE}(und so weiter) gekennzeichnet
t2004 hat geschrieben:

Code: Alles auswählen

... {DATE} ...
Aha :roll:

Richtig wäre es in etwa so:

Code: Alles auswählen

<!-- BEGIN list -->
{list.DATE}
<!-- END list -->
BTW: hast du schon KB:template_syntax gelesen?

Verfasst: 19.07.2005 18:36
von t2004
Jo daran würde es wohl liegen...ABER:
In der TPL die Platzhalter geändert und es wird mir eine Zeile angezeigt (die Inhaltlich richtig ist)...nur sollten es eigentlich 2 maximal aber 3 Zeilen sein die er mir da anzeigen soll und der Inhalt ist auch nicht immer der gleiche...also einfach die Reihe mit den Platzhaltern kopieren und unter der ersten zeile einfügen geht nicht (dann würde ich ja 2x zeile eins haben).
Ich habe schon darauf geachtet, das wenn ich den assign_block_vars(#list'... benutze auch die Platzhalter in der TPL mit einem "list." vorweg zu kennzeichnen. Der Auszug der TPL den ich gepostet habe, bezieht sich auf den Code :

Code: Alles auswählen

while($row = $db->sql_fetchrow($warnings)){ 
   $template->assign_vars(array( 
   'DATE' => "<tr><td>".$row['user_date']."</td>", 
   'REASON' => "<td>".$row['user_reason']."</td>", 
   'MOD' => "<td>".$row['user_god']."</td>", 
   'KILL' => sprintf ("<td><input type='submit' name='".$row['warn_id']."' Value='Löschen'></td></tr><br>\n") 
));
Also ist die Bezeichnung der Platzhalter rein theoretisch richtig. Dabei habe ich mal ne Frage. Die Kommentare <!-- BEGIN list --> und <!-- END list --> dienen doch nur der übersichtlichkeit, wenni ch den Quellcode ansehe und haben nichts mit der richtigen Darstellung zutun, oder?

Ja habe mir die kurze Erklärung zu dem assign_vars in der KB hier durchgelesen und auch das File am Ende geladen und durchgearbeitet, aber bei meinem Problem hilft es mir nicht weiter.

mfg

PS: habs mal unter den TPL auszug mit darunter geschrieben ;)

Verfasst: 19.07.2005 22:40
von D@ve

Code: Alles auswählen

while($row = $db->sql_fetchrow($warnings)){
   $template->assign_vars(array(
   'DATE' => "<tr><td>".$row['user_date']."</td>",
   'REASON' => "<td>".$row['user_reason']."</td>",
   'MOD' => "<td>".$row['user_god']."</td>",
   'KILL' => sprintf ("<td><input type='submit' name='".$row['warn_id']."' Value='Löschen'></td></tr><br>\n")
));
Das Konstrukt ist vollkommen sinnfrei, in der Schleife überschreibst Du nur immer wieder die gleichen Template-Variablen. Wie schon gesagt, benutze assign_block_vars()

Gruß, Dave

Verfasst: 20.07.2005 07:41
von t2004
D@ve hat geschrieben:

Code: Alles auswählen

while($row = $db->sql_fetchrow($warnings)){
   $template->assign_vars(array(
   'DATE' => "<tr><td>".$row['user_date']."</td>",
   'REASON' => "<td>".$row['user_reason']."</td>",
   'MOD' => "<td>".$row['user_god']."</td>",
   'KILL' => sprintf ("<td><input type='submit' name='".$row['warn_id']."' Value='Löschen'></td></tr><br>\n")
));
Das Konstrukt ist vollkommen sinnfrei, in der Schleife überschreibst Du nur immer wieder die gleichen Template-Variablen. Wie schon gesagt, benutze assign_block_vars()

Gruß, Dave
Das war mir schon beinahe klar das ich auf diesem Wege, die ausgegebenen Werte immer überschreibe (habe ich zumindest vermnutet, da mir immer die letzte Zeile aus der Datenbank angezeigt wurde). Was ich daran nicht verstehe ist, wenn ich es wie in der KB beschrieben mit der Block_vars mache (siehe Code oben) und auch die Platzhalter dementsprechend ändere, dann bekomme ich KEINE Anzeige. Mache ich es ganz normal mit assign_vars (mit dementsprechenden Platzhaltern) wird mir zumindest die letztezeileder DB angezeigt...ist für mich ein wenig verwirrend...ich habe sogar schon versucht das Beispiel aus der KB einzubinden (Zahlen von 1 bis 10 bla bla bla) aber auch dort habe ich keine Anzeige bekommen.

Ich werde nun den html-Code in den Platzhaltern in der PHP löschen und stattdessen in der TPL eine neue Tabellenzeile anlegen lassen, aber so allmählich gehen mir die ideen aus, woran das liegen könnte...

mfg

Sorry fürs doppelposting....Fehler gefunden!

Verfasst: 20.07.2005 08:13
von t2004
<!-- BEGIN list -->
{list.DATE}{list.REASON}{list.MOD}{list.KILL}
<!-- END list -->

So wäre es in der TPL richtig statt:
{list.DATE}{list.REASON}{list.MOD}{list.KILL}

Danke für die geduldige Hilfe

mfg