Direkt zum Hauptinhalt

[ENTWURF] Generico Filter (für Vorlagen) filter_generico

Das Plugin Generico Filter (filter_generico) ermöglicht es, Vorlagen mit Text und Code zentral in der Website-Administration abzulegen und diese dann in Moodle an vielen Orten einzufügen, in denen der HTML-Editor verfügbar ist.

Template erstellen

Templates können von Admins in den Website-Einstellungen zum Plugin erstellt und bearbeitet werden.

Ein Generico Template besteht aus folgenden Feldern:

templatekey

Der Bezeichner eines Templates. Dieser Name solle einzigartig und sprechend sein und den Vorgaben entsprechen, z.B. `qr_code`.

templatename

Dieser Name erscheint im Editor-Plugin (tiny_generico) auf. Er sollte die Funktion des Templates widerspiegeln und nicht zu sehr vom templatekey abweichen, z.B. `QR Code aktuelle Seite`.

templateinstructions

Der Text erscheint im Editor-Plugin nach der Auswahl des Templates. Er liefert eine Beschreibung der Funktion des Templates. Hier können auch die einstellbaren Optionen und Variablen (wenn im Template vorhanden) erläutert werden. Die Anweisungen lassen sich leider nicht als HTML formatieren.

template

Dieser Abschnitt beinhaltet den HTML-Code des Templates. Hier kann nach Belieben gestaltet werden. In diesem Abschnitt sind Variablen verfügbar.

Achtung: Moodle escaped diesen Text nicht und korrigiert keine Fehler wie offen gelassene Tags. Ein fehlerhaftes Template kann die Ansicht der Seite zerstören.

Tipps:

  • Um das Layout zu gestalten, empfiehlt es sich, den Quellcode in einer IDE (wie VSCodium) oder notfalls im Moodle-Tiny-Editor zu verfassen und den Quellcode in das Formularfeld zu kopieren.
  • Es ist sinnvoll, den gesamten Inhalt in ein <div>-Element (bei Textblöcken) oder ein <span>-Element (bei Inline-Text) zu kapseln und dem Inhalt eine Generico-spezifische Klasse zu vergeben. Diese Klasse kann im Moodle-Theme global für Admins z.B. mit einem roten gepunkteten Rand im SCSS gestaltet werden. Damit erkennen Admins Generico-Vorlagen in Kursen leichter, was die Fehlerbehebung erleichtert. Auch lassen sich spätere CSS-Anpassungen dann auf Inhalte von Generico-Templates eingrenzen, um nicht ungewollt das Moodle-Design zu überschreiben.

Beispiel:

<div class="gen-template">
  Hier ist der Inhalt des Templates.
</div>

JavaScript-Code und CSS gehören hier nicht hinwein, sondern in die dafür vorgesehenen Bereiche.

templateend

In Generico-Variablen kann kein nutzerseitiges HTML eingegeben werden. Möchte man vom User bereitgestelltes HTML in Templates verwenden, kann man es zwischen den Beginn und das Ende einer Template einbauen - und dann weiterverarbeiten. In das Feld templateend wird dann das HTML eingetragen, das ein Template abschließt, z.B. abschließende HTML-Tags

Beispiel: ###

templatedefaults (Variablen)

