Willkommen auf der privaten Homepage von Johannes Jarolim, Salzburg, Österreich. Welcome to the private homepage of Johannes Jarolim, Salzburg, Austria, Europe.
Dreihundertfünfzig

Artikel Insgesamt

Pimcore: Viewhelper aus Plugin heraus registrieren

Lang gesucht und schließlich gefunden: Wie registriere ich eigene Viewhelper aus einem Pimcore-Plugin heraus.

Der Anwendungsfall

Wir erstellen ein Frontend-User-Authentifizierungs-Plugin, dass Pimcore nach Aktivierung (ganz vereinfacht) folgende Funktionalitäten zur Verfügung stellen soll:

  • Transparenter Schutz von Documents via Zend_Controller_Plugin
  • Ein Controller, mit dessen Hilfe der Login- und Logoutvorgang erfolgt
  • Ein ViewHelper, mit dessen Hilfe eine LoginBox dargestellt werden kann

Die ersten beiden Funktionalitäten stellen kein Problem dar – Doch wie bekomme ich den ViewHelper registriert?

Das Problem

Um eine abgeschlossene Funktionalität des Plugins zu gewährleisten, sollen die View Helper Klassen im Plugin-Verzeichnis liegen. Idealerweise sind die View Helper ohne weiteren Aufwand verwendbar, sobald das Plugin aktiviert wurde. Wir müssen daher mit Code, der ausschließlich im Plugin-Verzeichnis liegt, einen weiteren Helper-Path registrieren. Dazu müssen wir Zugriff auf die Pimcore_View-Instanz erhalten.

Da Pimcore im Grunde genommen aber keine Zend_Application, sondern eine Zend-Komponenten-nutzende Applikation ist, fallen Lösungswege wie zB. Konfigurations-Injection in die Bootstrap-Klasse flach.

Ein Lösungsweg via Controller Action Helper

Als Grundvoraussetzung haben wir das Plugin mit folgender Verzeichnisstruktur:

/plugins/FrontendUserAuth
/plugins/FrontendUserAuth/controllers
/plugins/FrontendUserAuth/install
/plugins/FrontendUserAuth/lib
/plugins/FrontendUserAuth/lib/Plugin.php
...

Die Plugin.php extended die Klassen Pimcore_API_Plugin_Abstract, welche selber ein Ancestor der Klasse Pimcore_API_Abstract ist. Wir finden hier die Methode preDispatch, welche von Pimcore vor dem Start des Display-Loops ausgeführt wird. Wir überschreiben die Methode in unserem Plugin und registrieren unseren Zend_Controller_Action_Helper, der den neuen ViewHelper-Pfad registrieren soll:

class FrontendUser_Plugin extends Pimcore_API_Plugin_Abstract implements Pimcore_API_Plugin_Interface {
  ...
  public function preDispatch() {
    Zend_Controller_Action_HelperBroker::addHelper(new FrontendUser_Controller_Action_Helper_ViewHelperInjector());
  }
  ..
}

Die neue Klasse erstellen wir hier:

/plugins/FrontendUserAuth/lib/FrontendUserAuth/Controller/Action/Helper/ViewHelperInjector.php

Zur Ausführungszeit des Controller Action Helpers bekommen wir dann mittels getActionController() den gerade ausgeführten Action Controller in die Hand: Voila, wir können global einen ViewHelperPfad registrieren, der in unserem Plugin-Directory Tree liegt:

<?php

  class FrontendUserAuth_Controller_Action_Helper_ViewHelperInjector extends Zend_Controller_Action_Helper_Abstract {

    public function preDispatch() {

      $controller = $this->getActionController();
      $view = $controller->view; /* @var $view Pimcore_View */
      $view->addHelperPath(PIMCORE_PLUGINS_PATH . '/FrontendUserAuth/lib/FrontendUserAuth/View/Helper', 'FrontendUserAuth_View_Helper_');

    }

  }

View Helper

Danach erstellen wir einen kleinen View Helper

