[Typo3-german] ext-Programmierung, Template-Problem, SOLVED!

Marc Willmann marc_hl at gmx.de
Sun Jul 17 09:03:39 CEST 2005


Ich habs :-)

Der Trick ist, die äussere Geschichte erst am Schluss zu ersetzen und
die Funktion substituteMarkerArrayCached dann nicht auf das Template
loszulassen, sondern auf den Wert, der zurückgegeben werden soll.

Also:
$retVal = $this->cObj->substituteMarkerArrayCached($retVal, $marker);

Gruß

M.

Marc Willmann schrieb:
> Hallo Liste,
> 
> ich versuche mich gerade an einer Extension und dem Template-System. Das
> Buch von R. Meyer liegt aufgeschlagen neben mir und leistet gute Dienste :-)
> 
> Ich habe ein Template-File mit (u.a.) folgendem Inhalt:
> 
> <!-- ###CATEGORY_VIEW### begin -->
> 
>   ###CATEGORY###<br><br>
> 
>   <!-- ###CATEGORY_ENTRY### begin -->
> 
>   ###TEASER###<br>
>   ###ENTRY###<br><br>
> 
>   <!-- ###CATEGORY_ENTRY### end -->
> 
> <!-- ###CATEGORY_VIEW### end -->
> 
> Ich möchte also, auf jeder Seite die Kategorie als Überschrift und
> anschliessend für jeden Eintrag, der dieser Kategorie zugeordnet wurde,
> einen Eintrag mit TEASER und ENTRY ausgeben. Soweit der Plan :-)
> 
> Mein Code, der sowas tun soll, findet ihr weiter unten.
> 
> Was nun passiert: Der Marker ###CATEGORY### wird ausgegeben (unersetzt),
> danach läuft alles ganz korrekt - jeder Eintrag wird ausgeben, nach dem
> Template-File formatiert.
> 
> Weitere Versuche haben dazu geführt, dass ###CATEGORY### ersetzt wird,
> dann aber ein unersetzter Block ###TEASER###<br>####ENTR>### ausgeben
> wird und erst anschliessend alle Einträge sauber ersetzt erscheinen.
> 
> Verschiebe ich im Template-File ###CATEGORY### in den
> <-CATEGORY_ENTRY->-Subpart, wird alles korrekt ausgegeben, aber das will
> ich ja nicht (die Kategorie soll nur einmal als Überschrift erscheinen).
> 
> Ich habe leider nur Beispiele mit verschachtelten Subparts gefunden, in
> dem im äußeren Subpart nur statischer Text stand (z.B. Table-Tags o.ä.),
> aber eben nie Marker.
> 
> Dass ich das Problem umgehen kann, in dem ich im Template-File die
> Subparts nicht verschachtele, ist mir klar - aber ich frage mich, ob es
> so wirklich nicht geht?
> 
> Vielen Dank im Voraus
> 
> M.
> 
> ---- MEIN CODE ----
> $retVal = "";
> $cat = $this->piVars['cat'];
> // Seite auswählen, auf der die Inhaltselemente sind
> $PageID = $conf["pageid"];
> if (!intval($PageID))
> 	$PageID = $GLOBALS["TSFE"]->id;
> 
> // Kategorienamen auslesen
> $res =
> $GLOBALS["TYPO3_DB"]->exec_SELECTquery("*","tx_myext_categories","deleted=0
>  AND uid=".$cat." AND hidden=0 AND pid='".$PageID."'","","sorting");
> 
> if ($row = $GLOBALS["TYPO3_DB"]->sql_fetch_assoc($res)) {
> 	$category = $row["category"];
> }
> 
> // Templatefile öffnen
> $tmpl = $this->cObj->fileResource($conf["templateFile"]);
> 
> // einen Teilbereich aus der Designvorlage auswählen
> $tmpl = $this->cObj->getSubpart($tmpl,"###CATEGORY_VIEW###");
> 
> $marker["###CATEGORY###"] = $category;
> $retVal .= $this->cObj->substituteMarkerArrayCached($tmpl, $marker);
> 
> // einen Subpart auswählen
> $tmpl_entry = $this->cObj->getSubpart($tmpl, "###CATEGORY_ENTRY###");
> 
> // Alle Einträge ausgeben, die zu der Kategorie passen
> 
> $res =
> $GLOBALS["TYPO3_DB"]->exec_SELECTquery("*","tx_myext_main","(category='".$cat."'
> OR category LIKE '".$cat.",%' OR category LIKE '%,".$cat."' OR category
> LIKE '%,".$cat.",%') AND deleted=0 AND hidden=0 AND
> pid='".$PageID."'","","sorting");
> 
> while ($row = $GLOBALS["TYPO3_DB"]->sql_fetch_assoc($res)) {
> 	$marker["###TEASER###"] = $row["teaser"];
> 	$marker["###ENTRY###"] = $row["description"];
> 	$marker["###CATEGORY###"] = $category;
> 	$retVal2 .= 	$this->cObj->substituteMarkerArrayCached($tmpl_entry,
> $marker);
> }
> 
> $retVal = $this->cObj->substituteSubpart($tmpl, "###CATEGORY_ENTRY###",
> $retVal2);
> return $retVal;
> 



More information about the TYPO3-german mailing list