Die Moodle-Datenbankaktivität als Speicherort

Die Aktivität „Buch“ und „Textseite“ in Moodle sind für das Präsentieren von Informationen gedacht. Sie können zwar mit diversen interaktiven Elementen angereichert werden (GeoGebra-Applets, H5P-Lernobjekte, eingebettete Quizfragen), solche Lösungen haben aber verschiedene Nachteile:

    1. Der Bearbeitungsstand der eingebetteten Objekte wird nicht gespeichert (z. B. bei GeoGebra-Applets).
    2. Die eingebetteten Objekte passen optisch nicht zur Buchumgebung (z. B. bei H5P-Lernobjekten).
    3. Wenn eingebettete Objekte aus mehreren Seiten bestehen, ist auf der Buchseite jeweils nur eine Seite sichtbar.
    4. Die eingebetteten Objekte definieren, was richtig oder falsch ist (z. B. eingebettete Quizfragen).
    5. Die Lehrperson erlebt einen Medienbruch. Sie muss das Buch verlassen und die Objekte an einem anderen Ort innerhalb oder gar ausserhalb von Moodle erstellen.

Auch Alternativen zum Buch können die Funktionalität eines interaktiven Buches nur bedingt erfüllen.

    • Ein Forum ist zum Austausch zwischen den Lernenden gedacht, aber nicht dafür, persönliche Gedanken zu einer Buchseite zu formulieren.
    • Die Erweiterung Content Pages deckt einen Teil der Anforderungen ab, die Lernenden können ihre Gedanken aber immer nur am Ende einer Seite festhalten.

In diesem Beitrag wird beschrieben, wie man die Aktivität Buch (oder Seite) mit Moodle-Bordmitteln so nutzen kann, dass sie es den Lernenden ermöglicht, einzelne Elemente zu ergänzen, indem sie Texte schreiben oder aus einer Reihe von Optionen (Checkliste) eine Auswahl treffen.Beispiel für die Verwendung des Datenbankspeichers auf einer Seite in Moodle.

Technischer Ansatz

Die technische Umsetzung beruht auf einer Idee von Christian Augsburg (GitHub-Repository): Informationen werden in eine extra dafür angelegte Moodle-Datenbankaktivität gespeichert. Allerdings haben diese Datenbanken vergleichsweise komplexe Strukturen. Deshalb wurde für den hier vorgestellten Ansatz JSON verwendet (eine ursprünglich von Florian Dagner entwickelte Idee). Damit kann die immer gleiche Datenbankstruktur für verschiedene Ansätze genutzt werden.

Konkrete Umsetzung

Für die Umsetzung sind drei Teilschritte notwendig.

    • Datenbank einrichten
    • Scripte zur Verfügung stellen und anpassen
    • Interaktive Seite gestalten

1) Datenbank einrichten

Zuerst legt man eine Datenbankaktivität mit den Feldern taskid und data (beide vom Typ „Kurzer Text“ an).

Definition der Felder für die Datenbank zur Speicherung von Antworten.

In den Vorlagen der Datenbank passt man die Listenansicht (wiederholter Eintrag) wie folgt an:

<div class="mdb-record">
<span class="mdb-taskid">[[taskid]]</span>
<span class="mdb-payload">[[data]]</span>
##edit## ##delete####delcheck##<span class="mdb-user">##user##</span>
</div>

Kopf und Fusszeile kann man leer lassen.

Die anderen Ansichten kann man so belassen, wie sie von Moodle angelegt werden, da weder durch Lernende noch Lehrende ein direkter Zugriff erforderlich ist.

Statt die Datenbank selbst anzulegen, kann man die Vorlage „Datenspeicher“ nutzen.

In den Einstellungen der Datenbankaktivität lohnt es sich aus Sicherheitsüberlegungen und für eine bessere Leistung bei den Einträgen „Freigabe erforderlich“ auf „Ja“ zu setzen. Damit wird sichergestellt, dass Lernende nur ihre eigenen Einträge sehen können. Den Rest der Einstellungen lässt man unverändert.

Wenn man möchte, kann man die Datenbank in den „Weiteren Einstellungen“ auf „Verfügbar, aber auf Kursseite nicht anzeigen“ setzen.

