Es gibt die Möglichkeit, dynamisch generierte Inhaltsverzeichnisse in einem Dokument zu platzieren. Dazu pflegt man Daten wie das Label, das Level oder auch die Darstellungs-Varianten beim zugehörigen Print-Element. Diese Daten werden dann durch eine Ansicht wie "Inhaltsverzeichnis" ausgelesen und an dem Bereich im Dokument zu einem Inhaltsverzeichnis aufgebaut.
Pflege
Print-Element
Bei den Einstellungen für das Print-Element ist es möglich, den Eintrag zu aktivieren oder zu deaktivieren.
Die Varianten beziehen sich auf die Darstellung des konkreten Elements. Für eine Kapitelüberschrift und eine optische Trennung zu vorherigen Einträgen kann zum Beispiel die Variante "Überschrift" gewählt werden.
Das Level bezieht sich auf die Hierarchie der Einträge und hat zum Beispiel Auswirkung in der Ansicht "Inhaltsverzeichnis".
Ansicht Inhaltsverzeichnis
Wie beschrieben, kann die Ansicht "Inhaltsverzeichnis" verwendet werden, um ein Inhaltsverzeichnis auf Basis der gepflegten Daten beim Print-Element zu generieren.
Dabei kann auch eingestellt werden, welcher Kontext für die Generierung beachtet werden soll. "Aktueller Inhalt" sammelt beim Generieren die Einträge, welche für das aktuelle Inhaltselement gepflegt sind und baut darauf ein Inhaltsverzeichnis aus. Das kann nützlich sein, wenn man ein oder mehrere Inhaltsverzeichnisse für zum Beispiel Kapitel darstellen möchte. "Gesamtes Dokument" hingegen, kann dazu benutzt werden, um ein Inhaltsverzeichnis über das gesamte Dokument zu erzeugen. Also zum Beispiel ein Katalog-Inhaltsverzeichnis. Diese Art von Inhaltsverzeichnis funktioniert nur dann, wenn auch das Dokument generiert wird und nicht nur ein Inhalt.
Mit der Einstellung "Seinzahlformat" kann eine Formatierung der Seitenzahl gemacht werden. Ein Beispiel wäre "Seit %s", was dann zu "Seite 5" werden würde. %s wird dabei mit der Seitenzahl des Eintrags ersetzt.
"Maximales Level" kann verwendet werden, um zum Beispiel nur Einträge bis zu Level 2 darzustellen.
Erweiterbarkeit
Das Inhaltsverzeichnis ist in zwei Bereiche getrennt. Das Sammeln der Einträge über PrintDocument/Toc
und das Darstellen der Einträge über View/Toc
. Die Darstellung über View/Toc
ist dabei nicht erweiterbar, aber das Sammel über PrintDocument/Toc
hingegen über diese Events.
Event | Beschreibung |
---|---|
PrintDocument\Toc\Lib\Event\OnPopulateToc | Sammelt \Brandbox\PrintCore\PrintDocument\Toc\Lib\Struct\TocElement[] in Event\OnPopulateToc::$element anhand eines Kontextes. Weitere Informationen zum Kontext weiter unten. |
PrintDocument\Toc\Lib\Event\OnPopulateVariants | Sammelt die Varianten, welche bei den Print-Elementen im Feld Varianten auswählbar ist. Diese Varianten gelten für alle Elemente und machen keine Unterscheidung, welcher View verwendet wurde. |
Kontext
Die Eventstruktur in PrintDocument/Toc
arbeitet über einen Kontext. Dieses dient für die verschiedenen Eventimplementationen als Entscheidung, ob diese reagieren und welche Einträge gesammelt werden sollen. Für Erweiterungen kann hier ein eigener Kontext (und dann ein eigener View) auf Basis von ContextTocAbstract
abgeleitet werden oder bei den Kontexten aus der Produktimplementation eingegriffen werden.
Die Produktimplementation arbeitet mit ContextDocument
für das Sammeln aller Einträge des mitgegebenen $documents
und ContextPage
sammelt alle Einträge der mitgegebenen $page
. Die Ansicht View/Toc
entscheidet dann über den gepflegten Kontext bei den Elementeinstellungen, mit welchem ContextAbstract
\Brandbox\PrintCore\PrintDocument\Toc\Manager::get
aufgerufen wird, um eine Toc-Struktur zurückzubekommen.