TemplaVoila! Content einer Seite mit TypoScript auslesen

Unter Verwendung von TemplaVoila in einem TYPO3 Projekt ist es ohne weiteres nicht möglich, Inhalte einer bestimmten Seite mit dem CONTENT-Objekt auszulesen. Zumindest dann nicht, wenn man auch FCEs (flexible Content Elemente) nutzt.

Das Ergebnis wäre ein Mischung von FCEs samt deren Inhalten sowie die eigentlich Inhalte innerhalb des FCEs nochmals separat als eigene Content Elemente. Das sorgt – wie man sich vorstellen kann – dafür, dass Inhalte doppelt ausgegeben werden.

Wir haben eine Funktion geschrieben, die dennoch die Möglichkeit bietet, entsprechende Inhalte einer Seite auszugeben.

Was muss ich dazu machen?

Zunächst muss man ein PHP Script schreiben und dieses innerhalb TypoScript als USER bzw. USER_INT einbinden. Darauf gehe ich hier nicht weiter ein – wie das gemacht wird wir z.B. hier beschrieben.

Hat man das geschafft, kann man in diesem Script die folgen Funktion zum auslesen der Inhalte einer Seite integrieren. Der Rückgabewert dieser Funktion ist ein UID Array der Content Elemente / FCEs.

PHP Methode zum Auslesen der Content Elemente einer Seite

private function getTemplaVoilaPageContentUids($pageUid) {
	
	$select = 'tx_templavoila_flex';
	$table  = 'pages';
	$where  = 'uid = '.$pageUid;
	$where .= $GLOBALS['TSFE']->sys_page->enableFields($table);
	$order  = '';
	$group  = '';
	$limit  = '1';
	
	$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery($select, $table, $where, $group, $order, $limit);
	$rowPage = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res);
	
	preg_match_all("/<data>(.*)<\/data>/", str_replace("\n", "", ($rowPage['tx_templavoila_flex'])), $uidXmlData);
	preg_match_all("/([0-9]+)/", $uidXmlData[0][0], $realUidArray);
	
	return $realUidArray[0];
	
}

Dazu gibt es noch folgende Funktion (Methode) von mir um das UID Array in ein CSV String umzuwandeln:

private function uidArrayToCsvString($uidArray) {
		
	$uidCsvString = '';
	foreach($uidArray as $singleUid) {
		$uidCsvString .= $singleUid.',';
	}
	
	return $uidCsvString;
 
}

Nun geben wir die Content Elemente mit folgendem Snippet aus. Dies ist der Code für euren USER-Aufruf aus TypoScript:

// Inhalte dieser Seite holen
$contentFromThisPageUid = 10;
 
$uidArray = $this->getTemplaVoilaPageContentUids($contentFromThisPageUid);
$uidCsvString = $this->uidArrayToCsvString($uidArray);
return $this->cObj->RECORDS(array('tables' => 'tt_content','source' => $uidCsvString,'dontCheckPid' => 1));

Nun sollte euer USER-Objekt entsprechend die Inhalte der von euch gewählten Seite (im Beispiel Seite mit der UID 10) ausgeben.

Ich hoffe, die Methoden funktionieren auch bei euch. Lasst es mich wissen.

Hinweis: In dieser Methode wird nach Mapping Reihenfolge vorgegangen, d.h. Objekte die mit TemplaVoila zuerst gemappt wurden, werden auch zuerst ausgelesen. Im idealfall also von oben nach unten mappen. Fall ihr dazu eine Idee habt, dies zu umgehen und das XML von TemplaVoila korrekt zu sortieren, gebt mir bitte Bescheid.

Vielen Dank!

Bewerte diese Seite

 
 
 
 
 
 
 
Bewerten
 
 
 
 
 
 
2 Bewertungen
60 %
1
5
3
 

Veröffentlicht von

Kevin Lieser

Kevin Lieser

Kevin Lieser ist ausgebildeter Mediendesigner und seit 2008 mit der TYPO3 Agentur KA Mediendesign unternehmerisch tätig. Seine Leidenschaften sind gutes Webdesign und die PHP Programmierung. Als App Entwickler und Autor mehrerer TYPO3 Extensions engagiert er sich aktiv für die Weiterentwicklung von Webapplikationen und mobilen Anwendungen.