[Smarty] Ausgabe mehrdimensionales Array

dfd1

Erfahrenes Mitglied
Hallo Leute

Ich habe ein kleines Problem dessen Lösung ich seit Tagen versuche herauszufinden.

Aufgabenstellung:
Ich habe ein Gästebuch, welches auch mehrfaches Kommentieren der Einträgen erlaubt (von jeweils dem Haupteintrag) und dies wird alles brav in eine MySQL-DB gespeichert.

Problem:
Mit Smarty kann man einfach via Section oder foreach ein 1-2 Dimensionales Array auslesen, das heisst entweder:
PHP:
array(Wert1, Wert2, Wert3)
PHP:
array(array(wert1, wert2, wert3), array(wert1, wert2, wert3))
Mit den Kommentären sehe ich 2 mögliche Lösungen für das Array-"Problem"
PHP:
array(array(Wert1, Wert2, Wert3, array(array(Comment-Wert1, Comment-Wert2), array(Comment-Wert1, Comment-Wert2))....
PHP:
array(array(wert1, wert2, wert3), array(wert1, wert2, wert3))
array(array(array(Comment-Wert1, Comment-Wert2), array(Comment-Wert1, Comment-Wert2)))

Mein Problem: Wie gebe ich das in Smarty aus? Mir ist es eigentlich egal welche von beiden Varianten ich nehmen muss/soll/kann/darf, aber ich habe mindestens ein 3 oder 4 Dimensionales Array.
 
Mh du hast kein Smarty Problem - suche doch mal bitte nach NestedSet (egal ob hier oder bei Google) und dir wird geholfen.

Viele Grüße
Robert
 
Danke für die prompte Antwort, und hab was neues gelehrnt.

Aber: Gibt es nicht eine Möglichkeit wie ich das Array Smarty-Tauglich machen könnte, oder beherscht Smarty nur max. 2 Dimensionale Arrays?

Denn beim Smarty-Debugg gibt er mir aber dennoch das Array einfach in Baum-Form schön aus.
 
Die Tiefe von Arrays ist für Smarty kein Problem. Das Problem ist aber, dass du bei der Erstellung des Smarty Templates die Tiefe (Struktur) kennen mußt. In deinem Fall geht das nunmal nicht. Für die Darstellung von Baumstrukturen nutzt man daher NestedSets oder ähnliche Abwandlungen.

Damit lässt sich in Smarty prima arbeiten, da hier das Einrücklevel als zusätzlicher Index im Array bereit steht und das Array eine feste Tiefe besitzt. Eventuell kannst du das ja bei dir hinbiegen :).

Viele Grüße
Robert
 
ich bin von dem Code ein wenig verwirrt,
setzt man das nich in ekicke klammern wie z.B:

PHP:
array[name bzw zahl];
echo array[name bzw zahl];

// ein Array startet immer mit 0 nie mit 1

meintest du das?
 
cille hat gesagt.:
ich bin von dem Code ein wenig verwirrt,
setzt man das nich in ekicke klammern wie z.B:

PHP:
array[name bzw zahl];
echo array[name bzw zahl];

// ein Array startet immer mit 0 nie mit 1
Betreff Array: Ja, und nein. Kommt immer darauf an, mein Beispiel setzt auf den Aufbau des Arrays an.

PHP:
$gbook_array = array();
$i = 0;
while ($main_entries = $mysql->fetcharray()) {
			  	$com_mysql = new mysql($db_server, $db_name, $db_user, $db_pw);
			  	$com_mysql->query("SELECT * FROM `gbook` WHERE gbook_ref_ID = $main_entries[gbook_ID] ORDER BY `gbook_time`DESC");
			  	$comment_array = array();
			  	$j = 0;
			  	while ($comment_entries = $com_mysql->fetcharray()) {
					$comment_array[$j] = array('comment_title'=>$comment_entries["comment_gbook_title"], 'comment_content'=>$comment_entries["gbook_content"], 'comment_name'=>$comment_entries["gbook_name"], 'comment_email'=>$comment_entries["gbook_email"], 'comment_hp'=>$comment_entries["gbook_hp"], 'comment_time'=>$comment_entries["gbook_time"]);
					$j++;    
				}
			  	
				$gbook_array[$i] = array('title'=>$main_entries["gbook_title"], 'content'=>$main_entries["gbook_content"], 'name'=>$main_entries["gbook_name"], 'email'=>$main_entries["gbook_email"], 'hp'=>$main_entries["gbook_hp"], 'time'=>$main_entries["gbook_time"]), 'comments'=>$comment_array);
				$gbook_IDs[$i] = $main_entries["gbook_ID"];
				$i++;
				
				
				$com_mysql->__destruct;	  
			}
Die oben gezeigte abfüllung des Arrays ist, wenn ich alles in 1 Array lade (Das heisst, den "Haupteintrag" und zu diesem Haupteintrag alle Kommentare).
Das Problem ist bei mir jetzt nur: Wie sag ich Smarty wie er die Daten ausgeben soll, bzw. wo er die Daten holen kann?
Denn es ist wieder ein array das Smarty durchlaufen soll, und ich will dies bewusst in Smarty realisieren.
 
Mir ist eine mögliche Lösung in den Sinn gekommen, obwohl mir diese nicht sonderlich gefällt:

Wer mein Post oben gesehen hat, sieht, dass ich zuerst das komplette Array abfülle, und dies später an Smarty übergeben will.

Nun eine Lösung ist, dass ich mein template weiter aufsplitte (was ich eigentlich so nicht möchte) und bei jedem Eintrag den Auslese und die Comments dazu, und dann die template ausgebe.

Grösster Nachteil: so habe ich für das Gästebuch-Template minimum 3 Files (Header, Inhalt selber, und footer) was ja eigentlich gerade gegen Smarty (aus meiner sicht) läuft.

Habt ihr noch Ideen für mein Problem?
 
Zurück