Manchmal wünscht mal sich in TYPO3 einen verschachtelten Variablenaufruf in der Art {array.{element_mit_schlussel_x}}. Geht leider nicht, weshalb ich folgenden ViewHelper gebaut habe:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
<?php namespace AUXNET\MyExt\ViewHelpers; /*************************************************************** * Copyright notice * * (c) 2014 Dr. Maximilian Kalus <info@auxnet.de>, AUXNET * * All rights reserved * * This script is part of the TYPO3 project. The TYPO3 project is * free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * The GNU General Public License can be found at * http://www.gnu.org/copyleft/gpl.html. * * This script is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * This copyright notice MUST APPEAR in all copies of the script! ***************************************************************/ /** * Get element from array and save it to variable * * @package my_ext * @license http://www.gnu.org/licenses/gpl.html GNU General Public License, version 3 or later * */ class ArrayElementViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper { /** * @param array $array to search in * @param string $key to search for * @param string $variableName variable name to set * @return string content */ public function render($array, $key, $variableName = 'element') { if (!is_array($array) || empty($array) || !array_key_exists($key, $array)) $value = null; else $value = $array[$key]; $this->templateVariableContainer->add($variableName, $value); $content = $this->renderChildren(); $this->templateVariableContainer->remove($variableName); return $content; } } ?> |
Der Aufruf in TYPO3 ist wie folgt:
1 2 3 4 5 |
{namespace my=AUXNET\MyExt\ViewHelpers} <my:arrayElement array="{settings.list}" key="{lang}" variableName="myValue"> <p>{myValue}</p> </my:arrayElement> |
Dieses Konstrukt ruft quasi die Variable {settings.list.{lang}} bzw. $settings[‚list‘][$lang] ab und zeigt sie an.
dee32
Super Lösung! Mir ist schleierhaft warum so etwas nicht im Fluid-Core implementiert ist.
mkalus Autor
Danke! Es gibt so einige Funktionen, bei denen man sich das fragt 🙂 Allerdings würde ich den Entwicklern keinen Vorwurf machen, denn schließlich versuchen sie ja, einen gewissen Teil der möglichen Anwendungsfälle abzudecken. Dass da die eine oder andere Funktionalität hinten ‚runterfällt, mag vorkommen.
Jonas
Gibt es zum Glück auch in VHS:
https://fluidtypo3.org/viewhelpers/vhs/master/Variable/GetViewHelper.html
Ohne VHS wäre Fluid schon tot…. 😉
mkalus Autor
Da kann ich dir nur zustimmen. Den Helper hatte ich für die Fälle geschrieben, in denen ich VHS nicht verwende (eher selten, kommt aber vor).