Template: Problem mit Loop

In diesem Forum kann man Fragen zur Programmierung stellen, die bei der Entwicklung von Mods für phpBB 3.0.x oder dem Modifizieren des eigenen Forums auftauchen.
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Antworten
Benutzeravatar
Wuppi
Mitglied
Beiträge: 734
Registriert: 14.05.2002 23:04
Wohnort: Köln
Kontaktdaten:

Template: Problem mit Loop

Beitrag von Wuppi »

Hi

EDIT: hat sich erledigt; im 2. Block_Vars muß $template->assign_block_vars('update.updatecat', array(
stehen.

----


für ne kleine Erweiterung werden via php paar Daten an eine Template-Datei geschickt. Bisher dachte ich das ich das System einigermaßen verstanden habe - aber jetzt wo ich nen Dropdown-Menu haben möchte geht nichts :(

die PHP sieht etwa so aus:

Code: Alles auswählen

		$result = mysql_query("SELECT kat_desc,kat_id FROM linkkat ORDER by kat_desc");
		while($row = mysql_fetch_array($result)) 
		{
			$template->assign_block_vars('updatecat', array(
			'CAT' => $row['kat_desc'],
			'CATID' => $row['kat_id']
			));
		}	
		
		$satz = mysql_query("SELECT * FROM linkdb where id = '$id'");
		while($row = mysql_fetch_array($satz)) 
		{
			$template->assign_block_vars('update', array(
			'ID' => $row['id'],
			'SITE' => $row['site'],
			'TITLE' => $row['linktitle'],
			'DESC' => $row['beschreibung'],
			'BANNER' => $row['banner_url'],
			'CAT' => $row['kat_id'],
			'ACTIVE' => $row['active'],
			'JOINED' => $user->format_date($row['joined'])
			));
		}
die template so:

Code: Alles auswählen

<!-- BEGIN update -->
		<form method='post' action='menu_linkliste_mod.php?update=update'>
		<table>
...
		  <tr>
		    <td>Beschreibung:</td>
		    <td>
			<input type='text' size='50' name='beschreibung' value='{update.DESC}'>
		    </td>
		  </tr>		
		  <tr>
		    <td>Kategorie ID:</td>
		    <td>
                <select id="cat" name="cat">
<!-- BEGIN updatecat -->
				<option value="{update.updatecat.CATID}">{update.updatecat.CAT}</option>
<!-- END updatecat -->
				</select>
		    </td>
		  </tr>
		  <tr>
		    <td>Kategorie ID:</td>
		    <td>
			<input type='text' size='50' name='kat_id' value='{update.CAT}'>
		    </td>
...
		</table>
		<input type='submit' name='Button' value='Daten Aktualisieren'>
		</form>
<!-- END update -->
Das Formular wird mit den Ausgelesenen Daten gefüllt. Aber das Drop-Down-Menu hat keinen Inhalt. Auch im Quelltext erscheint nichtmal nen Leerer aufruf.

In der Template-Datei sind noch andere Aktionen drin. Dieser Script-Teil kümmert sich um die Aktuallisierung von Daten. Auslesen mehrere Datensätze, Löschen usw. sind ebenfalls drin. Je abgegrenzt mit <-- BEGIN .... END --->. Daher muß ich für diesesn Scripteil ebenfalls mit assign_block_vars arbeiten - obwohl ich in diesem Teil ja nur für das Dropdown-Menu wirklich einen Loop benötige - der Rest der Daten ist ja "einmalig".


Gruß
Benutzeravatar
djchrisnet
Mitglied
Beiträge: 1275
Registriert: 29.06.2007 15:52
Wohnort: Elmshorn
Kontaktdaten:

Beitrag von djchrisnet »

Code: Alles auswählen

<!-- BEGIN updatecat -->
            <option value="{update.updatecat.CATID}">{update.updatecat.CAT}</option>
<!-- END updatecat --> 
versuchs mal so:

Code: Alles auswählen

<!-- BEGIN updatecat -->
            <option value="{updatecat.CATID}">{updatecat.CAT}</option>
<!-- END updatecat --> 
Benutzeravatar
Wuppi
Mitglied
Beiträge: 734
Registriert: 14.05.2002 23:04
Wohnort: Köln
Kontaktdaten:

Beitrag von Wuppi »

Hi

ist nen Loop (updatecat) innerhalb eines Loops - da muß ich den ersten Loop (update) zuerst Adressieren: update.updatecat.CATID ... hatte vorher schon updatecat.CATID - aber das klappte nicht. Mein Fehler war halt das ich den 2. Loop im php nicht als "Unterloop" deklariert habe:

Falsch:

Code: Alles auswählen

$template->assign_block_vars('updatecat', array(
Richtig:

Code: Alles auswählen

$template->assign_block_vars('[b]update[/b].updatecat', array(
update ist der "hauptloop".

Die Logik an dem System hab ich zwar noch net verstanden - aber hauptsache es klappt jetzt ... wobei ich im weiteren Finetunig festgestellt habe, das block_vars mich vor das nächste Problem stellte. EINE der z.b. 10 Ausgegebenen Zeilen muß einen Zusatz enthalten. Das ging so nicht nicht. Hab dann die komplette html-Ausgabe für diese Funktion [Dropdown-Menu] des Scripts in eine Variable gepacket ($var .= "blbl";) und das via assign_vars ans Template geschickt. Da kann ich dann wenigstens noch jede einzelne Zeile explizit kontrollieren (if).

Gruß
Antworten

Zurück zu „[3.0.x] Mod Bastelstube“