Der Vorteil von Generico besteht darin, Templates generisch passend für viele Kurse zu erstellen. Mit Hilfe von Variablen können die Vorlagen dann angepasst werden. Generico-Variablen haben die Syntax @@variablenname@@. 

  • Kursvariablen, Uservariablen: Man kann aus der Moodle-Datenbank zum aktuellen Kurs oder zum eingeloggten User Infos anzeigen lassen, beispielsweise:
    • @@USER:firstname@@ - zeigt den Vornamen des eingeloggten Users an.
    • @@COURSE:fullname@@ - zeigt den kompletten Titel des aktuellen Kurses an.
    • Diese Variablen müssen nicht definiert werden und können im Template verwendet werden.
  • Details zur Datenbankstruktur finden sich unter https://www.examulator.com, etwa in den Tabellen users oder courses und darin verfügbaren Feldern.
  • Nutzerdefinierte Variablen: Im Template lassen sich auch eigene Variablen definieren, etwa @@lieblingsfarbe@@. Wird ein Template per Editor eingefügt, zeigt das Formular definierte Variablen zum Ausfüllen an.
    • Variablen werden zeilenweise definiert und per Komma getrennt:
      Lieblingsessen=Pizza,
      Farbe=blau|grün|rot
    • Frei einzutragende Variablen werden wie in Zeile 1 definiert. Wird im Formular kein Wert eingetragen, wird der Standardwert (im Fall des Lieblingsessens ist es "Pizza" angenommen.
      Achtung: User sollten keine Anführungszeichen `"` eintragen. Diese brechen die Syntax und führen zu Fehlern. HTML wird in Variablen nicht ausgewertet.
    • Variablenwerte, bei denen eine Wahl aus vorgegebenen Werten angeboten wird, werden durch ein Pipe `|` getrennt. User sehen im Formular ein Drop-Down-Feld.
      Achtung: Nach dem Einfügen der Vorlage kann der Wert jedoch nach Belieben (auch durch unsinnige Werte) ersetzt werden.

templatescript

...

templatestyle

...

dataset

...

datasetvars

...

Template löschen

Es existiert keine Funktion zur Löschung. Templates werden gelöscht, indem alle Formularfelder geleert werden und das Template gespeichert wird. Befindet sich das Template in Verwendung, wird nach dieser Löschung im Kurs an Stelle des Templateaufrufs nichts angezeigt.

Tipp: Ein leeres Template (nur mit einem Template key versehen) kann als Bundle importiert werden, um alle Felder des Formulars schnell zu leeren. Nach dem Löschen des Keys im Formular und dem Speichern ist das Template gelöscht.

Template einfügen

Templates können entweder händisch durch die Eingabe der Template-Namen oder über den dazugehörigen Editor (tiny_generico) per Formular eingefügt werden. Das Editor-Plugin unterstützt bei der Eingabe, wenn das Template Variablen oder Optionen enthält.

Einschränkungen

  • Der Textfilter eignet sich nicht für Texte, die per E-Mail versendet werden, wie z.B. Forenbenachrichtigungen. Dort wird stattdessen nur die Filter-Syntax angezeigt.
  • Generico bietet keine Versionierung an. Es empfiehlt sich, die Versionierung mit externen Werkzeugen zu erledigen.

Versionierung

Backups

In den Template-Einstellungen lassen sich keine Versionen verwalten. Ein manuelles Backup ist über den Bundle Button möglich. Dann wird eine JSON-formatierte .txt Datei heruntergeladen, mit der sich (fast) alle Einstellungen eines Templates herunterladen lassen.

Vor dem Bearbeiten eines Templates, ist es ratsam, ein manuelles Backup zu erstellen. Bei Fehlern und Problemen kann das Backup schnell wiederhergestellt werden.

Wiederherstellung

Um ein Template auf eine vorherige Version wiederherzustellen, kann man einen .txt Export auf den Bundle Button ziehen. Das Formular wird mit den Werten der .txt Datei überschrieben. Nach einem Speichern des Formulars, ist diese Version in Kraft.

Bei ungültigen .txt Dateien meldet die Seite keinen Fehler. Um manuell festzustellen, ob der Import funktioniert hat, kann man vor dem Import einen Teil des Formulars (z.B. die Versionsinfo) löschen. Ist nach dem Drag-and-Drop der Bundle-Datei das Feld wieder gefüllt, hat der Import funktioniert. 

Warnung und generelle Tipps

  • Vorlagen sollten gründlich getestet werden, am besten auf einem Staging-System, das eine Kopie des aktuellen Moodles beinhaltet, um die Auswirkungen des Templates zu beurteilen. Dies gilt insbesondere dann, wenn JavaScript Code oder CSS verwendet werden.
  • Die Bearbeitungsseite der Vorlage sollte beim Testen immer geöffnet bleiben. Falls man Fehler im Template erzeugt, die z.B. das Bearbeiten der Moodle-Seite stören, lässt sich der Code aus dem Template in der Website-Administration entfernen, damit die Seite wieder funktioniert.
  • Auch wenn Templates nicht auf einer Seite direkt eingebunden werden, können sie gelegentlich Probleme an unerwarteten Stellen verursachen.
  • Werden Datasets (SQL-Anweisungen) verwendet und fehlen die richtigen Parameter, gibt Moodle einen PHP-Fehler aus, was die Anzeige der gesamten Seite stört.

Nachfolge-Plugin generico two

Das Plugin genericotwo befindet sich in Entwicklung. Es hat noch nicht die gleiche Reife erreicht, wie das ursprüngliche filter_generico, bietet jedoch einige interessante Funktionen:

  • Als Template-Syntax wird Moodles Mustache genutzt (siehe Beschreibung unter https://moodledev.io/docs/5.3/guides/templates). Damit lassen sich z.B. Datensätze mit mehreren Zeilen ohne JavaScript zeilenweise als Tabellen ausgeben.
  • Der Template-Editor bereitet den Code mit Syntax Highlighting optisch übersichtlicher auf.
  • Im Template-Editor findet sich eine Vorschau, mit der sich die Templates testen lassen.
  • Einfache ältere Generico Templates können zu Generico Two migriert werden.

Derzeit gibt es noch einige Einschränkungen:

  • Die Migration längerer oder komplexerer Templates des ursprünglichen Generico ist noch fehlerhaft. 

GitHub Repository: https://github.com/justinhunt/moodle-filter_genericotwo