Eine Möglichkeit Werte und Konstanten in Extensions zu definieren, besteht darin diese direkt in den Flexform zu speichern. Aber um die Übersicht bei einer Vielzahl von Werten zu behalten oder um etwas mehr Dynamik ins Spiel zu bringen, bietet sich Typoscript an.
Im Idealfall gibt es einen guten Mix aus beiden Varianten in einer guten Extension:
- „Typoscriptscheuer“ Anfänger will nur ein paar Einstellungen in den Flexform machen und die Extension soll laufen – kein Problem
- Ein anderer Administrator möchte die Extension (z.B. an einem Marker ausgeben und daher) direkt über Typoscript einstellen – kein Problem
Variante 1 – $conf erweitern:
Ich gehe meist den Weg die Flexform Werte direkt im Array $this->conf zu speichern und vorhandene Werte zu überschreiben (schließlich überwiegt die Einstellungen in den Flexform bei den meisten Extensions).
Eine Funktion, die einmal zu Beginn ausgeführt wird um $this->conf zu erweitern, kann z.B. so aussehen:
// enables flexform values in $conf function config() { if (is_array($this->cObj->data['pi_flexform']['data'])) { // if there are flexform values foreach ($this->cObj->data['pi_flexform']['data'] as $key => $value) { // every flexform category if (count($this->cObj->data['pi_flexform']['data'][$key]['lDEF']) > 0) { // if there are flexform values foreach ($this->cObj->data['pi_flexform']['data'][$key]['lDEF'] as $key2 => $value2) { // every flexform option if ($this->pi_getFFvalue($this->cObj->data['pi_flexform'], $key2, $key)) { // if value exists in flexform $this->conf[$key.'.'][$key2] = $this->pi_getFFvalue($this->cObj->data['pi_flexform'], $key2, $key); // overwrite $this->conf } } } } } } |
Der Vorteil liegt auf der Hand: Alleine die Verwendung von $this->conf (z.B. $this->conf[’singlePid‘]) genügt um an die jeweiligen Konstanten zu kommen.
Variante 2 – Funktion die mir den passenden Wert liefert:
Dmitry Dulepov beschreibt in seinem Buch TYPO3 Extension Development eine andere Variante. Beim Aufruf einer kurzen Funktion wird der passende Wert zurückgeliefert – die Funktion kann so aussehen:
function fetchConfigurationValue { $value = trim($this->pi_getFFvalue($this->cObj->data['pi_flexform'], $param)); return $value ? $value : $this->conf[$param]; } |
Hier kommt man an den Konfigurationswert indem man diese Funktion jedes Mal aufruft, wenn diese benötigt wird:
$this->fetchConfigurationValue(’singlePid‘)