Proof of Concept: Flyer Generator

Es ist ein interessantes Projekt auf das mich eine E-Mail aus der ChurchTools Community gebracht hat: ein automatisierter Flyer Generator. Alle Daten liegen ja bereits in ChurchTools und wenn diese dann über ein Template in eine grafische Form gebracht werden könnten, würde das viel aktuell manuelle Arbeit vereinfachen.

Ich kann mich daran erinnern, dass wir das Thema bei uns in der Gemeinde auch einmal vor einigen Jahren diskutiert hatten. Hier war die Idee, dass eine Adobe Photoshop Datei als Template fungiert. Das Proprietäre Format von Photoshop war damals glaube ich der Grund für das Scheitern.

Nichts desto trotz. Ein Proof of Concept der Idee sollte auf jeden Fall drin sein:

Ein erster Proof of Concept Entwurf

Die Herausforderung nehme ich an. Zunächst baue ich einen Prototyp, der zeigen soll welche einfachen Möglichkeiten es gibt und welche Herausforderungen auf dem Weg der Umsetzung waren. Als Grundlage nehme ich mir unser ChruchTools CLI Tool. Dabei handelt es sich um eine sehr simpel gestaltete Kommandozeilenanwendung. Dadurch spare ich mir schonmal sehr viel Aufwand, weil kein User Interface entwickelt werden muss. Wer sich für den Code interessiert kann diesen in folgendem Branch auschecken:

https://github.com/5pm-HDH/churchtools-cli/tree/proof-of-concept-flyer-template

Damit kommen wir zur ersten Frage.

1. Woher sollen die Daten kommen?

Grundsätzlich kann man sich viele unterschiedliche Szenarien vorstellen für die ein Flyer benötigt wird. Zum Beispiel der Flyer für eine Gruppe. Wenn z.B. die Freizeitanmeldung über eine Gruppe erfolgt und ich einen Freizeitflyer erstellen möchte. Oder aber man möchte Gottesdienste (Events) bewerben. Für diese Datenquelle habe ich mich hier beim Proof of Concept entschieden.

Die Daten, die aus dem Event gezogen werden können sind relativ überschaubar. In meinem Fall werde ich den Titel, die Beschreibung und das Datum verwenden.

Klar, denkbar ist auch, dass der Prediger oder andere Personen, die mit einem Dienst eingetragen sind mit verwendet werden. Aber das hier wird ja nur ein Prototyp.

Die Daten sind damit da, nur ist dann die Frage wohin damit? Und schließlich Frage 2:

2. Was eignet sich als Flyer Template?

Vermutlich gibt es viele und deutlich robustere Formate, aber weil ich beruflich gerade erst damit gearbeitet habe setzte ich an dieser Stelle einfach auf Word-Dateien. Die Inhalte lassen sich dann mit PHPWord und dem TemplateProcessor einfach durch Texte ersetzen.

Also schnell mal einen kleinen Flyer mit den drei Werten in Word zusammengesteckt:

Das Template ist bereit und damit kommen wir zur Implementierung und der Frage:

3. Wie sieht der Code aus?

Der ChurchTools CLI Code ist recht simpel aufgebaut. Für jeden Befehl gibt es eine eigene Klasse mit einer Methode „execute“. Die Befehl Argumente und Optionen werden über den Input-Parameter geladen und über den Output-Parameter wird Text auf der Kommandozeile ausgegeben:

protected function execute(InputInterface $input, OutputInterface $output)
{
    $eventId = (int)$input->getArgument(self::EVENT_ID);
    $templateName = $input->getArgument(self::TEMPLATE_NAME);
    $output->writeln("Load Template file: " . $templateName);
    $event = EventRequest::findOrFail($eventId);
    $output->writeln("Loaded Event: " . $event->getName() . '(#' . $event->getId() .')');
    $templateProcessor = new TemplateProcessor($templateName);
    foreach($event->toData() as $key => $value){
        if(is_string($value)){
            $templateProcessor->setValue($key, $value);
            $output->writeln("\ttry to replace " . $key . " with value: " . $value);
        }
    }
    $filePath = $this->createWordPath("flyer-export");
    $templateProcessor->saveAs($filePath);
    $output->writeln("Exported flyer in word to " . $filePath);
    return 1;
}

Die Event ID und der Name des Template-Docx-Datei werden als Argumente ausgelesen. Die Event-Daten werden über den PHP ChurchTools API Wrapper ausgelesen (Zeile 8). Ein Template Processor wird anhand des Word-Templates erstellt (Zeile 11). Alle im Event verfügbaren String-Werte werden dann im Template hinzugefügt (Zeile 13 – 18) und schließlich wird die Word-Datei erstellt in Zeile 21.

4. Und das Resultat?

Wenn ich das ganze auf der Kommandozeile (CMD) ausführen, sieht das so aus…

…und resultiert in meinem fertigen Flyer:

Der ganze Prototyp hat mich ungefähr 1,5 Stunden Arbeit gekostet.

Es bleiben einige Herausforderungen

