<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:media="http://search.yahoo.com/mrss/">

<channel>
	<title>johannes.jarolim.com &#187; view_helper</title>
	<atom:link href="http://johannes.jarolim.com/blog/tag/view_helper/feed/" rel="self" type="application/rss+xml" />
	<link>http://johannes.jarolim.com/blog</link>
	<description>Willkommen auf der privaten Homepage von Johannes Jarolim, Salzburg, Österreich / Welcome to the private homepage of Johannes Jarolim, Salzburg, Austria, Europe.</description>
	<lastBuildDate>Tue, 16 Apr 2013 15:06:05 +0000</lastBuildDate>
	<language>de-DE</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
	<atom:link rel="next" href="http://johannes.jarolim.com/blog/tag/view_helper/feed/?page=2" />

		<item>
		<title>Pimcore: Viewhelper aus Plugin heraus registrieren</title>
		<link>http://johannes.jarolim.com/blog/2012/04/03/pimcore-viewhelper-aus-plugin-heraus-registrieren/</link>
		<comments>http://johannes.jarolim.com/blog/2012/04/03/pimcore-viewhelper-aus-plugin-heraus-registrieren/#comments</comments>
		<pubDate>Tue, 03 Apr 2012 13:39:53 +0000</pubDate>
		<dc:creator>Johannes</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Pimcore]]></category>
		<category><![CDATA[view helper]]></category>
		<category><![CDATA[view_helper]]></category>

		<guid isPermaLink="false">http://johannes.jarolim.com/blog/?p=1274</guid>
		<description><![CDATA[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 [...]]]></description>
				<content:encoded><![CDATA[<p>Lang gesucht und schließlich gefunden: Wie registriere ich eigene Viewhelper aus einem Pimcore-Plugin heraus.</p>
<h2>Der Anwendungsfall</h2>
<p>Wir erstellen ein Frontend-User-Authentifizierungs-Plugin, dass Pimcore nach Aktivierung (ganz vereinfacht) folgende Funktionalitäten zur Verfügung stellen soll:</p>
<ul>
<li>Transparenter Schutz von Documents via Zend_Controller_Plugin</li>
<li>Ein Controller, mit dessen Hilfe der Login- und Logoutvorgang erfolgt</li>
<li>Ein ViewHelper, mit dessen Hilfe eine LoginBox dargestellt werden kann</li>
</ul>
<p>Die ersten beiden Funktionalitäten stellen kein Problem dar &#8211; Doch wie bekomme ich den ViewHelper registriert?</p>
<h2>Das Problem</h2>
<p>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.</p>
<p>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.</p>
<h2>Ein Lösungsweg via Controller Action Helper</h2>
<p>Als Grundvoraussetzung haben wir das Plugin mit folgender Verzeichnisstruktur:</p>
<pre>/plugins/FrontendUserAuth
/plugins/FrontendUserAuth/controllers
/plugins/FrontendUserAuth/install
/plugins/FrontendUserAuth/lib
/plugins/FrontendUserAuth/lib/Plugin.php
...</pre>
<p>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:</p>
<pre>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());
  }
  ..
}</pre>
<p>Die neue Klasse erstellen wir hier:</p>
<pre>/plugins/FrontendUserAuth/lib/FrontendUserAuth/Controller/Action/Helper/ViewHelperInjector.php</pre>
<p>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:</p>
<pre>&lt;?php

  class FrontendUserAuth_Controller_Action_Helper_ViewHelperInjector extends Zend_Controller_Action_Helper_Abstract {

    public function preDispatch() {

      $controller = $this-&gt;getActionController();
      $view = $controller-&gt;view; /* @var $view Pimcore_View */
      $view-&gt;addHelperPath(PIMCORE_PLUGINS_PATH . '/FrontendUserAuth/lib/FrontendUserAuth/View/Helper', 'FrontendUserAuth_View_Helper_');

    }

  }</pre>
<h2>View Helper</h2>
<p>Danach erstellen wir einen kleinen View Helper</p>
<pre>/plugins/FrontendUserAuth/lib/FrontendUserAuth/View/Helper/LoginBox.php</pre>
<p>welcher hier im Beispiel ganz einfach ein Loginform ausgibt:</p>
<pre>&lt;?php

  class FrontendUserAuth_View_Helper_LoginBox extends Zend_View_Helper_Abstract {

    public function loginBox() {
      return new FrontendUserAuth_Form_LoginForm();
    }

  }</pre>
<p>Schlußendlich benutzen wir den ViewHelper in einem View Script der Website und freuen uns über eine neue, sauber abgekapselte, Funktionalität:</p>
<pre>&lt;div class="login-area"&gt;
  &lt;?php echo $this-&gt;loginBox(); ?&gt;
&lt;/div&gt;</pre>
]]></content:encoded>
			<wfw:commentRss>http://johannes.jarolim.com/blog/2012/04/03/pimcore-viewhelper-aus-plugin-heraus-registrieren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
