Wenn ein Templatefile im TypoScript konfiguriert ist,
dann lese die Datei ein
und ersetze alle Marker (die Keyvalues des markerarrays werden in Großbuchstaben gewandelt und in '###' gewrapt).
if ($conf['templatefile']) { $template=$this->cObj->fileResource($conf['templatefile']); } else { // by default use the file 'template.html' provided by this extension // in the subdirectory 'tpl' $template=$this->cObj->fileResource('EXT:'.$this->extKey.'/tpl/template.html'); } if (!$template || strlen($template)==0) { $template=$this->pi_getLL('no_template'); } // get main block: $mainTemplate = $this->cObj->getSubpart($template, '###MAINPART###'); // get Item block and replace marker $itemTemplate = $this->cObj->getSubpart($mainTemplate, '###ITEMS###'); // render over all items and gather results: $items = ''; foreach ($dataArray as $itemRecord) { $itemMarkerArray = $itemRecord; $items .= $this->cObj->substituteMarkerArray($itemTemplate,$itemMarkerArray,'###|###',$uppercase=1); } // replace subblock with sum of all items $mainTemplate = $this->cObj->substituteSubpart($mainTemplate,'###ITEMS###',$items,$recursive=0,$keepMarker=0); //render full template (with replaced item block) $content.=$this->cObj->substituteMarkerArray($mainTemplate,$markerArray,'###|###',$uppercase=1);
Für die Marker kommen z.B. alle Felder einer Tabelle in Frage.
Damit die Felder nicht einfach nur nackt übergeben und ersetzt werden kann man alle Felder per stdWrap konfigurieren (lassen):
foreach ($itemRecord as $key => $value) { if ($fieldConf = $this->conf['fieldConfig.'][$key.'.']) { $itemMarkerArray[$key] = $this->cObj->stdWrap($value, $fieldConf); } else { $itemMarkerArray[$key] = $value; } }
ungetestet:
um auch auf andere Felder z.b. eines Datensatzes zugreifen zu können braucht es einen Bezug dorthin. Der könnte durch Zuordnung der Daten erfolgen:
$this->cObj->data = $record;
danach können die Felder von $record im typoscript als {$field:name} benutzt werden. ????
Achtung: werden damit die Daten des aktuellen ContentElementes überschrieben? also eher:
$this->cObj->data = array_merge($this->cObj->data, $record);
???