Der Blog von fm-ProductNode

Neu: Das Release 2.1 von fm-ProductNode

Yin Yang
Verfasst von franz-mue am 26. Oktober 2017

Das Release 2.1 von fm-ProductNode enthält eine Reihe von Verbesserungen: Insbesondere wurde der bereits bisher integrierten Twig Template Engine eine zusätzliche Template Engine zur Seite gestellt, die Kommunikationsmöglicheiten zwischen Templates wurden ausgebaut, der "Werkzeugkasten" wurde mit weiteren Open Source-Komponenten zur Datenverarbeitung und zum Datenaustausch erweitert, und last not least sollen weitere Typen von Nutzungskontingenten den Anwenderbedürfnissen weiter entgegen kommen. Letztendlich ist eine mächtige Skripting-Plattform entstanden. Dieser Beitrag erläutert wesentliche Neuerungen. Details sind der aktualisierten Dokumentation zu entnehmen.

Twig und Task - die Template Engine-Zwillinge

Die Template Engine Twig ist im Web-Umfeld entstanden, und von Hause aus auf die Generierung von formatierten Textdatenströmen ausgelegt, und wird meines Wissens nach vorwiegend bei der Erstellung von HTML-Seiten verwendet.

Bei fm-ProductNode geht es allerdings nicht nur um Web-Seiten-Generierung, sondern viel allgemeiner um Datenverarbeitung. Insbesondere wenn es um das Aufschreiben von Workflows oder sonstigen Anweisungsfolgen geht, kann das ständige Öffnen und Schließen von Klammern nervig und unbequem werden. Deshalb wird bei fm-ProductNode Twig eine zweite Template Engine namens Task zur Seite gestellt. Diese zweite Template Engine ist nah verwandt zu Twig. Lediglich die Template-Syntax weicht geringfügig voneinander ab. Ansonsten sind die beiden Template Engines mehr oder minder nach Geschmach verwendbar und meist einfach austauschbar. Task und Twig können sich gegenseitig aufrufen und Daten miteinander austauschen.

Ein einfaches, kurzes Beispiel möge den Unterschied verdeutlichen. Wenn ein Twig Template

{% set twig = data.twig %}
{{ twig.setPath('/path/to/myFile.txt').setTemplateString('{{ "Hallo Welt" }}').render }}

enthält, würde das entsprechende Task Template wie folgt aussehen:

set twig = data.twig
print twig.setPath('/path/to/myFile.txt').setTemplateString('{{ "Hallo Welt" }}').render

Übrigens zeigt das vorausgehende Beispiel, wie aus einem Task Template heraus die Twig Template Engine aufgerufen wird.

Kommunikation zwischen Templates

Die Template Engine Twig erlaubt von Hause aus die Übergabe von Kontext-Variablen beim Aufruf einer Template Engine. Dieser Mechanismus ist für die Zwecke von fm-ProductNode zu spartanisch ausgeprägt. Daher ergänzt fm-ProductNode die beiden Template Engines Twig und Task um die globalen Objekte session und shelf.

Das Objekt session fungiert für die laufenden Template Engines als Zwischenspeicher für gemeinsame Daten (Skalare, Arrays und Objekte): Eine Template Engine legt die Daten dort ab. Anschließend kann sich jedes Template daraus bedienen.

Zum Beispiel könnte in einem Task Template die Variable index mit dem Wert 7 im session-Objekt abgelegt werden:

do context.session.addItem('index', 7)

Ein anderes Template (oder auch dasselbe Template) könnte den Wert später wieder auslesen:

print context.session.item('index')

Das shelf-Objekt ist analog zu verwenden. Das shelf-Objekt unterscheidet sich jedoch vom session-Objekt: Die Daten werden auf der Festplatte persistiert. Damit sind sie später - auch nach einer Programmausführung - noch verfügbar. Allerdings lassen sich mit dem shelf-Objekt nur Skalare und Arrays ablegen, keine Objekte.

Weitere Datenverarbeitungskomponenten an Board

fm-ProductNode enthält in seiner Sammlung nun auch Open Source-PHP-Komponenten für JSON-LD und RDF.

Sonstige Verbesserungen

Die Plattform verfügt jetzt über eine Dateisystem-Abstraktionsschicht sowie eine zip-Komponente.

Neben einer kleineren Aufräumaktion, insbesondere bei den Konsolen-Kommandos, wurde die Verwaltung von Nutzungskontingenten ausgebaut: Das neue Release erlaubt neben zeitlich unbegrenzt gültigen Kontingenten auch kostengünstigere Kontingente, die innerhalb eines Tages, eines Monats oder eines Jahres aufzubrauchen sind.

Tags: Template, TemplateEngine, Twig, Release2.1, Datenverarbeitung, Skripting
Foto: OpenClipart-Vectors / pixabay.com

« Einen Produktdaten-Feed aus einem BMEcat-Katalog erzeugen - Produktdaten-Feed - ein zweiter Anlauf »