Damit eine Lehrperson nicht versehentlich den Eintrag eines Schülers oder einer Schülerin überschreiben kann, setzt man bei den Rechten für den Trainer „Einträge verwalten“ auf „Verbieten“.

Anpassen der Rechte für die Lehrperson in der Datenbankaktivität.

Zuletzt notiert man sich drei Zahlen, welche für die im Weiteren verwendeten JavaScript-Dateien wichtig sind:

    1. Die ID aus der URL der Datenbankaktivität:
      https://DOMAIN/moodle/mod/data/view.php?id=30170
    2. Die Nummern der beiden Felder „taskid“ und „data“. Diese findet man, wenn in der Ansicht „Neuer Eintrag“ die beiden Eingabefelder untersucht:
      Die Entwickleransicht im Browser erlaubt das Auslesen der Feldnummer.
      In der Abbildung findet sich in der markierten Zeile die Zeichenkette „field_3292“, die Nummer für taskid ist also 3292. Genau gleich geht man für das Feld „data“ vor, meist ist diese Nummer eins höher als die für taskid: 3293.

Wichtig: Stellt man den Kurs an anderer Stelle wieder her, ändern sich diese Nummern.

Wenn man die mitgelieferte Datenbankvorlage verwendet, werden die benötigten Angaben beim Anlegen eines neuen Eintrags angezeigt, ohne dass man diese von Hand auslesen muss.

Damit ist die Datenbank bereit für die Verwendung.

Wie viele solche Datenbanken man in einem Kurs benötigt, hängt von der Anzahl der Lernenden und der interaktiven Elemente ab. Wenn möglich empfiehlt es sich, pro Buch eine solche Datenbankaktivität anzulegen.

2) Scripte zur Verfügung stellen und anpassen

Damit die Datenbankaktivität als Speicher in Moodle verwendet werden kann, müssen auf den entsprechenden Moodle-Seiten die Scripte für die Lernenden und die Lehrenden eingebaut werden.

Dies kann beispielsweise mit Textblöcken in der Seitenleiste geschehen (vorher Editor umstellen).

Wichtig ist dabei: Die weiter oben erwähnten Zahlenwerte müssen in die jeweiligen Scripte eingetragen werden.

Für das Script für die Lernenden sieht das so aus:

const CONFIG = {
    DB_ID: "30170",
    FIELD_TASKID: "3292",
    FIELD_DATA: "3293",
    PERPAGE: 1000
};

Das Script für die Lernenden formatiert anschliessend die Eingabeformulare, speichert die Daten in der Datenbankaktivität und liest sie von dort auch wieder für die Moodle-Seite aus. Dies passiert automatisch im Hintergrund.

Texte von Schülerinnen und Schülern werden automatisch gespeichert, wenn diese das Eingabefeld verlassen oder zu einer anderen Webseite navigieren. Optionen werden ebenfalls zu diesen Zeitpunkten gespeichert, zusätzlich 5 Sekunden nach der letzten Änderung. Damit keine Daten verloren gehen, werden diese zusätzlich lokal gespeichert.

Für das Script für die Lehrenden sieht das so aus.

const CONFIG = {
    DB_ID: "30170",
    PERPAGE: 1000
};

Bei sehr grossen Gruppen kann der Parameter PERPAGE erhöht werden. Das ist aber nur im Script der Lehrperson notwendig, da einzelne Schülerinnen und Schüler kaum 1000 Einträge schreiben.

Das Script für die Lehrenden zeigt die Antworten der Schülerinnen und Schüler in einer Gesamtübersicht oder für eine einzelne Aktivität an. Ausserdem können auch die Antworten einer einzelnen Person angezeigt werden. Zusätzlich ist ein CSV-Export möglich.

Ansicht für Lehrperson auf die Schülerdaten.

Die Scripte für Lernende und Lehrende können als dbstore_scripts heruntergeladen werden.

3) Interaktive Seite gestalten

Auf der interaktiven Seite können beliebige HTML-Elemente eingebaut werden. Für die eigentlichen Eingabemöglichkeiten für Lernende passt man den HTML-Code der Seite wie folgt an.

Für eine Auswahl (Checkliste)

Für die Auswahl muss die Klasse „mdb_options“ verwendet werden und eine innerhalb der Datenbankaktivität eindeutige ID.

