Als Entwickler kann man es natürlich kaum erwarten, die zahlreichen Features von Symfony 2 in eZ Publish 5 zu verwenden. Nach dem ersten erfolgreichen “Hello World” gehen wir nun einen Schritt weiter: Wir werden eine eigene Sandbox-Webseite mithilfe eines eigenen Symfony 2 Bundles erstellen. Damit wollen wir zeigen, wie man Symfony 2 zum ersten Mal wirklich “spürbar” in eZ Publish 5 verwenden kann. Sämtliche Dateien und Verzeichnisse dieses “Hands On”-Artikels stehen hier zum Download bereit.

Zu unserer Sandbox-Webseite sollen Stylesheets, Javascript-Code, jQuery, usw. gehören, so dass wir uns in einer möglichst repräsentativen Umgebung bewegen können. Zudem liegt es mir persönlich mehr, wenn ich an einem Thema arbeite, nicht ständig einen Haufen unformatiertes Times New Roman vor mir zu sehen :-)
Eines vorweg: Wir erstellen unser Symfony 2 Bundle manuell. Da wir genau verstehen wollen, welcher Code für ein Bundle notwendig ist, verzichten wir auf die Möglichkeit von Symfony 2 ein Bundle automatisch per CLI zu erstellen.

Zu einem neuen Bundle gehören mindestens das Verzeichnis Controller und das Verzeichnis Ressources, welches drei Unterverzeichnisse beinhaltet: config, public und views. Wir beschränken unsere Erklärungen hier auf die elementarsten Ausschnitte aus den jeweiligen Dateien:

Nachdem die Verzeichnisstruktur korrekt angelegt ist, müssten wir schon mit minimalsten Mitteln eine Seite generieren können, wie es bei einem MVC-Framework wie Symfony 2 üblich ist: Eine Route, ein Controller mit einer Action, auf welche auf die Route verweist und ein Template für die Ausgabe des View. Die Dateien werden wie in der Abbildung oben angelegt. Natürlich sind noch weitere Konfigurationsangaben nötig um alles für das neue Bundle vorzubereiten. Die Dokumentation des Symfony 2-Framework empfiehlt die Routen zu einem spezifischen Bundle in einer separaten Datei zu konfigurieren. Das globale Routing müssen wir demnach um einen entsprechenden Verweis erweitern:

ezpublish5/app/config/routing.yml

In der angelegten Datei routing.yml innerhalb des Bundles definieren wir eine einfache Route mit einer ID, die ein Inhaltsobjekt aus unserer Installation von eZ Publish identifiziert:

ezpublish5/src/Ymc/SandboxBundle/Resources/config/routing.yml

Dann müssen wir unsere neue Bundle-Klasse im Kernel von eZ Publish 5 registrieren:

ezpublish5/app/EzPublishKernel.php

Damit überhaupt Inhaltsobjekte vorhanden sind, müssen diese wie gewohnt über die Admin-Oberfläche von eZ Publish angelegt werden. Leider ist im Code von eZ Publish 5 noch keine Spur einer solchen Oberfläche zu sehen. Da es aber nur um das Befüllen der dahinter liegenden Datenbank geht, sollte dies auch mit dem Legacy-System möglich sein.Vorrausgesetzt man hat bei der Installation von eZ Publish 4 “plain_site” gewählt, gelangt man mit der URL
…/ezpublish_legacy/index.php/plain_site_admin/
zur Admin-Oberfläche von eZ Publish 4. Dort kann man an einem kleinen Hinweis erkennen, dass man sich innerhalb des Legacy-Systems zu eZ Publish 5 befindet – die auf dem Dashboard hervorgehobene Versionsnummer: 5.0.0alpha1
Nach dem Anlegen eines neuen Inhaltobjekts vom Typ “folder” kann es weiter gehen: Im Controller definieren wir eine Action namens sandbox, auf welche das Routing verweist. In der Action wird einfach das zu benutzende Template angegeben und ein konkreter Wert für eine beliebige Variable – in unserem Fall der Template-Platzhalter content – gesetzt.

ezpublish5/src/Ymc/SandboxBundle/Controller/SandboxController.php

