Seit März 2011 ist das TYPO3 Extension Repository (TER) um eine Gallery Extension angewachsen. Mit der YAG Photo Gallery wollten die beiden Entwickler Daniel Lienert und Michael Knoll eine Extension schaffen, die auch anspruchsvolleren Anforderungen genügt und sich nahtlos in TYPO3 integriert.
Vorgeschichte
Vor der Entwicklung von YAG brachte eine Suche nach ‚gallery‘ im TYPO3 Extension Repository ca. 140 Suchergebnisse. Ein detaillierter Vergleich einiger dieser Extensions findet sich unter auskennbert.de – leider ist dieser schon etwas in die Jahre gekommen. Bei den verglichenen Features stellt man schnell fest, dass keine der verglichenen Extensions einen Funktionsumfang hat, wie man ihn von einer modernen Web-Photo-Gallery erwarten dürfte. Außerdem werden viele dieser Extensions schon seit Jahren nicht mehr geupdated. Nach zahlreichen Versuchen mit unterschiedlichen Plugins, die meist im Frust endeten, beschlossen die YAG-Entwickler Ende 2010 auf Basis von Extbase und Fluid eine Neuentwicklung zu wagen.
Anforderungen an eine TYPO3 Gallery
Auf Grund der gemachten Erfahrungen mit anderen Erweiterungen ergab sich eine Liste an „Must-Haves“, welche die neue Extension erfüllen sollte. Mit einer stabilen Version von Extbase und Fluid in Version 4.5 schien auch ein solides Framework für die Basis einer solchen Entwicklung vorhanden zu sein. Der Anforderungskatalog sah beim Entwurf der Gallery etwa folgendermaßen aus:
- Objektorientierte Implementierung auf Basis von Extbase und Fluid
- Gewohnte Konfiguration über TypoScript
- Flexible Gestaltung der Ausgabe durch Themes
- Backend Modul für das Gallery-Management
- Beliebige, frei konfigurierbare Auflösungen der Bilder, inklusive Wasserzeichen und Crops
- Einfache Einbindung des Plugins als Seitenelement
- Anbindung von Desktop-Bildverwaltungsprogrammen wie Lightroom und direkter Export / Import
- Einfacher Upload von Bildern über Massenupload, ZIP-Upload und Angabe von Verzeichnissen auf dem Server
- Benutzung beliebiger Lightboxes
- Integration in 3rd Party Extensions wie z.B. tt_news
Mit diesen Vorgaben entstand während einer 4-monatigen Entwicklungsphase eine erste Version der Extension, die im März 2011 veröffentlicht wurde. Da die Entwickler neben privaten Interessen keinerlei Kundenprojekte hatten, für die die Gallery entwickelt wurde, war es von Anfang an ein großes Anliegen, die Extension möglichst schnell der breiten Masse der TYPO3 Community zur Verfügung zu stellen um evtl. interessierte Mit-Entwickler zu finden. Erste Erweiterungen von „fremden“ Entwicklern zeigt, dass dieses Konzept zumindest in Teilne aufgegangen ist.
Funktionsumfang und Stand der Dinge
Jede einzelne Funktion der Extension aufzuzählen dürfte den Rahmen dieses Artikels sprengen, darum soll hier auf die wichtigsten Features eingegangen werden. Die sehr ausführliche Dokumentation gibt dem interessierten Leser eine detaillierte Übersicht. Viele Funktionen werden auch auf der Projekt-Webseite von YAG vorgeführt und können dort getestet werden.
Backend-Admin-Modul
Herzstück der Gallery dürfte das ausgefeilte Backend-Modul sein, mit dessen Hilfe alle Inhalte (Galerien, Alben, Photos) verwaltet werden. Anders als gewohnt, wird dazu nicht das „List“ Modul benutzt. Die Extension verwaltet Photos in zwei Ebenen: Gallerien und Alben. In diesen Ebenen ist auch das Backend-Modul untergliedert, so dass sich zunächst die Gallerien verwalten lassen und in einer zweiten Ebene die darin befindlichen Alben. Zuletzt werden innerhalb der Alben die darin befindlichen Photos verwaltet. Eine Ajax-basierte Oberfläche ermöglicht dabei auch Drag’n’Drop Sortierung.
Beim Hinzufügen von Bildern stehen dem Benutzer derzeit drei Möglichkeiten zur Verfügung: Upload über einen Flash-Uploader, ZIP-File Upload und Auswahl eines Verzeichnisses auf dem Server über einen JavaScript Verzeichnisbaum.
Abgerundet wird das Backend-Modul durch einen Maintenance Abschnitt mit dem sich der Bild-Cache verwalten lässt. Jedes Bild wird in YAG in mehreren, TS-konfigurierbaren Auflösungen hinterlegt. Mit Hilfe eines Hashwertes wird bestimmt, ob sich die Auflösung verändert hat und entweder eine bereits gecachte Version geladen oder die entsprechende Auflösung neu berechnet. Innerhalb des Maintenance Moduls kann der Cache sowohl geleert, als auch eine Neuberechnung angestoßen werden.
Einbinden der Gallerien als Seiteninhalt
Bei der Einbindung der Extension hat der Anwender zwei Möglichkeiten: Entweder, er verwendet ein TypoScript Template, welches die gesamte TYPO3 Installation mehr oder weniger in eine Galerie verwandelt, ein sogenanntes Standalone Template, oder wie gewohnt als Seiteninhaltselement. Bei der Einbindung als Seiteninhaltselement macht ein umfangreiches FlexForm Konfigurationsformular die Einbindung zum Kinderspiel: Man wählt die gewünschte Darstellung (Galerie / Album / einzelnes Bild), das gewünschte Theme für die Darstellung im Frontend und schließlich eine entsprechende Galerie bzw. ein Album über einen AJAX-Selektor. Das Eingeben von Verzeichnissen oder die Auswahl von Galerie-Datensätzen, wie in anderen Extensions üblich, ist nicht notwendig
Anpassung der Darstellung im Frontend
Für die Darstellung im Frontend werden sogenannte Themes verwendet. Diese bestehen aus einer TypoScript-Konfiguration zusammen mit entsprechenden Fluid-Templates und CSS Dateien. Über diese Themes lässt sich die Darstellung im Frontend von der verwendeten Lightbox über die Anordnung von Vorschaubildern bis hin zu komplizierteren Einstellungen wie Filtern an beinahe jede Anforderung anpassen. Ein Blick auf die Demo-Seite des YAG Gallery Projekts zeigt einige der Möglichkeiten. Um ein Beispiel dafür zu geben, wie „anders“ eine Galerie dabei aussehen kann, sei auf verwiesen, ein Projekt einer schweizer Internetagentur, das den Entwicklern als Referenz zur Verfügung gestellt wurde.
Die Erstellung von Themes ist deswegen so einfach, weil stets von einem Default-Theme geerbt wird, welches alle Einstellungen aufzeigt und zur Verfügung stellt. Es müssen danach nur diejenigen Einstellungen überschrieben werden, welche verändert werden sollen, was sich meist auf wenige Zeilen TypoScript beschränkt. Die Möglichkeit Fluid-Partials und -Templates nach belieben auszutauschen und einzeln in anderen Verzeichnissen zu hinterlegen kann dabei als sehr flexibles Feauter eingesetzt werden.
Ein Nebeneffekt des Theming-Konzeptes ist die Tatsache, dass sich Themes als 3rd-party Extension im TER zur Verfügung stellen lassen. Derzeit gibt es dort 4 weitere Themes die über den Extension Manager installiert werden können.
Mit dem „YAG Theme SimpleViewer“ besteht derzeit z.B. die Möglichkeit, einen Flash-Viewer für die Darstellung einzusetzen.
Integration in eigene Extensions
Die Integration von YAG in eigene Extensions ist möglich, wie eine Integration in tt_news zeigt. Dabei handelt es sich im Moment aber noch um einen „Proof-of-Concept“. Der oben vorgestellte FlexForm Selektor lässt sich mittels weniger Zeilen PHP-Codes in den TCA einer jeden Extension integrieren und sorgt dafür, dass sich ein Album bzw. eine Gallery innerhalb jeder Tabelle im Backend auswählen und speichern lässt. Mit Hilfe von Hilfsfunktionen kann anschließend die komplette HTML Ausgabe für eine Gallery oder ein Album in die Ausgabe einer eigenen Extension gerendert werden. Wie das Aussieht kann man beispielsweise hier betrachten.
Ausblick und kommende Features
Mit den kommenden Versionen hoffen die Entwickler zwei weitere Schlüsselkonzepte umsetzen zu können: Kategorien und Tags. Mit Kategorien kann die flache Hierarchie von Gallerien und Alben durchbrochen werden und es sollen beliebige Zuordnungen von Bildern zu Kategorien möglich werden. Tags werden in der derzeitigen Entwicklungsversion bereits importiert (Infos), jedoch kämpfen die Entwickler noch mit Zeichensatzproblemen.
Ein – wenn nicht DAS – Herzstück von YAG ist die Verwendung der Extension pt_extlist (Infos). Dabei werden Sammlungen von Bildern als Listen aufgefasst, die derzeit beispielsweise nach einem Album sortiert werden können. Durch das Hinzufügen weiterer Filter z.B. für Tags oder Kategorien, ist es sehr einfach, eine andere Auswahl zu erzeugen, die dann wiederum als „Bilder-Liste“ im Frontend gerendert werden kann. Mögliche Anwendungsszenarien wären z.B. ein Gesichter-Tagging wie in Facebook oder das Filtern nach Aufnahmedatum und Standort. Pt_extlist sorgt dabei automatisch für das Paging der Ergebnisseiten, die Sortierung nach beliebigen Kriterien und beherrscht ganz nebenbei auch noch den Export in andere Formate, beispielsweise RSS oder andere Formen von XML.
Derzeit existiert ein erster Prototyp eines Lightroom Exporters für YAG, dieser kann aber derzeit noch keine User-Authentifizierung und ist deswegen noch nicht veröffentlicht. Ein mitgelieferter Remote-Controller ermöglicht die Anbindung weiterer Export-Plugins.
Für eine detaillierte Liste von Feature-Requests sei auf die Forge-Seite von YAG hingewiesen. Dort sammeln auch die Entwickler ihre Vorschläge für mögliche neue Funktionen.
Fazit
Neben kleinen Fehlern, die meist schnell behoben werden konnten, war das bisher eingegangene Feedback durchwegs sehr positiv. Eine Vorstellung der Extension auf der TYPO3 Conference in San Francisco im Rahmen des pt_extlist-Workshops und auf den T3 Developer Days in Sursee löste beim Publikum beide Male auf Begeisterung aus. Die Downloadzahlen im TER lassen auf ca. 100 Installationen schließen, die regelmäßig geupdated werden. Das Konzept einer einfach zu bedienenden, anpassbaren Gallery Extension für TYPO3 scheint aufgegangen zu sein. Für die Zukunft würden sich die Entwickler wünschen, dass Agenturen, welche die Extension kommerziell einsetzen, ab und zu den FLATTR-Button auf der Projekt-Homepage benutzen, um die Entwicklung etwas einträglicher zu machen.
Dies ist ein Gast-Beitrag von Michael Knoll!