Eigene Fluid-ViewHelper schreiben I
ViewHelper-Klasse anlegen
Da in Extbase und Fluid fast alles über Konventionen funktioniert, gibt es einen bestimmten Ort, an dem die eigenen ViewHelper platziert werden müssen, damit sie sich im Fluid-Template benutzen lassen. Im Ordner einer Extension muss dafür innerhalb von Classes der Ordner ViewHelpers angelegt werden.
Der Name eines ViewHelpers muss auf "ViewHelper" enden. Lege im ViewHelpers-Ordner eine PHP-Datei mit diesem Namen an, z.B. ReverseViewHelper.php.
Diese PHP-Datei enthält dann die Klasse Tx_[DeineExtension]_ViewHelpers_ReverseViewHelper:
<?php class Tx_MyExt_ViewHelpers_ReverseViewHelper extends Tx_Fluid_Core_ViewHelper_AbstractViewHelper { /** * Reverses the string * * @param string $string * @return */ public function render($string) { return strrev($string); } } ?>
Das ist die Minimalform eines selbstgebauten ViewHelpers:
- Der ViewHelper ist eine Klasse, die Tx_Fluid_Core_ViewHelper_AbstractViewHelper erweitert. (Für bestimmte Arten von ViewHelpern bietet Fluid noch andere geeignete Basisklassen an, die aber letzendlich auch nur eine Erweiterung des AbstractViewHelper sind.)
- Die Methode render() muss implementiert werden. Sie wird beim Rendern des ViewHelpers aufgerufen.
- Wie an so mancher Stelle in Extbase und Fluid ist der DocComment der render()-Methode verpflichtend. Alle Parameter des ViewHelper müssen dort mit einer Datentypangabe deklariert werden.
Unser ReverseViewHelper ist direkt einsatzbereit:
Eigener ViewHelper im Einsatz
{namespace m=Tx_MyExt_ViewHelpers} <h2>Example usages</h2> <ul> <li> Fluid is <m:reverse string="lufrewop" /> </li> <li> Extbase is {m:reverse(string:'lufrewop')} </li> </ul>
- Die erste Zeile ist entscheidend, wenn eigene ViewHelper eingesetzt werden sollen. Hier wird in Fluid ein Namespace definiert, der aussagt aus welcher Extension der jeweilige ViewHelper kommt.
- In diesem Fall habe ich m als Namespace für meine MyExt-Extension festgelegt. Dank der Namenskonvention weiß Fluid sofort wo es die ViewHelper-Klasse zu suchen hat. Die Bezeichnung des Namespace ist frei wählbar und kann auch aus mehr als einem Zeichen bestehen.
- Der ViewHelper kann als Tag oder in der Kurzversion mit geschweiften Klammern eingesetzt werden.
Ausblick
Ich will in Kürze noch 2 oder 3 weitere Artikel zum Thema selbstgebaute ViewHelper schreiben, die sich mit den weiterführenden Möglichkeiten beschäftigen. Also schön den Feed abonnieren und oder über Twitter auf dem Laufenden bleiben.
Bildnachweis: Puzzle pieces - 1 von yann.co.nz (CC BY-NC-ND 2.0)