Skip to content

Seitensteuerung und Importieren von Widgets

wvhn edited this page Sep 17, 2022 · 7 revisions

Die Twig Template Engine unterstützt in v1.x noch das Importieren von Templates in den "Elternseiten", so dass dies auch auf den "Kinderseiten" verwendet werden können. Twig v1.x wird allerdings seit November 2021 nicht mehr weiter gepflegt. Aktuell (September 2022) besteht noch keine Notwendigkeit eines Wechsels.

Der User braucht sich in der Regel nicht darum zu kümmern, wo Widgets gespeichert sind, weil smartVISU diese selbständig sucht:

  1. in der index.php wird der Twig-FileSystemLoader definiert, in dem die üblichen Pfade angelelegt werden, in denen die Template Engine Dateien für extends, include oder import sucht. Aktuell sind das die Verzeichnisse
    • ./pages/<konigurierte Seiten>
    • ./pages/<konigurierte Seiten>/widgets
    • ./pages/smarthome (sofern dieses existiert)
    • ./pages/base
    • ./widgets
    • ./apps
    • ./dropins
    • ./dropins/widgets
    • ./dropins/shwidgets (für Plugin-spezifische Widgets von smarthomeNG)

Ab smartVISU v3.3 wird dies auf namespaces umgestellt. Dazu werden alle Widget-Ordner zusätzlich über einen namespace "@widgets" adressiert. In einer späteren Version werden die Widget-Ordner dann vom bisherigen Pfad getrennt, so dass sie ausschließlich über den namespace adressiert werden können.

  1. In den regulären Visu-Seiten wird i.d.R. die base.html eingebunden, die die Seitenaufteilung für Seitenmenü und Visuseite macht (alternativ die full.html, die eine Visuseite ohne Seitenmenü aufbaut). Beide erweitern die root.html, in der die wesentlichen Vorbereitungen für den Seitenaufbau vorgenommen werden:

    • es werden alle html-Dateien importiert, die in ./dropins/widgets, ./dropins/shwidgets und ./pages/<konfigurierte Seiten>/widgets gefunden werden.
    • es werden alle css.Dateien importiert, die in ./dropins, ./dropins/widgets, ./dropins/shwidgets, ./pages/<konfigurierte Seiten>/widgets, ./pages/< konfigurierte Seiten>/widgets und ./pages/<konfigurierte Seiten>/css gefunden werden
    • es werden alle js-Dateien importiert, die in ./dropins, ./dropins/widgets, ./dropins/shwidgets, ./pages/<konfigurierte Seiten>/widgets und ./pages/<konfigurierte Seiten>/js gefunden werden
    • zusätzlich werden alle fest zu smartVISU gehörenden Bibliotheken und Widgets (html, css und js) importiert
    • danach werden Initialisierungen vorgenommen und der io-Treiber gestartet.
  2. Während für die regulären Visu-Seiten alle benötigten Module automatisch importiert werden, muss man in eigenen Widgets die verwendeten smartVISU-Widgets selbst importieren. Das geht i.d.R. ohne Pfadangaben (s. Punkt 1). Zudem kann man mit der Twig-Funktion asset_exists() prüfen, ob eine Datei vorhanden ist:

    {% if asset_exists('mywidget.html' %} {% import 'mywidget.html' as mywidget %} {% endif %}

    Bzw. ab v3.3:

    {% if asset_exists('mywidget.html' %} {% import '@widgets/mywidget.html' as mywidget %} {% endif %}

    Die Funktion sucht in ./widgets, ./dropins, ./dropins/widgets, ./dropins/shwidgets und ./pages/<konfigurierte Seiten>/widgets. Sinnvoll ist dies, wenn man Widgets verwendet, die auch ohne die importierten Widgets auskommen (Beispiel: quad.html kann stateengine.html optional importieren).