ZOO - CCK Komponente für Joomla!

Geschrieben von Tom   
Samstag, 4. April 2009
Beitragsinhalt
ZOO - CCK Komponente für Joomla!
ZOO Konzept
ZOO Struktur und Events
ZOO Templates und Overrides
ZOO Elemente
ZOO als CCK
ZOO für Entwickler
ZOO Fazit und Kommentare

Die Content Struktur von ZOO

Anders als bei Joomla sind bei ZOO beliebig verschachtelbare Kategorien machbar. Man ist also nicht mehr an das limitierte Bereich/Kategorie Prinzip gebunden, sondern kann wenn nötig endlose Baumstrukturen definieren. Die erste Ebene dieser verschachtelten Kategorien heisst bei ZOO Katalog und ist nichts anderes, als eine Root-Kategorie. Die Unterscheidung in Kataloge und sich darin befindende Kategorien hilft beim Templating, ermöglicht ein paar spezielle Funktionalitäten und stimmt irgendwie sentimental, wenn man an die guten alten Bereich/Kategorie Zeiten denkt.

Ich fand es ein wenig schade, dass bei der Realisierung der Kategoriestruktur auf Datenbankebene nicht das Nested Sets-Modell genutzt wurde, sondern ein gängiges Adjacency List Model. Wie mir mitgeteilt wurde, haben die Entwickler in einem Testszenario 10.000 Artikel und 1.000 verschachtelte Kategorien ohne Performanceeinbrüche am Laufen gehabt, was wohl am eingebauten Caching lag. Inwieweit sich dies bei der redaktionellen Pflege von hundertausenden von Artikeln im Backend ebenfalls auswirkt, bleibt abzuwarten. Wir haben bei der Realisierung von Kinotraum.de, welches eben solche Artikelmengen beinhaltet, unsere Komponente extrem optimieren müssen, um bei steigendem Datenumfang eine stabile Backendperformance zu gewährleisten.

ZOO Kategorien Selbstredend, dass sich in diesen Katalog/Kategorie-Strukturen ZOO-Artikel beliebigen Typs (ZOO Artikeltyps) befinden können. Sie können also (sinnloser Weise) durchaus Artikel des Artikeltyps "Download" in die Kategorie "Ferien auf Helgoland" einordnen. Die Frage ist, was im Frontend dabei rauskommt. Dies nämlich hängt maßgeblich von den zugeordneten Templates bzw. Overrides ab. Und hier hat ZOO einiges zu bieten.

Event Handling von ZOO

Jeder kennt die nützlichen Plugins, welche man bei Joomla! installieren kann, um bestimmte Ergebnisse zu erzielen. Jede Joomla! Installation beinhaltet z. B. das "E-Mail Verschleierungs"-Plugin, welches eine im Artikeltext vorhandede E-Mail-Adresse so umwandelt, dass Spambots sich schwer tun, diese zu erkennen. Solche Plugins gibt es wie Sand am Meer und zu unglaublich vielen Zwecken. Diese können sich an verschiedene Events, welche bei der Erzeugung einer Joomla! Instanz ausgelöst werden, "dranhängen", um Aufgaben durchzuführen. Klare Sache, dass auch ZOO die Event-Architektur von Joomla! nutzt. Allerdings gibt es hier ein paar Sachen zu beachten, wie mir bei der Umsetzung eines Projekts auf ZOO-Basis aufgefallen ist.

ZOO definiert eine eigene Plugin-Gruppe names...ZOO, wer hätte das gedacht. Wir wollten in einem ZOO-Artikel durch ein eigens entwickeltes Content-Plugin einige Operationen an dem Artikeltext vornehmen. Das klappte auch auf Anhieb, was aber daran lag, dass ZOO bei Elementen des Typs Textarea (nicht Text!) die Option gegeben wird, Joomla Content Plugins auszuführen.
Ein Problem gab es erst, als wir auf die verschiedenen Werte des Artikels zugreifen wollten. ZOO übergibt den jeweiligen Joomla! Content Plugins nur den Text des Elements. Möchten man aber (wieso auch immer) auf den Titel des Artikels zugreifen, geht das nicht wie bei Joomla! gewohnt über $article->title, sondern etwas umständlicher. Auch werden Content Plugins wie gesagt nur bei Elementen des Typs Textarea ausgeführt. Das zu ändern, ist eine Kleinigkeit, indem man folgende Zeilen in die Render-Methode des entsprechenden Elements studiert: 

// trigger joomla content plugins
if ($this->jplugins) {
    $this->value = ElementTextarea::triggerContentPlugins($this->value);
} 

Was also tun, wenn man den gesamten ZOO-Artikel etwas umfassender mit einem Plugin, Event-basiert beeinflussen will? Na klar, wir müssen ein ZOO-Event nutzen! ZOO-Plugins wird nämlich nicht nur der gesamte Artikel mit allen Feldern übergeben, sondern auch der aktuelle View. Das sollte für die meisten Anwendungsfälle reichen.

Die Events, die wir entdeckt haben, und an die man sich rannhängen kann, heissen

  • onPrepareDisplayItem
  • onBeforeDisplayItem
  • onAfterDisplayItem
  • onPrepareDisplayCategory
  • onBeforeDisplayCategory
  • onAfterDisplayCategory


 

B01 realisiert zeitgenössische Online-Kommunikationsmittel.
Wir sind spezialisiert auf OSCMS und unterstützen unsere Kunden vom Konzept bis zum Launch mit Erfahrung und exklusiven Komponenten zur Umsetzung von Communitys, Shops, Portalen und Webseiten.

B01 Kunden

Unsere Ideen, unsere Produkte, unsere Kunden.

B01 empfiehlt:

ZOO Content Construktion Kit

ZOO CCK

Virtuemart Shopsystem

E-Commerce

Joomla SEO

SEO

Joomla Content Editor

Content Editor

Joomla Social Networking

JomSocial