Vom: 08.03.2012

Eigene Viewhelper durch Plugins zur Verfügung stellen

Pimcore bietet Entwicklern die Möglichkeit, eigene View Helfer zu definieren und in Controllern und Views zu verwenden. Auch in Plugins ist dies mit ein paar einfachen Schritten möglich. Das Plugin selbst kann keine Viewhelper registrieren, das muss in einem Controller geschehen. Zu Demonstrationszwecken verwenden wir das fiktive "Bounce-Plugin" Entweder man macht dies in dem Controller, der den Viewhelper braucht (auch ein Controller des Plugins ist möglich), oder global in Website_Controller_Action unter /website/lib/Website/Controller/Action.php in der init()-Methode:

  public function init() {
    parent::init();
    $this->view->addHelperPath(PIMCORE_PLUGINS_PATH . "/Bounceplugin/lib/Bounceplugin/View/Helper", "Bounceplugin_View_Helper_");
  }

Hier werden nun gleich zwei "magische" Prozesse vom Zend Framework vorbereitet, zum einen wird im Autoloader der Namespace Bounceplugin_View_Helper_ mit dem zugehörigen Pfad registriert, damit PHP beim Casten eines Objekts des betreffenden Viewhelpers die benötigte Klassendefinition laden kann. Als Beispiel verwenden wir hier einen "Bounce"-Helper, der nichts anderes macht als den übergebenen Parameter zurückzugeben. Der Viewhelper muss nun in /Bounceplugin/lib/Bounceplugin/View/Helper untergebracht werden, das File muss dabei "Bounce.php" heissen - der große Anfangsbuchstabe ist wichtig da der Autoloader das so erwartet. Der Klassenname setzt sich nun zusammen aus dem zuvor registrierten Namespace und dem Namen der gewünschten Methode, hier "bounce". Der Methodenname muss, im Gegensatz zum Klassennamen, klein geschrieben werden.

class Bounceplugin_View_Helper_Bounce extends Zend_View_Helper_Abstract {

  public function bounce($input) {
    return $input;
  }
}

Das Casten selbst geschieht nun automatisch, sobald der Viewhelper in einer View benutzt wird. Dies geschieht nun durch einfaches Aufrufen der Methode im $this-Kontext:

	$this->bounce("Das kommt wieder");