Dein ersten DataProcessor erstellen
Seit TYPO3 9 gibt es die DataProcessors, welche eine hervorragende Möglichkeit ist, cObjects um weitere PHP Logik zu erweitern.
Was ist ein DataProcessor?
Ein DataProcessor ist Teil des DataProcessing, welches eine Liste von PHP Klassen sind die nacheinander ausgeführt werden. DataProcessing ist Teil von cObjects, wie das FLUIDTEMPLATE.
Ziel ist es eigene PHP Logik auszuführen um das Elternobjekt um weitere Informationen anzureichern. Es finden sich Beispiele in der TYPO3 Dokumentation, wo es bereits vordefinierte DataProcessor bei FLUIDTEMPLATE gibt.
Beispiele:
- FilesProcessor
- GalleryProcessor
- MenuProcessor
- LanguageMenuProcessor
Der FilesProcessor ermöglicht es von TYPO3 Seiten die Dateien unterhalb von Resourcen zu ermitteln und der LanguageMenuProcessor liefert eine Liste von allen konfigurierten Sprachen mit der Links zur Umschaltung der aktuellen Seite.
Eigenen DataProcessor definieren
Darüberhinaus kann man auch eigene DataProcessor schreiben. Die Basisklasse eines DataProcessors ist: \T3docs\Examples\DataProcessing\DataProcessorInterface
Die Basis einer DataProcessor Klasse sieht dann wie folgt aus:
namespace T3docs\Examples\DataProcessing;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer;
use TYPO3\CMS\Frontend\ContentObject\DataProcessorInterface;
use TYPO3\CMS\Extbase\Domain\Repository\CategoryRepository;
class CustomCategoryProcessor implements DataProcessorInterface
{
public function process : array (
ContentObjectRenderer $cObj,
array $contentObjectConfiguration,
array $processorConfiguration,
array $processedData
) {
if (isset($processorConfiguration['if.']) && !$cObj->checkIf($processorConfiguration['if.'])) {
// leave $processedData unchanged in case there were previous other processors
return $processedData;
}
return $processedData;
}
}
Sobald man den DataProcessor via TypoScript für ein cObject registriert hat, wird die process() - Methode aufgerufen, sobald dieses cObject gerendert wird. Jeder DataProcessor reichert dann die View mit neuen Informationen an. Ebenfalls können die DataProcessors in das gemeinschaftliche Array: $processedData lesen und schreiben.
Die Registrierung erfolgt stets über die Eigenschaft: dataProcessing des cObjects. Hier am Beispiel von FLUIDTEMPLATE:
template = FLUIDTEMPLATE
template {
dataProcessing {
10 = T3docs\Examples\DataProcessing\CustomCategoryProcessor
}
}
Wie das genau funktioniert, zeige ich die in meinem TypoScript Komplettkurs.
Innerhalb vom DataProcessor bzw. in der process() - Methode, kannst du dann beliebigen PHP Code schreiben und das Template um deine Funktionalität erweitern. Da das $processedData - Array auch von anderen DataProcessor beschrieben wurden, falls diese vor deinem Processor ausgeführt wurden, kannst du auf Basis deren Resultate reagieren.
Fazit
Der DataProcessor ist eine weitere Alternative, um PHP Code für die View auszuführen. Dadurch kann die Anzahl der ViewHelper reduziert werden und weiter Programmlogik aus der View gebannt werden. Dadurch bleiben die Templatedateien weiterhin übersichtlich und der Designer muss sich nicht darum kümmern.