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)
