Seite 1 von 1

Template: Problem mit Loop

Verfasst: 15.08.2008 21:32
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ß

Verfasst: 16.08.2008 16:10
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 --> 

Verfasst: 16.08.2008 16:29
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ß