[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