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

Marc Willmann marc_hl at gmx.de
Sat Jul 16 19:26:39 CEST 2005


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