<div id="aufgabe-checkliste" class="mdb_options">
<p>Fragestellung</p>
<p>Option A</p>
<p>Option B</p>
<p>Option C</p>
</div>

Eine Aktivität kann einen Titel (<h1> … <h6>) enthalten. Der erste Abschnitt wird als Anweisung verwendet, alle weiteren als Kriterien, die abgehakt werden können.

Checkliste mit Auswahlmöglichkeiten

Für eine Auswahlliste

Für eine Auswahlliste muss die Klasse „mdb_choice“ verwendet werden und ebenfalls eine eindeutige ID vergeben werden.

<div id="aufgabe-auswahlliste" class="mdb_choice"> 
<p>Fragestellung</p> 
<p>Option A</p> 
<p>Option B</p> 
<p>Option C</p> 
</div>

Eine Aktivität kann einen Titel (<h1> bis <h6> enthalten. Der erste Abschnitt wird als Anweisung verwendet, aus allen weiteren kann eine Möglichkeit ausgewählt werden. Durch erneutes Anklicken einer Auswahl, wird diese wieder deaktiviert.

Mit der Auswahlliste können Lernende eine von verschiedenen Möglichkeiten auswählen.

Für einen Freitext

Für den Freitext muss die Klasse „mdb_essay“ verwendet werden und ebenfalls eine eindeutige ID vergeben werden.

<div id="aufgabe-freitext" class="mdb_essay">
<p>Schreibe hier deine Antwort hin …</p>
</div>

Der gesamte Text innerhalb des <div>-Elements wird als Anweisung verwendet.

Auch Freitexteingaben sind mithilfe des Scripts möglich.

Für eine Tabelle

Für eine Tabelle muss die Klasse „mdb_table“ verwendet werden und eine innerhalb der Datenbankaktivität eindeutige ID.

<div id="aufgabe-tabelle" class="mdb_table"> 
<table>
...
</table>
</div>

Die erste Zeile einer Tabelle wird als Kopf der Tabelle verwendet, dort kann man beispielsweise die Spaltentitel einfügen. Alle weiteren leeren Zellen einer Tabelle werden automatisch in Eingabefelder verwandelt. Zellen mit einem bereitgestellten Inhalt können von den Schülerinnen und Schülern nicht bearbeitet werden.

Tabellen bieten eine einfache Möglichkeit, Antworten strukturiert festzuhalten.

Alle Tabellen lassen sich automatisch um weitere Zeilen erweitern, indem man am Ende der Tabelle auf die „+ Add row“-Schaltfläche klickt.

Spezielle Elemente innerhalb einer Tabelle oder eines Formulars

In einer Tabelle (class=“mdb_table“) oder einem Formular (class=“mdb_forms“) können Textfelder, Auswahl- und Checklisten eingefügt werden. Damit lassen sich komplexere Interaktionen umsetzen.

    • Textfelder
      Textfelder werden mit {txt} eingefügt. Werden diese ohne weitere Parameter verwendet, nehmen sie die ganze Breite des umschliessenden HMTL-Elements ein und werden als Block angezeigt. Mit {txt|inline} kann ein einzeiliges Textelement in einen Fliesstext eingefügt werden. Die Breite des Elements kann mit {txt|inline:12} fixiert werden.
    • Auswahllisten
      Auswahllisten können mit {rb:Auswahl 1|Auswahl 2|Auswahl 3} definiert werden. Dabei werden die einzelnen Wahlmöglichkeiten untereinander dargestellt. Mit {rb|h:Auswahl 1|Auswahl 2|Auswahl 3} werden die Möglichkeiten nebeneinander dargestellt.
    • Checkliste
      Eine Auswahlmöglichkeit in einer Checkliste kann mit {cb|Kriterium 1} dargestellt werden. Solche Einträge können neben- oder untereinander platziert werden.

Daten abrufen

Wird zusätzlich zur entsprechenden Klasse und ID die Klasse „mdb_readonly“ vergeben, kann der Eintrag nur gelesen, aber nicht verändert werden. Das ist praktisch, wenn man früher eingegebene Antworten an einer anderen Stelle verwenden möchte.

Die Klasse "mdb_readonly" verhindet das Editieren eines Inhalts.

Die Ansicht für Lehrpersonen

Die Ansicht für Lehrpersonen wird über das Script dbstore_teacher.html zur Verfügung gestellt. Dieses kann in einem Block zur Verfügung gestellt werden, bei dem man allgemeinen Teilnehmenden in Moodle die entsprechende Berechtigung entzieht, wodurch der Block nur für Lehrpersonen sichtbar bleibt.

Weil die Lehrperson auf viel mehr Daten zugreift als die Schülerinnen und Schüler, wird die Abfrage erst gestartet, wenn man auf die entsprechende Schaltfläche klickt und nicht bei jedem Aufruf der Seite.

Die Lehrperson kann die Daten entweder in einer Gesamtschau überblicken, die Aktivitäten einzelner Lernenden anzeigen oder nach Aufgabentyp (via ID der Aufgabe) filtern lassen.

Ein anonymer Modus blendet die Namen der Schülerinnen und Schüler aus. Ausserdem kann die Reihenfolge der Lernenden zufällig angeordnet werden. Die Einstellung für die anonyme Ansicht wird im Browser lokal gespeichert, sodass bei einem Wechsel auf eine andere Aufgabenstellung die Anonymität der Lernenden automatisch sichergestellt ist.

Tipps und Tricks

Beim Bereitstellen von Aktivitäten mit interaktiven Elementen haben sich folgende Vorgehensweisen bewährt:

    • Für jedes Buch oder jeden Themenbereich (z. B. Deutsch > Kurzgeschichten) legt man eine entsprechende Datenbank in einem Kurs an.
    • Für die Datenbank selbst legt man eine Vorlage an, die dann immer wieder verwendet werden kann.
    • Aktivitäten, welche auf einer einzelnen Moodle-Seite Platz finden, kann man einfach duplizieren und anschliessend deren Inhalt ersetzen. Das erspart das erneute Aufspielen der Scripte in einem Blockelement.
    • Wenn möglich arbeitet man für die einzelnen interaktiven Elemente mit Textvorlagen, die man anschliessend einsetzen kann. Verfügt man über ein Makrosystem in Moodle (beispielsweise Generico, Course Elements, Components for Learning oder andere) kann man die entsprechenden Elemente damit vordefinieren, was den Wechsel in die Code-Ansicht eines Kurses erspart.
    • Zum Einstieg empfiehlt es sich, die einfachen Elemente wie Freitext oder Tabelle zu verwenden.

Verwendung im Unterricht

Die Scripte zum Einbetten von interaktiven Elementen auf einer Buchseite wurden ursprünglich für das Fach Berufliche Orientierung entwickelt, damit Schülerinnen und Schüler (abgesehen von sich wiederholenden Aktivitäten wie Schnupperlehren) ihren ganzen Berufswahlprozess an einer Stelle dokumentieren können. Unterdessen hat sich aber gezeigt, dass die Technik auch an anderer Stelle gewinnbringend eingesetzt werden kann:

    • Zur Interpretation von Gedichten und Liedtexten:
      Dabei werden die Gedicht- oder Liedzeilen einzeln in eine Tabelle kopiert und die Schülerinnen und Schüler können dann zu jeder Zeile ihre Gedanken und Interpretationen festhalten.
    • Zur Einbettung von offenen Fragestellungen:
      Zu einer Kurzgeschichte werden offene Fragen gestellt. Mit dem Plugin embed questions filter ist hier eine Umsetzung beispielsweise technisch nicht möglich, weil die Antworten in einer eingebetteten Essay-Frage gar nicht gespeichert werden.
    • Zur Reflexion des Gelernten:
      Eingebaute Textfelder ermöglichen es den Schülerinnen und Schülern, Gelerntes zu reflektieren. Diese Gedanken können dann dank des anonymen Modus in der Lehreransicht auch im Klassenverband besprochen werden.

Insgesamt hat die Verwendung der Datenbank als Informationsspeicher dazu geführt, dass der Grad der Interaktivität für Lernende in einer Moodle-Umgebung erweitert werden konnte. Dadurch werden Lernspuren besser sichtbar.  Zusätzlich kann die Lehrperson Lernende auf interessante Gedanken und Lösungshinweise aufmerksam machen, ohne einzelne Schülerinnen und Schüler zu exponieren.