[TYPO3-german] Übersetzung der additionalAttributes im SelectViewHelper
David Brünner
david.bruenner at t-online.de
Thu Mar 29 13:52:43 CEST 2018
Hallo,
ich rufe den SelectViewHelper folgendermaßen auf:
[code]
<f:form.select options="{leistungen}" property="uebergeordneteLeistung" additionalAttributes="{data-placeholder: 'Wählen Sie eine Leistung...'}" optionLabelField="bezeichnung" multiple="0" class="form-control chosen"/>
[/code]
Nun habe ich aber das Problem, dass der Text für das Attribut 'data-placeholder' aus einem Languagefile kommen soll.
Meine Idee wäre gewesen, einen neuen ViewHelper zu schreiben, der erst schaut ob was zu übersetzen ist und dann einfach an den vorhanden SelectViewHelper weiterleitet.
[code]
<kkvh:form.selectWithTranslation options="{leistungen}" property="uebergeordneteLeistung" additionalAttributes="{data-placeholder: 'LLL:EXT:kkbaybw/Resources/Private/Language/locallang.xlf:be.chooseLeistung;bla'}" optionLabelField="bezeichnung" multiple="0" class="form-control chosen"/>
[/code]
[code]
class SelectWithTranslationViewHelper extends SelectViewHelper {
protected $viewHelperArgs = null;
public function init() {
$this->viewHelperArgs = $this->arguments;
}
public function render() {
$this->init();
$this->_getAttributeFromArgs($this->viewHelperArgs);
$this->setArguments($this->viewHelperArgs);
return parent::render();
}
protected function _getAttributeFromArgs($arguments) {
foreach ($arguments as $attribute => $value) {
if (is_array($value)) {
$result = $this->_getAttributeFromArgs($value);
$this->viewHelperArgs[$attribute] = $result;
} else {
if (strpos(strtolower($value), 'lll:') !== false) {
$parts[] = $value;
if (strpos($value, ';') !== false) {
$parts = explode(';', $value);
}
if (count($parts) == 1) {
$result[$attribute] = $this->_translated($parts[0], []);
} elseif (count($parts) == 2) {
$result[$attribute] = $this->_translated($parts[0], $parts[1]);
}
return $result;
}
}
}
}
protected function _translated($id, $args) {
$request = $this->renderingContext->getControllerContext()->getRequest();
$extensionName = $request->getControllerExtensionName();
return LocalizationUtility::translate($id, $extensionName, $args);
}
}
[/code]
Aber leider funktioniert das nicht. Die Argumente die im 'SelectWithTranslationVH' entgegengenommen werden ,werden schön übersetzt.
Aber es kommt trotzdem der Placeholder 'LLL:xxxx' raus.
Ich habe gelesen, dass sowieso davon abgeraten wird ViewHelper zu verschachteln (https://forum.typo3.org/index.php/t/152059/call-viewhelper-from-another-viewhelper).
Zusammenfassend:
Ich brauche eine Möglichkeit den SelectViewHelper aufzurufen, aber zusätzlich auch zusätzliche Attribute (in diesem Bsp.: 'data-placeholder') zu übersetzen.
More information about the TYPO3-german
mailing list