Zum Inhalt

Für Entwickler

Aufbau einer Ausgabe

<kennung>/index.html      der Betrachter
<kennung>/book.json       alles, was der Betrachter über die Ausgabe weiß
<kennung>/search.json     der Text jeder Seite
<kennung>/pages/…         die Seitenbilder, mit Zufallskennung im Namen
<kennung>/thumbs/…        die Vorschaubilder
<kennung>/assets/…        Betrachter-Dateien, hineinkopiert
<kennung>/<name>.pdf      die Datei zum Herunterladen
<kennung>/teaser.json     die gekürzte Beschreibung für den Vorschaumodus

Nichts darin zeigt nach TYPO3 zurück. Das Verzeichnis auf einen anderen Server kopieren, und es läuft dort — darauf ist die ganze Konstruktion gebaut.

In book.json stehen Titel, Kennung, Sprache, Seitenzahl, Beschriftungen, Inhaltsverzeichnis, Farben, Blätterverhalten, die Liste der Bedienelemente und die Seiten selbst. Ein Zusatzpaket kann mehr hineinschreiben; der Betrachter übergeht, was er nicht kennt.

Erweiterungspunkte

Der Bau meldet sich an vier Stellen, das Backend-Modul an drei. Sie sind die Naht, an der nt_flippdf_pro hängt — und an der alles andere ebenfalls hängen kann.

Ereignis Wann Wofür
BeforeBuildEvent vor dem Lauf Angaben ändern, auch die Kennung
AfterPagesRenderedEvent Seiten gerendert, noch nichts abgeleitet Seitenbilder oder ihre Zahl ändern
BeforeBookWrittenEvent bevor book.json geschrieben wird ergänzen, was der Betrachter wissen soll
AfterBuildEvent die Ausgabe steht etwas daneben ablegen
ModuleFormEvent das Modul rendert ein Formular Abschnitte ergänzen
ModuleSaveEvent das Modul baut oder speichert Einstellungen ergänzen
ModuleColumnsEvent das Modul listet die Ausgaben Spalten ergänzen

AfterPagesRenderedEvent trägt eine Liste mit, aus welcher Seite des Quell-PDFs eine Buchseite stammt. Ohne sie liefen Text und Verweise auseinander, sobald sich die Zahl der Seiten ändert — genau das geschieht beim Teilen von Doppelseiten.

Ein Beispiel

final class MeinListener
{
    public function __invoke(BeforeBookWrittenEvent $ereignis): void
    {
        $buch = $ereignis->getBuch();
        $buch['theme']['accent'] = '#ec6602';
        $ereignis->setBuch($buch);
    }
}
services:
  Vendor\Ext\EventListener\MeinListener:
    tags:
      - name: event.listener
        event: Netthinks\NtFlippdf\Event\BeforeBookWrittenEvent

Bausteine

Für ein Zusatzpaket, das eine zweite Ausgabe daneben anlegen will, sind einige Methoden des FlipbookBuilder öffentlich: writeViewer(), swapDirectory(), clearDir(), directoryBytes() und sanitizeSlug().

Zählung

Das Basispaket zählt nicht. nt_flippdf_pro schreibt eine Adresse in book.json, der Betrachter meldet dort einen Aufruf, einen Download oder einen Klick auf einen Verweis — ohne Cookie und ohne Kennung des Lesers, tageweise zusammengefasst.