Willkommen auf der privaten Homepage von Johannes Jarolim, Salzburg, Österreich. Welcome to the private homepage of Johannes Jarolim, Salzburg, Austria, Europe.
Zwanzig Artikel in der

Kategorie Open-source

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 …

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 …

Typo3 – Eigene Content Elemente in Frontend Plugin ausgeben

Manchmal benötige ich den Output von Content Elementen in meinen Frontend Plugins, die es in gewünschter Form in der Tabelle tt_content nicht gibt. Wie nutze ich nun die Tabelle tt_content in meinem Plugin möglichst effizient zur Ausgabe von schon vorhandenen Typo3-Contentelementen?
Mehr lesen …

Typoscript bzw. TS-Files parsen in Typo3 Frontend Plugin

Wer schon immer mal selber TypoScript aus einem File bzw. direkt aus einem String verwenden wollte, um zB. selber Contentelemente zu rendern: Hier ein kleines Code Sample:

[code language=”php”]

$typoscript = ‘
10 = TEXT
10.value = Hallo Welt!
‘;

$parserInstance = t3lib_div::makeInstance(‘t3lib_tsparser’);
$parserInstance->parse($typoscript);

$output = $this->cObj->COBJ_ARRAY($parserInstance->setup);

[/code]

Voila: Wir haben mit ein paar Zeilen Code ein COA-Objekt instanziert, konfiguriert und den gerenderten Inhalt in der PHP-Variable $output abgelegt.

Typo3 HMENU zeigt Unterseiten nicht an

Kurztipp: Zeigt ein Typo3 HMENU bestimmte Unterseiten nicht an, einfach mal überprüfen ob die fehlenden Einträge eventuell Shortcuts sind, die allerdings keinen Shortcut eingepflegt haben… hehe.

Typo3 Contentelemente an Unterseiten vererben

Wer in einem Seitenbaum zentral Inhalte einpflegen möchte und diese automatisiert auf Unterseiten anzeigen möchte, hat mehrere Möglichkeiten. Neben Datensatzverlinkungen und TypoScript Referenzierungen finde ich die Möglichkeit der automatisierten Vererbung via KB Content Slide Plugin (kb_cont_slide) sehr elegant.

Mehr lesen …

Your own photo mosaic page with WordPress and Yet Another Photoblog

You’re using YAPB, you want to create or use your own theme and now you’re stuck on how to create a mosaic page featuring all your photos? Thanks god – Here’s a post describing exactly that topic ;-) Mehr lesen …

YAPB mentioned on bloggingbits.com

Today i spotted a blog post mentioning YAPB at bloggingbits.com – After reading the article i felt the urge to schoolmasterly correct one word: Hacking.

“nothing is stopping you from hacking WordPress to function as a photoblog”

What’s wrong with this sentence?

Mehr lesen …

 1 2 »