/plugins/FrontendUserAuth/lib/FrontendUserAuth/View/Helper/LoginBox.php

welcher hier im Beispiel ganz einfach ein Loginform ausgibt:

<?php

  class FrontendUserAuth_View_Helper_LoginBox extends Zend_View_Helper_Abstract {

    public function loginBox() {
      return new FrontendUserAuth_Form_LoginForm();
    }

  }

Schlußendlich benutzen wir den ViewHelper in einem View Script der Website und freuen uns über eine neue, sauber abgekapselte, Funktionalität:

<div class="login-area">
  <?php echo $this->loginBox(); ?>
</div>

Einsatz des Zend_Paginators in sauber abstrahierten Modell-Umgebungen

Saubere Paginierung von Daten ist ein Thema, über das man als Webentwickler öfter stolpert. Als eifriger Nutzer der Komponenten des Zend Frameworks nutze ich natürlich gerne die Zend_Paginator Komponente. Diese separiert mittels Adaptern die Paginierung von der Datenquelle und stellt für mich durchaus eine der besten Implementierungen in diesem Themengebiet dar. Mehr lesen …

@font-face und Mobilbrowser

Ein kleiner Tip: Manche Mobilbrowser (Beispiel: Der Standard- Systembrowser auf dem Samsung Galaxy Tab 10.1) haben Probleme mit relativ (zur Position des Stylesheet) verlinkten Font-Dateien.

Mehr lesen …

WordPress – Inline Mediaupload

As side-product to my commercial or open source work, i often create prototypes. The WordPress plugin Inline Mediaupload is the elaborated result of a feasability study for the next generation of my plugin Yet-Another-Photoblog (YAPB). In this study i verified that the new WordPress 3.3 Media Upload Feature may be directly integrated into the normal post/page edit form.

Mehr lesen …

Pimcore – Gutes CMS mit verbesserungsbedürftiger Positionierung

Im Rahmen meiner Arbeit ist mir das CMS Pimcore unter die Finger gekommen: Dieses Open Source CMS wurde durch eine für Salzburger Verhältnisse großen Agentur namens Elements entwickelt.

Mehr lesen …

War ja klar: Battlefield3 funktioniert nach Update nicht mehr

Kaum spielen DICE/EA ein Update für Battlefield3 ein, funktioniert nix mehr. Ich kann maximal ein paar Sekunden in einen Multiplayer Server einsteigen: Spielabsturz.

Mehr lesen …

Extreme slow ImageMagick on VPS with ubuntu

Recently, i had to update my virtual private server at hosteurope (one of the big hosting players in germany)  and got a machine with ubuntu release 10.04 and plesk 10.4.4 installed.

Mehr lesen …

Internet Explorer, Cross-Domain-iFrames and unusable Select Boxes

Microsoft has done it again: Just noticed that some customers aren’t able to open select boxes in some iFrames when using IE7.

After some investigation and prototyping i came up with the following:

Mehr lesen …

Office 2010 Trial-Sackgasse

Wie das Leben so spielt bin ich kürzlich in eine böse Microsoft-Office Falle ohne Happy End gelaufen: Ein guter Freund muß am nächsten Tag eine Projektpräsentation halten und benötigt dazu Microsoft Visio 2010. “Kein Problem“, denkt er sich: “Heute Abend installiere ich eine Testversion und nach der Präsentation kaufe ich die Vollversion: Visio braucht man ohnehin.

Mehr lesen …

Ersatz für Aktenkoffer unter Windows 7

Man mag es kaum glauben, aber es ist teilweise relativ schwer, einen Ersatz für simple Microsoft Tools aus dem Jahre Schnee zu finden. Ein sehr gutes Beispiel: Der Microsoft Windows Aktenkoffer: Den gibt es schon seit Windows 98 – Nach jahrelanger Unterstützung schaut es mit dem Aktenkoffer nach dem Umstieg auf Windows 7 nicht mehr so lässig aus.

Mehr lesen …

 « 1 2 3 4 5 6 ... 34 35 »