ViewHelper Aufrufe
es gibt drei Varianten einen ViewHelper aufzurufen:
als Tag:
<f:vhname par="123">{some.value}</f:vhname>
inline mit Parametern (hierbei muss man wissen mit welchem Parameter-Namen die Daten erwartet werden):
{f:vhname(par:'123',data:{some.value})}
inline in Objekt-Notation:
{some.value -> f.vhname(par:123)}
<f:if condition="some.value == 123">die variable some.value hat den Wert {some.value}</f:if> {f:if(condition:'{some.value}==123', then:'die variable some.value hat den Wert {some.value}')} {'die variable some.value hat den Wert {some.value}'->f.if(condition:'{some.value}==123')}
eigene Viewhelper kann man auf (mind.?) zwei Arten erstellen:
1. mit Typoscript
(eigentlich kein richtiger Viewhelper)
wir benutzen den cObject-Viewhelper und verbinden ihn mit einem eigenen Typoscript:
<f:cObject typoscriptObjectPath="lib.myviewhelper">zu modifizierende Daten<f:cObject>
und das zugehörige Typoscript:
lib.myviewhelper = TEXT lib.myviewhelper { current = 1 case = upper wrap = <span style="color:red;">|</span> }
Vorteile: schnell erstellt, volle Funktionalität von Typoscript
man kan sogar mehrere Werte an das Typoscript übergeben:
<f:cObject typoscriptObjectPath="lib.arraytest" data="{a:'abc',b:'xyz'}" >inside text</f:cObject>
lib.arraytest = COA lib.arraytest { 10 = TEXT 10.field = a 10.wrap = /|/ 20 = TEXT 20.field = b 20.wrap = \|\ }
ergibt dann:
/abc/\xyz\
Beachte: der innere Teil des f:cObject-Tags geht verloren.
2. mit einer eigenen Extension
Die Extension muss nicht viele Dateien beinhalten. In der einfachsten Version reicht diese Struktur:
my_extension +-Classes | +-ViewHelpers | +-modifyViewHelper.php +-ext_emconf.php +-ext_icon.gif
ext_emconf.php und ext_icon.gif benötigt man um die Extension überhaupt zu verwalten.
Die eigentliche Funktionalität liegt natürlich in modifyViewhelper.php:
<?php /* * * This script belongs to the TYPO3 package "my_extension". ** * * It is free software; you can redistribute it and/or modify it under * * the terms of the GNU Lesser General Public License as published by the * * Free Software Foundation, either version 3 of the License, or (at your * * option) any later version. * * * * This script is distributed in the hope that it will be useful, but * * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN- * * TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser * * General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with the script. * * If not, see http://www.gnu.org/licenses/lgpl.html * * * * The TYPO3 project - inspiring people to share! ** */ namespace VENDOR\MyExtension\Viewhelpers use \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper; /** * @package my_extension * @subpackage ViewHelpers * @author Name*/ class ModifyViewHelper extends AbstractViewHelper { class Tx_myExtension_ViewHelpers_ModifyViewHelper extends Tx_Fluid_Core_ViewHelper_AbstractViewHelper { /** * Modifies the given data * * @param string $myText The Text to modify * @param string $header * @param string $crop * @return string The modified string * @api */ public function render( $myText = null, $header = NULL, $crop = NULL ) { if( $myText === null ) $myText = $this->renderChildren(); $retval = ''; if ($header) $retval .= '<h2>'.$header.'</h2>'; $retval .= '<p>'; if ($crop) $retval .= substr($myText,0,$crop); else { $retval .= $myText; } $retval .= '</p>'; return $retval; } } ?>
Der Aufruf im Fluid-Template erfolgt dann so:
{namespace m=Tx_myExtension_ViewHelpers} {namespace m=VENDOR\MyExtension\ViewHelpers} <m:modify header="test" crop="20">ein etwas längerer Text zum Testen ob alles funktioniert</m:modify>