Ich habe ein wenig gesucht und es scheint mir, als würde die Select-Box von Fluid, die als View-Helper zur Verfügung gestellt wird, nur aus den Daten ein Auswahlfeld machen, die ihr gegeben werden. Wenn man z.B. Kategorien hat und man möchte nicht nur die Kategorien in der Auswahlliste anzeigen, sondern auch eine Option zum Zurücksetzen der Auswahl, also sowas wie „Alle Kategorien“, dann gibt es keinen Tag dafür.
Dazu habe ich einen View Helper erstellt, der von dem Select View Helper ableitet (Tx_Fluid_ViewHelpers_Form_SelectViewHelper). Dann habe ich einen zusätzlichen Parameter registriert in der Init-Function:
public function initializeArguments() { parent::initializeArguments(); $this->registerArgument('additionalOptions', 'array', 'Associative array with values to prepend', FALSE); }
Und die getOptions-Funktion so weit angepasst, dass die zusätzlichen Optionen vor die automatisch zusammengestellten angehängt werden:
protected function getOptions() { $options = parent::getOptions(); $additionalOptions = array(); foreach ($this->arguments['additionalOptions'] as $key => $value) { $additionalOptions[$key] = $value; } return array_merge($additionalOptions, $options); }
Und so kann man es dann im eigenen Template verwenden:
<custom:advSelect name="category" options="{categories}" optionLabelField="title" additionalOptions="{0 : 'Alle Kategorien'}" />
UPDATE:
Es gibt mit dem Code ein kleines Problem, und zwar werden beim Zusammenfügen von Arrays die Schlüssel neu nummeriert. Daher:
protected function getOptions() { $options = parent::getOptions(); if(empty($this->arguments['additionalOptions'])) { return $options; } foreach ($this->arguments['additionalOptions'] as $key => $value) { $additionalOptions[$key] = $value; } return $additionalOptions + $options; }
Hi, danke für die Codeschnipsel, hab aber die einfache Variante hier genommen: http://forge.typo3.org/issues/show/6301
Gibt es eigentlich eine Möglichkeit, hier auch übersetzbare Labels einzutragen?
Weiß ich nicht, evtl. so:
additionalOptions=“{0 : {f:translate(key: ‚lang.key‘)}}“
Wenn das nicht geht, muss man den ViewHelper so erweitern, dass er die Ausgabe mit translate verarbeitet. Das im Template:
additionalOptions=“{0: ‚lang.key‘}“
Das im ViewHelper:
$additionalOptions[$key] = Tx_Extbase_Utility_Localization::translate($value, $extensionName, $arguments);
Ist aber nicht getestet.