Abschnittsübersicht

  • Dies ist der Begleitkurs zum Generico-Workshop, der am 30.04.26 (13:00-15:00 Uhr) virtuell über Zoom stattfinden wird. Andreas Kempka von der FernUni in Hagen wird den Workshop durchführen; das Kompetenzzentrum Moodle.NRW übernimmt die Organisation und Dokumentation.

    In diesem Kurs könnt ihr euch über den Workshop informieren und euch zu diesem anmelden. Bitte beachtet, dass es nur eine begrenzte Anzahl an Plätzen im Workshop gibt. 

    Der Kurs gliedert sich wie folgt:

  • Worauf können Teilnehmende sich beim Workshop freuen?

    Der Generico-Workshop (Fokus: Datenbankabfragen) befasst sich mit dem produktiven Einsatz des Moodle-Textfilters Generico (siehe auch Generico im Moodle Plugins directory). Diese Sitzung befasst sich mit den Möglichkeiten, Moodle-Datenbankabfragen mit Generico durchzuführen. Im Workshop "backen" wir unsere eigenen Rezeptideen für Vorlagen, die in Kursen eingebunden werden können.

    Allgemeine Infos zu Generico

    Mit Generico lassen sich systemweit Vorlagen definieren, um diese als Bausteine in Moodle-Kursen zu nutzen. Die Vorlagen können Informationstexte, HTML-formatierten Text, CSS Styles, JavaScript und SQL-Datenbankabfragen beinhalten. Generico kann Informationen des Kurses (z.B. Titel, aber auch eigene Kursfelder) und von Studierenden (z.B. Name oder Matrikelnummer) oder andere Datenbankfelder anzeigen, um den Pflegeaufwand von Kursen zu verringern oder eine persönliche Ansprache zu leisten. Beispiele und Inspiration findet ihr in Andreas Präsentation vom Hochschultreffen: Präsentationsfolien der Session "Vereinheitlichung von Moodle-Kursen mit Generico-Vorlagen", die ihr im Abschnitt Linktipps findet.

    Fokus dieses Workshops

    Im Workshop befassen wir uns knapp mit den Grundlagen von Generico und werden diese Kenntnisse nutzen, um konkrete Ideen umzusetzen. Bitte bereitet vor dem Workshop grobe Skizzen für Vorlagen vor, falls ihr bestimmte Wünsche habt. Mögliche Beispiele als Quelle für Inspirationen wären:

    • Einfaches Beispiel: Studierenden im Kurs anzeigen, in welchen Gruppe(n) sie im Kurs angemeldet sind.
    • Dynamisch im Kurs auf Aktivitäten mit bestimmtem Namen verlinken (z.B. auf das Klausur-Quiz oder das Nachrichtenforum)
    • Studierenden im Quiz-Versuch anzeigen, welche Note sie erhalten haben.
    • Studierenden die Notenliste des Kurses mit Punktegrenzen anzeigen.

    Falls ihr eigene Ideen habt, könnt ihr diese auch gerne vorab an Andreas senden (E-Mail: andreas.kempka@fernuni-hagen.de), um die Vorbereitung zu erleichtern bzw. vorab die Machbarkeit zu prüfen.

    Für das Design von Vorlagen lohnt auch ein vorbereitender Blick auf FontAwesome Icons und Bootstrap. Für Datenbankabfragen sind Kenntnisse der Datenbankstruktur in Moodle (siehe examulator.com) sowie Kenntnisse in SQL von Vorteil. Beispielabfragen können ggf. Im Kurs erarbeitet werden. 

    Wir freuen uns auf den gemeinsamen "Backkurs"!

  • Hier findet ihr die Zugangsdaten zum Workshop. 

    • Meeting-ID: 698 8365 6221
    • Kenncode: 315926

  • Wie werden Generico-Vorlagen erstellt und eingebunden?

    • Wie erstelle ich eine Vorlage?

      Generico-Vorlagen können von Admins unter ./filter/generico/genericotemplatesadmin.php erstellt und bearbeitet werden.

      Wie binde ich eine vorhandene Vorlage im Kurs ein?

      Möglichkeit 1: Grafisch im Editor

      Im TinyMCE-Editor kann mit dem Symbol {} eine Vorlage eingebunden werden.

      1. Klickt auf das Symbol.
      2. Wählt die passende Vorlage aus.
      3. Füllt das Formular aus, wenn die Vorlage weitere Optionen hat.
      4. Klickt auf "Einfügen"

      Nun wird die Generico-Syntax passend zu eurer Auswahl im Editor eingefügt.

      Wichtig: Im Editor seht ihr nur die Syntax. Erst nach dem Speichern wird die Vorlage berechnet und angezeigt.

      Möglichkeit 2: Per Syntax

      Schreibt die Syntax direkt in den Editor (nützlich, wenn ihr dieselbe Vorlage mehrfach einfügen wollt).
      Das Schema lautet: {GENERICO:type="Schlüssel_der_Vorlage",Variablenname1="Variablenwert1"}

      • Verwendet keine ", außer um Variablen zu begrenzen. Ansonsten bricht die Variable.
      • In Variablennamen ist kein HTML möglich.
      • Wollt ihr HTML an die Vorlage weitergeben, arbeitet mit {GENERICO:type="Schlüssel_der Vorlage"} ... dazwischen eurem HTML und {GENERICO:type="Schlüssel_der Vorlage_end"} als Abschluss. Im Generico solltet ihr entsprechend auch das Ende der Vorlage definieren. 
      • Es lassen sich keine Genericos in andere Genericos einbinden.
  • Wie wird Generico verwendet?

    • Kursfelder

      Kursfelder enthalten Informationen über den aktuellen Kurs. Folgende Felder aus Moodle können in Generico-Vorlagen standardmäßig verwendet werden (Auswahl):

      • @@COURSE:fullname@@ = der vollständige Name des Kurses
      • @@COURSE:summary@@ = die Kursbeschreibung
      • @@COURSE:idnumber@@ = die Kurs-ID. Nützlich zur Verlinkung auf spezielle Seiten des Kurses (z.B. Bewertungen) 
      Custom Course Fields

      Ihr könnt auch benutzerdefinierte Kursfelder (/course/customfield.php) erstellen. Die Werte dieser Felder in einem Kurs können ähnlich ausgelesen werden. Die Felder werden anhand ihrer ID angesprochen:

      • @@COURSE:kursverantwortlich@@ = z.B. die kursverantwortliche Person
      • @@COURSE:lizenz@@ = z.B. Lizenzinformationen

      Hinweise:

      • Bei Kursfeldern wie Datum/Zeit erhaltet ihr die Unix-Zeit als Zahl. Diese müsst ihr mit JavaScript in einen von Menschen lesbaren Text umwandeln.
      • Auch versteckte Kursfelder sind so anzeigbar.

    • Liste der Kursfelder in Moodle

    • Nutzerfelder

      Nutzerfelder enthalten Informationen über die eingeloggte Person. Folgende Felder aus Moodle können in Generico-Vorlagen standardmäßig verwendet werden (Auswahl):

      • @@USER:firstname@@ = Vorname
      • @@USER:lastname@@ = Nachname
      • @@USER:username@@ = Nutzername, ggf. die Matrikelnummer
      • @@USER:id@@ = die Nutzer-ID. Nützlich zur Verlinkung auf spezielle Seiten des Kurses (z.B. Bewertungen) 
    • Datenbankfelder

      Felder, die SQL-Abfragen in Generico zurückgeben, könnt ihr über DATASET einbinden. Dies funktioniert nur, wenn die Abfrage exakt eine Zeile ausgibt. Dies könnt ihr in der Abfrage mit LIMIT 1 erzwingen. Ansonsten erhaltet ihr ein Array aller Zeilen, das ihr mit JavaScript aufbereiten müsst.

      • @@DATASET:spaltenname@@ = Infos aus der Spalte `spaltenname`
    • Liste der Nutzerfelder in Moodle

  • Diese Vorlagen können als Inspiration für weitere Vorlagen dienen.

    Installation:

    1. Ladet die Vorlagendatei (.txt) herunter.
    2. ADMIN Wechselt in die Website-Administration eurer Moodle-Instanz in den Bereich der Generico-Vorlagen (https://eure-moodle-instanz.de/filter/generico/genericotemplatesadmin.php
    3. Wählt eine leere Vorlage
    4. In der Vorlage zieht ihr die .txt-Datei auf das Icon Bundle - die Informationen aus der .txt-Datei werden in das Formular übertragen
    5. Speichert nun das Formular

    Verwendung im Kurs:

    • Wechselt in ein Textfeld, in dem ein Editor zur Verfügung steht (Textfeld, Beschreibung einer Aktivität etc.)
    • Klickt im Editor auf den Generico-Button
    • Wählt die Vorlage aus
    • Füllt ggf. im Formular weitere Optionen aus
    • Klickt auf einfügen und speichert das Textfeld
      • Benutzung: {GENERICO:type="vorname_nachname"}
      • Variablen: keine
      • Beschreibung: Zeigt den Namen der eingeloggten Person im Format Vorname Nachname an.
      • Benutzung: {GENERICO:type="spoiler"}
      • Variablen: keine
      • Beschreibung: als class="spoiler" markierte Elemente werden geschwärzt und beim Hover über den Text angezeigt.
      • Benutzung:
        {GENERICO:type="alert_options",farbe="danger",icon="exclamation-triangle"}
        HTML-Code dazwischen eingeben.
        Mit {GENERICO:type="alert_options_end"} beenden.
      • Variablen: werden per Formular abgefragt, z.B. farbe für Hintergrundfarbe, icon für FontAwesome-Icon
      • Beschreibung: Zeigt den Namen der eingeloggten Person im Format Vorname Nachname an.
      • Benutzung: {GENERICO:type="info-box"}
      • Variablen: keine User-Variablen, aber Variablen aus dem Kurs (@@COURSE:...@@) und zur eingeloggten Person (@@USER:...@@)
      • Fügt eine Box mit Infos zum Kurs und der eingeloggten Person ein: In der Box stehen der vollständige Kursname aufgrund der Variable @@COURSE:fullname@@, der Nachname der eingeloggten Person (@@USER:lastname@@) und der Vorname (@@USER:firstname@@). Ein Link verlinkt auf die Kurshauptseite (d.h. auf die Moodle-Adresse mit der Kurs-ID @@COURSE:id@@ des aktuellen Kurses). Es wird auch die Person genannt, die im nutzerdefinierten Kursfeld @@COURSE:betreuung@@ aufgeführt wird. Dieses Kursfeld muss vorher in Moodle erstellt werden.
    • Dieses Generico beinhaltet den Code für das obige Beispiel. Zieht es auf das bundle-Feld in der Vorlage und bindet die Vorlage in euren Kurs mit {GENERICO:type="kategoriename"} oder über das TinyMCE-Plugin ein.

    • Über das Auswahlfeld in Generico könnt ihr weitere mitgelieferte Vorlagen ausprobieren...

    • Brainstorming

      Entwerft in Kleingruppen von ca. 4 Personen eine oder zwei Ideen für eine Vorlage, die als Baustein in Moodle-Kursen für eure Zwecke praktisch wäre. Beschreibt die Idee dabei erstmal konzeptuell.

      Zusammentragen

      Tragt die Ideen im Plenum zusammen. Eventuell ergeben sich dabei noch Anpassungen im Detail.

      Abstimmung

      Stimmt darüber ab, welch Idee wir uns gemeinsam anschauen können.

      Ausprobieren

      Probiert (im Nachgang des Termins) auf eurer Moodle-Instanz aus, wie sich die Vorlage gestalten ließe. Bei Fragen verwendet gerne das Forum. Eine KI kann für erste Schritte der Umsetzung hilfreich sein.

      Beispielprompt: Erstelle mit Hilfe von HTML, CSS und JavaScript Beispielcode für eine Vorlage mit dem Textfilter Generico, die in Moodle verwendet werden kann. Die Vorlage soll einen Merkkasten für Studierende enthalten. Verwende Bootstrap und FontAwesome für die Gestaltung. Achte auf Barrierefreiheit. Verwende die Syntax @@variablenname@@ für Variablen wie z.B. das Icon oder die Farbe der Box.

      Zum schnellen Testen eignet sich jsfiddle.net. Fügt den Code in das HTML-Fenster ein und klickt auf RUN, um eine Vorschau zu sehen. In der späteren Generico-Vorlage könnt ihr nur die relevanten Teile übernehmen: Bootstrap und FontAwesome sind bereits in Moodle enthalten. Ihr müsst ggf. CSS-Styles (in <style>) und JavaScript (in <script>) in die Vorlage übernehmen sowie vor allem den HTML-Teil (in <body>) in die Vorlage übernehmen und überflüssige Elemente entfernen.

      Dokumentieren

      Tragt gerne im Nachgang der Veranstaltung in Ruhe im Forum nach:

      • Welche Idee(n) für Vorlagen habt ihr entwickelt?
      • Wie habt ihr sie umgesetzt?
      • Welche Probleme sind aufgetreten und welche Lösungen habt ihr gefunden? 
    • Erstellt bitte je Idee für eine Generico-Vorlage einen Beitrag im Forum.

      • Kommentiert gerne die Vorschläge der anderen (gerne auch im Nachgang).
      • Stellt gezielt Fragen, wenn ihr bei der Erstellung nicht weiterkommt.
      • Bietet gerne nach Erstellung die .txt-Datei (als Bundle-Export) zum Testen an.
  • Tipps, die euch das Leben mit Generico einfacher machen

    • Entwickelt zuerst auf einer Testinstanz, bevor ihr auf einer Produktivinstanz damit arbeitet.
    • Generico bietet keine Versionierung an. Es wäre sinnvoll, die Entwicklung auf GitLab etc. auszulagern, um die Versionen zu speichern.
    • Entwickelt die Vorlage (soweit möglich) zuerst (mit Platzhaltern) in normalen Moodle-Textfeldern im Editor. Übertragt sie dann erst in Generico.
    • Vorsicht bei CSS und <style>-Tags: Macht keine Anpassungen an globalen Tags wie <p>, <h4> usw. Diese betreffen dann die ganze Seite, die dann ggf. nicht mehr funktioniert! Erstellt für eure Elemente stattdessen eindeutige Klassen (class="generico-betreuerbox") und ändert das CSS dann nur für diese Klasse.
    • Verwendet eine IDE (z.B. Visual Studio Code, um den Code insgesamt zu testen. (In Genericotwo ist ein Editor mit Vorschau eingebaut)
    • Haltet die Seite im Backend (z.B. /admin/settings.php?section=filter_generico_templatepage_5) geöffnet, wenn ihr eine Vorlage testet. Solltet ihr die Vorlage soweit zerstört haben, dass die Seite, auf der sie eingebettet ist, nicht mehr funktioniert:
      • Speichert euch die Vorlage per Bundle-Button
      • Löscht den Inhalt der Vorlage (und CSS und JavaScript)
      • Speichert die leere Vorlage, damit die Seite wieder funktioniert
      • Untersucht den Code in einer IDE
    • Fügt nicht nur Variablen in die Vorlage ein. Kapselt diese in <span class="generico-vorlage"> oder ähnlich. Stellt im Theme-CSS ein, dass die Klasse "generico-vorlage" (bzw. so wie ihr sie benannt habt) für Admins im CSS (z.B. durch einen roten gepunkteten Rahmen) umrandet wird. Damit könnt ihr unterscheiden, was Generico ist und was regulärer Text im Kurs. Schaltet ihr auf eine andere Rolle, verschwinden die Markierungen.
  • Tipps für die Nutzung von Datenbankabfragen

    • In den SQL-Anweisungen ist als Platzhalter nur ? erlaubt, d.h. keine benannten Platzhalter.
    • Alle Platzhalter (zu jedem ?) müssen existieren und im Feld Datensatz-Variablen filter_generico | datasetvars_... benannt werden, z. B. @@COURSE:id@@, sonst gibt es eine hässliche Fehlermeldung.
    • Am Ende der SQL-Abfrage wird kein ; geschrieben.
    • Verwendet keine URL-Parameter in den Abfragen, um Sicherheitsprobleme zu vermeiden, wie z.B. das Abgreifen von Daten oder Code-Injection
    • Bestimmte Stichwörter sind im SQL nicht erlaubt (LIMIT, INSERT, UPDATE, DROP, ...).
    • Ihr könnt die Syntax der Datenbankabfragen auch im Plugin Configurable Reports (https://moodle.org/plugins/block_configurable_reports) testen, bevor ihr es in Generico verwendet. Achtet darauf, dass Platzhalter wie ? in den configurable reports nicht funktionieren.
    • Mit der nachfolgenden Beispielabfrage könnt ihr beispielsweise den Kategorienamen der Kategorie des aktuellen Kurses anzeigen:

      
        SELECT cc.name AS category_name
        FROM {course} c
        JOIN {course_categories} cc 
        ON c.category = cc.id
        WHERE c.id = ?
      

      Das ist nützlich, wenn der Kurs etwa in einer Kategorie liegt, die den Semesternamen beinhaltet und ihr diesen dynamisch für den (kopierten) Kurs anzeigen möchtet, ohne den Kurs manuell zu überarbeiten.

      Der Platzhalter-Parameter ? wird dabei in datasetwars durch @@COURSE:id@@ definiert. Das bedeutet, dass Generico die aktuelle Kurs-ID, in der sich die Vorlage befindet, in die Abfrage einbaut. Der Platzhalter @@USER:id@@ würde entsprechend die User-ID des aktuellen Users liefern.

    • Hier findet ihr eine Liste der Tabellen und Felder in Moodle und wie sie miteinander in Verbindung stehen. Zusätzliche Plugins können weitere Tabellen beinhalten.

    • Mit Hilfe gut gestalteter KI-Prompts könnt ihr euch die Template-Erstellung vereinfachen. Diese Infos sind für den Prompt hilfreich:

      • Erstelle die SQL-Syntax für eine Datenbankabfrage. Diese soll für filter_generico in Moodle [eure Moodle-Version] genutzt werden. Nutze Postgresql [wenn euer Moodle postgresql als Datenbank verwendet).
      • Verwende Shorthands wie {user} für Tabellen.
      • Nutze kein Semikolon am Ende der Anweisung.
      • Nutze ausschließlich ? als Platzhalter (und nicht %%COURSEID%%). Erstelle eine sortierte Liste der Platzhalter für Generico zur Verwendung in den datasetvars, z.B. @@COURSE:id@@ oder @@USER:id@@
      • Liste auf, wie die Ergebnisse im Template von Generico eingebunden werden können, z.B. als @@DATASET:spaltenname@@
  • An dieser Stelle findet ihr weiterführende Informationen und Inspiration dazu, wofür Generico eingesetzt werden kann.

    • In seiner Session beim Hochschultreffen des Vereins Moodle an Hochschulen e.V. am 12.03.25 in Potsdam stellte Andreas Kempka von der FernUni in Hagen das Plugin Generico vor und ging dabei auf mögliche Einsatzszenarien und Stolperfallen bei der Erstellung der Generico-Vorlagen ein.  

    • Ressourcen zur Gestaltung von Webseiten

      Hilfreiche Ressourcen für Elemente zur Gestaltung von Webseiten: Buttons, Badges, Cards, Icons, ... 

    • Mit diesen in Moodle eingebauten Icons könnt ihr eure Kursvorlagen optisch aufwerten.

      Beispiele: https://fontawesome.com/v4/examples/

    • Dies ist die neuere Version von FontAwesome, die mehr Icons enthält. Hier sind die kostenlosen Icons verlinkt.

      Tipp: ybertreibt es mit FontAwesome nicht. Zwar sind Animationen, Farben, Überlagerungen usw. möglich. Das kann aber überreizen:
       

    • Mit Bootstrap (in Moodle integriert) könnt ihr einige ästhetisch ansprechende Gestaltungselemente übernehmen (z.B. Akkordeons, Badges, Buttons,

      Tabellen mit
      Zebrastreifen ...

      etc.)

    • Mit diesem Editor lassen sich Textfelder (ohne Editor) per Rechtsklick im HTML-Editor Monaco öffnen. Dieser hilft dabei, Tippfehler beim Erstellen von HTML zu vermeiden. Generico Two liefert einen Editor mit.

    • Mit diesem Editor lassen sich Textfelder (ohne Editor) per Rechtsklick im HTML-Editor Monaco öffnen. Dieser hilft dabei, Tippfehler beim Erstellen von HTML zu vermeiden.

    • Hier könnt ihr ad hoc HTML-Code im Browser testen, bevor ihr etwas in Moodle umsetzt. Generico Two bietet bereits eine Vorschau.

  • Falls ihr gerade erst mit Generico beginnt, wäre ein Blick auf das Nachfolgeplugin Generico Two spannend.

    Im Video  seht ihr das Plugin in Aktion.

    Das GitHub Repository findet ihr unter https://github.com/justinhunt/moodle-filter_genericotwo

    Zu den spannenden Neuerungen gehören:

    • "Unter der Haube" wird das Moodle-eigene Template-System Mustache verwendet. Ihr könnt damit direkt im Template auf viele nützliche Funktionen zurückgreifen, z.B. durch Datenbankergebnisse in einer Schleife durchiterieren, Text filtern. Die Syntax ändert sich minimal.
    • Ein Editor ist eingebaut, um bei der Eingabe des Quellcodes zu unterstützen.
    • Es gibt im Plugin eine Vorschau der Vorlagen.

    Das Plugin ist derzeit noch nicht fertig. Die Migration der alten Vorlagen klappt z.B. nicht ganz fehlerfrei.