Nodes and Objects aka Knoten und Objekte

eZ publish
26.06.2014

Arbeitet man mit eZ publish, kommt man nicht umhin, sich mit den Nodes und Objects auseinanderzusetzen.

Für die Strukturierung der Inhalte haben sich die eZ Entwickler hier ein geschicktes System ausgedacht, dass auf den ersten - auch auf den zweiten - Blick recht logisch und durchdacht daher kommt.

Trotzdem kann es leicht zu Verwirrungen kommen, besonders wenn man sich am Quellcode versucht.

Zum Verständnis eine einführende Erklärung.

Objects - Objekte

Objekte enthalten die eigentlichen Daten, also den Content. Ein Objekt kann dabei eine schier unüberschaubare Fülle an Daten enthalten.
Bei jedem Speichern eines Objekts legt eZ eine Version des Inhalts an. Somit lassen sich Änderungen am Inhalt nachverfolgen und auch rückgängig machen.

Ebenfalls enthält ein Objekt die unterschiedlichen Sprachversionen.

Darüber hinaus enthält ein Objekt alle möglichen und unmöglichen Meta-Informationen, deren Sinn und Gebrauchswert sich dem einfachen Entwickler nicht unbedingt erschliessen. Oder weiss jemand aus dem Stegreit etwas mit einer "match_ingroup_id_list" anzufangen?

Nodes - Knoten

Knoten hingegen repräsentieren die Datenstruktur. Dabei enthält ein Knoten stets einen Verweis - und zwar genau einen - auf den Eltern-Knoten und auf genau ein Objekt.

Im sogenannten Content Node Tree hat jeder Knoten seinen Platz. Kann dort natürlich auch jederzeit verschoben werden.
Neben der Eltern- und Objektinformation enthält auch ein Knoten eine fülle weiterer Meta-Daten.

Template und wie man an die Daten heran kommt

In den Templates ist in der Regel wenigstens ein Node verfügbar, manchmal auch eine Liste von Nodes (etwa in einem Block-Template).
Um sich den Inhalt eines Knoten anzusehen gibt es die attribute()-Funktion:

{$node|attribute(show,[1,2,3,...])}

Dabei wird eine Tabelle mit den Attributen eines Nodes bis zu einer Tiefe von 1,2,3,... Ebenen ausgegeben. Wobei die Ausgabe von Ebenen tiefer als 3 den Server gerne mal - bedingt durch die Menge an Informationen - in einen Timeout laufen lassen.

Die wichtigen Informationen:

Die ID der aktuellen Node:

{$node.node_id}

Der Elternknoten:

{$node.parent}

Hierüber kommt man an alle relevanten Informationen des ParentNodes heran. Also nicht nur an die ID ($node.parent.node_id), sondern auch an das Intaltsobjekt ($node.parent.object) oder an weitere, übergeordnete Nodes ($node.parent.parent).

Die ID des dazugehörigen Objekts:

{$node.contentobject_id}

PHP und wie man da an die gleichen Daten heran kommt

Wer jetzt denkt, unter PHP gäbe es eine schicke Methode ein ähnlich komplexes und universalverfügbares Objekt (und damit ist ein PHP und kein eZ Objekt gemeint) zu erzeugen, der wird schnell eines Besseren belehrt. Nach einer Klasse eZNode sucht man ebenso vergebens wie nach der gewünschten Methode eZNode::fetchByID().

Hier wird getreu der Devise "Eine Aufgabe, ein Werkeug" gehandelt. Wobei die Werkzeuge offenbar je nach Bedürfnis des einzelnen Entwicklers gestaltet sind.

Hier ein paar Beispiele:

Wenn man eine NodeID hat und das Objekt dazu braucht:

$object = eZContentObject::fetchByNodeID($node_id);

Wenn man ein Object hat und den Node dazu braucht:

$node = eZContentObjectTreeNode::fetchByContentObjectID($object->ID);

Aber Achtung, auch wenn hier nach einem einzigen Node gefetched wird, liefert die Methode einen Array zurück. Daher:

$node = $node[0];

Will man jetzt das ParentObject zu einem Node, dann vielleicht so:

$parent_object = eZContentObject::fetchByNodeID($node->ParentNodeID);
comments powered by Disqus

Sozial

Brot am Haken

Brot am Haken

Auf Facebook machte vor einiger Zeit die Nachricht von einem "geschobenen Kaffee" die Runde. Einen Kaffee bestellen zwei zahlen... einer geschoben.

Bei meinem Bäcker tauchte vor kurzem ein "Brot am Haken" auf.

Was hat es also damit auf sich.

A ? B C D E F G H I J K L M N O P Q R S T U V W Z