Objekte, Knoten und Platzierungen
Diese Seite richtet sich an Entwickler, die von Systemen kommen, in denen eine Seite ihr Platz im Menü ist. In Exponential sind der Inhalt und sein Platz zwei verschiedene Dinge: Das Objekt enthält den Inhalt, seine Knoten (Platzierungen) setzen ihn in den Baum. Wer weiß, was er in einem Template oder in PHP gerade in der Hand hat, vermeidet die meisten Anfängerfehler.
Inhalt
- Objekt und Knoten nebeneinander
- Der Hauptknoten und weitere Platzierungen
- Der Baum: Pfade, Tiefe und die festen Spitzen
- Sortierung der Unterelemente
- Verborgen und unsichtbar
- Verschieben, Kopieren und Entfernen
- Welche ID wo
- In Templates und in PHP
Objekt und Knoten nebeneinander
| Inhaltsobjekt | Knoten (Platzierung) | |
|---|---|---|
| Enthält | Versionen, Übersetzungen, Attributwerte, Eigentümer, Sektion, Zustände | einen Platz im Baum: übergeordneter Knoten, Pfad, Tiefe, Priorität, Sichtbarkeit |
| Tabelle | ezcontentobject (plus Versionen und Attribute) | ezcontentobject_tree |
| PHP-Klasse | eZContentObject | eZContentObjectTreeNode |
| Wie viele | eins | einer oder mehrere je veröffentlichtem Objekt |
| Hat eine URL | über seine Knoten | ja: jeder Knoten hat einen URL-Alias |
Eine Seitenansicht auf der Website ist immer die Ansicht eines Knotens: /content/view/full/<node id> oder der
URL-Alias des Knotens. Der Knoten liefert Ihnen sein Objekt ($node.object), und das Objekt liefert Ihnen seine Knoten
(assigned_nodes, main_node).
Der Hauptknoten und weitere Platzierungen
Ein Objekt kann in mehreren Teilen des Baums platziert werden: ein Produkt unter zwei Kategorien, eine Person unter
der Teamseite und der Kontaktseite. Jeder Platz ist ein Knoten; einer davon ist der Hauptknoten (main_node_id).
Redakteure fügen Platzierungen in der Administration auf der Registerkarte Orte des Objekts hinzu.
- Alle Knoten zeigen dasselbe Objekt, eine Bearbeitung erscheint also überall zugleich.
- Der Hauptknoten liefert die kanonische Adresse. Verlinken Sie mit dem Hauptknoten und setzen Sie damit kanonische
URLs:
$node.object.main_node.url_aliasin einem Template (Knoten, Objekte und Attribute). - Fetches geben Knoten zurück; eine Liste, die zwei Platzierungen desselben Objekts umfasst, liefert es zweimal,
wenn Sie nicht
main_node_onlyübergeben (Inhalte in Templates abrufen).
Verwenden Sie weitere Platzierungen dort, wo der Inhalt wirklich an zwei Stellen hingehört. Für Kästen mit weiterführender Lektüre verwenden Sie stattdessen Objektrelationen (Relationen und Einbettungen).
Der Baum: Pfade, Tiefe und die festen Spitzen
Jeder Knoten speichert seinen path_string (die Knoten-IDs von oben, zum Beispiel /1/2/61/74/) und seine depth.
Damit werden Fetches und Berechtigungen auf Teilbäumen schnell. Der mitgelieferte Baum hat feste Spitzen, festgelegt
in settings/content.ini [NodeSettings]:
| Einstellung | Knoten | Enthält |
|---|---|---|
RootNode | 2 | die Inhalte der Website |
UserRootNode | 5 | Benutzer und Benutzergruppen |
MediaRootNode | 43 | die Medienbibliothek |
SetupRootNode | 48 | Setup-Objekte |
DesignRootNode | 58 | Design-Objekte |
Ein Siteaccess kann seine Website tiefer im Baum beginnen lassen; so teilen sich mehrere Websites einen Baum (Siteaccesses und Multisite).
Sortierung der Unterelemente
Jeder Knoten speichert, wie seine Unterelemente sortiert werden (sort_field, sort_order); neue Knoten übernehmen
den Standard ihrer Klasse. Die Sortierfelder sind Konstanten von eZContentObjectTreeNode (SORT_FIELD_PATH,
PUBLISHED, MODIFIED, SECTION, DEPTH, CLASS_IDENTIFIER, CLASS_NAME, PRIORITY, NAME,
MODIFIED_SUBNODE, NODE_ID, CONTENTOBJECT_ID, VISIBILITY). Bei Sortierung nach Priorität legen Redakteure die
Reihenfolge in der Liste der Unterelemente von Hand fest. In einem Template liefert $node.sort_array die eigene
Reihenfolge des Knotens, die Sie an einen Fetch übergeben, sodass Ihr Menü der Wahl der Redakteure folgt.
Verborgen und unsichtbar
| Kennzeichen | Bedeutung |
|---|---|
is_hidden | ein Redakteur hat diesen Knoten verborgen |
is_invisible | dieser Knoten ist verborgen oder liegt unter einem verborgenen Knoten |
Besucher sehen unsichtbare Knoten nicht, solange site.ini [SiteAccessSettings] ShowHiddenNodes=false gilt, der
mitgelieferte Wert; der Administrations-Siteaccess zeigt sie meist an. Verbergen ist keine Berechtigung: Ein
verborgener Knoten bleibt für jeden lesbar, der content/read auf einem Siteaccess hat, der verborgene Knoten zeigt.
Für echte Zugriffskontrolle verwenden Sie Sektionen und Rollen
(Sektionen, Rollen und Richtlinien).
Verschieben, Kopieren und Entfernen
- Verschieben ändert den übergeordneten Knoten eines Knotens; die URL-Aliase des Teilbaums folgen, und die alten Adressen leiten weiterhin weiter (URL-Aliase und Routing).
- Kopieren erzeugt ein neues Objekt (mit neuer Objekt-ID) und einen Knoten dafür; ein Teilbaum lässt sich mit
bin/php/ezsubtreecopy.phpkopieren. - Entfernen eines Knotens: Hat das Objekt weitere Platzierungen, verschwindet nur diese Platzierung. War es die letzte, kommt das Objekt standardmäßig in den Papierkorb und lässt sich von dort wiederherstellen (Veröffentlichen, Versionen und der Papierkorb).
Verwenden Sie aus PHP die Kernel-Operationen, damit Caches, Suche und URL-Aliase folgen: siehe Inhalte aus PHP.
Welche ID wo
| Sie brauchen | Verwenden Sie | Warum |
|---|---|---|
| Einen Link in einem Template | $node.url_alias (Hauptknoten für kanonische Links) | Adressen folgen Verschiebungen und Umbenennungen |
| Einen festen Startpunkt in Einstellungen | eine Knoten-ID in einer Installation oder eine eigene Einstellung, gelesen mit ezini | IDs unterscheiden sich zwischen Installationen |
| Einen Verweis aus Code oder einem Import | die Remote-ID des Objekts | stabil und gleich über Exporte und erneute Importe hinweg |
| Eine Relation zwischen Objekten | Objekt-IDs (der Datentyp speichert sie) | Relationen zeigen auf Objekte, nicht auf Plätze |
Eine Knoten-ID finden zeigt, wo Sie IDs in der Administration ablesen.
In Templates und in PHP
In einem Template für eine Knotenansicht ist der aktuelle Knoten $node:
<h1>$node.name|wash()</h1>
<p>Object $node.contentobject_id, node $node.node_id, depth $node.depth</p>
if $node.object.assigned_nodes|count()|gt( 1 )
<link rel="canonical" href=$node.object.main_node.url_alias|ezurl( , 'full' ) />
/ifIn PHP:
$node = eZContentObjectTreeNode::fetch( 2 ); // a node by node ID
$object = $node->object(); // its object
$main = $object->mainNode(); // the main node
$all = $object->assignedNodes(); // every location
$byRemote = eZContentObject::fetchByRemoteID( 'expsite-about-page' );eZContentObjectTreeNode und eZContentObject im Buch listen die Methoden auf.
Verwandte Seiten
- Das Inhaltsmodell
- Referenz der Knotenattribute
- Inhalte abbilden: Platzierungen
- Freie Dokumentation: Diese Seite darf unter der GNU FDL 1.3 frei kopiert, übersetzt und verbessert werden.
Werden Sie Exponential-Partner
Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.