Im neu angelegten View ezcontent.html.twig kommen wir nun erstmals mit Twig in Kontakt, eine eigene Template-Engine welche von den Machern von Symfony 2 entwickelt wurde. Im Zuge von eZ Publish 5 gibt eZ Systems seine eigene Template-Engine auf und setzt fortan auf Twig. Der Aufbau der Syntax und die gegebenen Möglichkeiten, wie etwa Kontrollstrukturen, können in derDokumentation zu Twig nachgelesen werden.

In unserem konstruierten Szenario möchten wir einfach nur die vom Controller gesetzte Variable content ausgeben. Im einfachsten Fall greifen wir hierfür auf den unversionierten Informationsteil des übergebenen Inhaltsobjekts contentInfo zurück indem wir dessen Attribute, z.B. name und id, verwenden. In der Twig-Block-Schreibweise sieht das ganze dann so aus:

ezpublish5/src/Ymc/SandboxBundle/Resources/views/ezcontent.html.twig

Nun haben wir alles zusammen, was nötig ist um unsere Seite aufzurufen. Mit
…/ezpublish5/web/index.php/sandbox/1
sollte das möglich sein. Doch beim Aufruf der Seite scheint etwas nicht zu funktionieren: Es erscheint ein Javascript-Alert “An error occurred while loading the web debug toolbar (500: Internal Server Error)…”. Die Profiler-Toolbar kann nicht geladen werden und auch sämtliche Code-Angaben fehlen. Stattdessen bekommen wir eine 404-Response.

Da war doch was… Um ein frisches Bundle verwendbar zu machen muss man noch die nicht-öffentlichen Pfadangaben verlinken. Das erreicht man per CLI:

# php app/console assets:install –symlink web

Jetzt sind sämtliche Links und Verzeichnisse für die benötigten Sourcen vorhanden. Im Praxiseinsatz empfiehlt es sich, neue Symfony 2 Bundles generell per CLI aufzusetzen. Damit können Typo- und Strukturfehler vermieden werden und man spart sich einen Haufen manuelle Arbeit, wie man hier sieht.

Auf unserer Seite erscheint nun eine relativ unspektakuläre Ausgabe:
Object ID : #1
Object Name : eZ Publish5

Um unsere Sandbox zu komplettieren, müssen wir noch ein Seiten-Layout hinzufügen, in das die Inhaltsinformationen eingebettet werden. Hierzu benötigen wir ein Markup-Grundgerüst. Im einfachsten Fall könnte das – ohne jegliche Stylesheets – folgendermassen aufgebaut sein:

Zu Demonstrationszwecken wollen wir aber lieber eines der zahllosen im Web frei verfügbaren Templates verwenden – in diesem Fall z.B. dieses Thema. Hier wird der Inhalt aus unserem Template ezcontent.html.twig beim Rendering durch die Symfony 2-Unterstützung von Twig eingefügt. Ein Stylesheet wird über ein so genanntes Asset eingebunden:

Mit ein bisschen jQuery, einem Seitentitel und einer Zeichensatzangabe haben wir dann schon ein ganz ansehnliches Gerüst für unsere Sandbox. Der Stylesheet-Pfad bundles/ymcsandbox/css sollte in dem dem Bundle zugehörigen public-Verzeichnis liegen – im Dateisystem also unter src/Ymc/SandboxBundle/Resources/public/css/

Etwas erweitert mit zusätzlichen Markup für die Stylesheets sieht das ganze dann so aus. Damit das Layout noch greift, binden wir es in unserem Content-Template mit der Angabe extends ein:

/ezpublish5/src/Ymc/SandboxBundle/Resources/views/pagelayout.html.twig

Nun haben wir es geschafft: Eine vollständige Webseite basierend auf einem eigenen Symfony 2 Bundle, die uns als Sandbox dient.

Das war ein weiterer Blogartikel in unserer “Hands On”-Serie zu eZ Publish 5. Wir freuen uns über Kommentare und Ideen für weitere Artikel. Im nächsten Artikel werden wir uns damit beschäftigen, wie man am besten ein Modul aus eZ Publish 4 nach eZ Publish 5 migrieren könnte.

0 Kommentare

Einen Kommentar abschicken

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *