Problem mit While-Ausgabe und/oder Popup-Problem

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.
t2004
Mitglied
Beiträge: 81
Registriert: 30.05.2005 14:08
Wohnort: Bremen

Problem mit While-Ausgabe und/oder Popup-Problem

Beitrag 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
Benutzeravatar
D@ve
Ehemaliges Teammitglied
Beiträge: 3842
Registriert: 28.08.2002 19:33
Wohnort: Bretzfeld
Kontaktdaten:

Beitrag 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
There are only 10 types of people in the world: Those who understand binary, and those who don't
t2004
Mitglied
Beiträge: 81
Registriert: 30.05.2005 14:08
Wohnort: Bremen

Beitrag 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
Benutzeravatar
Blutgerinsel
Mitglied
Beiträge: 1801
Registriert: 19.07.2004 18:53
Wohnort: Landkreis Ulm
Kontaktdaten:

Beitrag von Blutgerinsel »

Zeig mal deine Templatedatei
t2004
Mitglied
Beiträge: 81
Registriert: 30.05.2005 14:08
Wohnort: Bremen

Beitrag 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!
Zuletzt geändert von t2004 am 19.07.2005 18:39, insgesamt 1-mal geändert.
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag 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?
KB:knigge
t2004
Mitglied
Beiträge: 81
Registriert: 30.05.2005 14:08
Wohnort: Bremen

Beitrag 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 ;)
Benutzeravatar
D@ve
Ehemaliges Teammitglied
Beiträge: 3842
Registriert: 28.08.2002 19:33
Wohnort: Bretzfeld
Kontaktdaten:

Beitrag 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
There are only 10 types of people in the world: Those who understand binary, and those who don't
t2004
Mitglied
Beiträge: 81
Registriert: 30.05.2005 14:08
Wohnort: Bremen

Beitrag 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
t2004
Mitglied
Beiträge: 81
Registriert: 30.05.2005 14:08
Wohnort: Bremen

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

Beitrag 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
Antworten

Zurück zu „Coding & Technik“