Der Proof of Concept zeigt, dass mit wenig Aufwand auf jeden Fall schnell eine erster Erfolg möglich ist. Das ganze Projekt allerdings für den produktiven Einsatz zu entwickeln ist eine größere Herausforderung, die sich aus meiner Sicht in folgende Aspekte aufteilt:

Usability für den Endanwender.

Es gibt leider keine Möglichkeit ChurchTools durch Plugins zu erweitern (auch wenn eine ChurchTools Mitarbeiter hier mal ein JS Plugin Boilerplate Repo angelegt hat, aber davon hat man nie mehr weiteres gehört). Das bedeutet, wenn ich neue Funktionen anbieten möchte habe ich drei Möglichkeiten, die alle ihre deutlichen Nachteile haben:

  1. Desktop Applikation: Selbst für simple und kleine Anwendungen muss ein hoher Grundaufwand (User Interface) betrieben werden. Eine Herausforderung stellt auf jeden Fall die Plattformübergreifende Kompatibilität und mobile Verwendung dar. Hier ein Beispiel aus der ChurchTools Community aus dem Jahr 2016.
  2. Web Applikation: Auch hier muss erst einmal ein hoher Aufwand betrieben werden. Der Vorteil ist, dass eine Web-Applikation von überall aus erreichbar ist. Der Nachteil ist, dass eine Multi-User Verwaltung eingerichtet werden muss. Wie das zum Beispiel in Laravel umgesetzt werden kann ist in diesem Blog-Post beschrieben.
  3. Kommandozeilen Applikation: Hier reduziert sich der Grundaufwand deutlich, wie man auch durch die schnelle Implementierung des Prototyps sieht. Allerdings ist die Usability für technisch nicht affine Nutzer nicht praktikabel.

Keiner dieser Optionen fügt sich nahtlos in den Arbeitsablauf mit ChurchTools ein. Es ist immer ein „extra Tool“, dass verwendet werden muss.

Welches Template-Format eignet sich?

In Ermangelung besserer Alternativen habe ich Word als Template benutzt. Die Frage ist aber, gibt es bessere und professionellere Alternativen? Hier wäre auf jeden Fall spannend den Workflow in verschiedenen Gemeinden anzuschauen.

Weiterverarbeitung zu PDF oder Bild

Das Ausgabe Format „Word“ ist für die direkte Verarbeitung eher ungeeignet. Zwar kann der Anwender noch eine Anpassung und Formatierung vornehmen, aber er muss die Datei immer öffnen um ein PDF und Bild zu exportieren.

Die automatische Generation von PDFs war schon immer eine Herausforderung (zumindest in PHP). Hier ein erster Versuch den obigen Flyer automatisch in ein PDF zu verwandeln:

Womöglich gibt es bereits bessere Ansätze, von anderen Entwicklern. In diesem Projekt, das in Python entwickelt wurde, wird eine Terminübersicht zusammengestellt und in ein PDF / JPEG ausgegeben. Die Konfigurationsoptionen sind sehr reduziert, da lediglich ein Hintergrundbild angepasst werden kann. Nichts desto trotz ist es ein interessantes Projekt, dass als Inspiration dienen kann.

Ungleichmäßige Textlängen / Inhalte

Selbst bei diesem simplen Prototyp habe ich schon gemerkt, wie ich das Template mit einigen Durchgängen immer wieder angepasst habe, damit die eingefügten Texte genug aber auch nicht zu viel Platz bekommen.

Texte von Veranstaltungen werden immer ungleichmäßig lang sein und dementsprechend auch eine Anpassung des Layouts notwendig machen.

Sind Flyer „von der Stange“ überhaupt attraktiv?

Das ist eine Frage, die ein guter Freund für seine Gemeinde festgestellt hat. Wenn jeder Seniorenkreis und Hauskreis einen eigenen speziellen Flyer bekommt mit den immergleichen tausendmahl gesehenen Stock-Unsplash Bildern wieviel sind diese Flyer dann überhaupt noch Wert? Wieviel sagen Flyer aus, die schnell schnell mit einem Knopfdruck generiert wurden?

Und jetzt?

Um dieses Projekt als produktive Anwendung umzusetzen braucht es Unterstützer. Sowohl …

  • Gemeinden, die daran interessiert sind eine solche Anwendung zu verwenden und ihre Ideen und Erfahrungen zu teilen…
  • …als auch…
  • Entwickler, die in der Umsetzung, Weiterentwicklung und Betreuung des Projekts mithelfen.

Solltest du zu einer diesen zwei Gruppen gehören, schreib mir gern eine E-Mail oder schreibe deine Gedanken an diesen Blog-Post. Ich bin gespannt auf deine Gedanken.

Update 03.08.2024:

Ich habe ein Repository auf GitHub für dieses Projekt angelegt: https://github.com/5pm-HDH/churchtools-flyer-generator

Eine Antwort

  1. Hallo,
    voll guter Ansatz. Neben Flyern könnten ja auch verschiedene andere Outputs wie Social Media Posts (als JPG) generiert werden, welche dann geteilt werden können.
    Wäre als Anwender und mit unserer Gemeinde sehr gerne dabei.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert