Indi-Learning 2021 - Moodle-Hacks
Grundlagen
Ziel
Client seitig - auch ohne Administratorenrechte - die Darstellung im Kurs verändern oder neue Funktionen hinzufügen
Voraussetzungen und Fallstricke
In einem eigenen Moodle weichen u.a. aufgrund ggfs. einer anderen Version oder eines anderen Themes oder eines anderen Kursformats die Pfade und die CSS-Klassen der verschiedenen DOM-Elemente ab, ebenso die Basis-Domaine der jeweilige Moodle-Instanz. Die Beispiele müssen daher angepasst werden!
In der kommenden 4er Moodle Version könnte es sein, dass ohne Bootstrap evtl. kein System eigenes jQuery mehr enthalten ist.
- Trainer- bzw. Lehrerrechte in einem eigenen, während der Entwicklung
nicht produktiv genutzten Kurs
- zumindest während der Bearbeitung deaktivierter Script-Protection Filter
- Lokaler Texteditor mit Syntax-Highlighting.
Ein im gleichen Browser wie der Testkurs genutzter online-Texteditor
ist ungeeignet, falls durch einen Fehler im Skript der Browser
einfrieren oder abstürzen sollte.
- Falls im Skript-Bereich URLs mit https:// vorkommen, kann es sein, dass der URL als Link oder Bild anzeigen Filter diese mit umwandelt und dadurch das Skript zerschießt.
Vorgehen und Workflow
- Das gewünschte Ziel-Element wird in den Entwickler-Werkzeugen im Inspektor angesteuert und der CSS-Pfad wird erstmal auf Vorrat in eine lokale Textdatei kopiert. Dieser wird anschließend auf die notwendigen Elemente gekürzt.
- In der Konsole im Browser wird testweise der eigentliche "Netto"-Befehl ausprobiert. Hier bietet sich eine Kombination aus jQuery mit dem gefundenen CSS-Selektor an.
- Wenn alles funktioniert, wird eine lokale Skript-Datei bzw. eine lokale HTML-Datei angelegt, in welcher die Funktionen zum Nachladen und ggfs. auch Schaltflächen eingetragen werden.
- Je nach gewünschter Platzierung nur auf einer Kursseite oder auf allen Kursunterseiten oder auch den Unterseiten der Aktivitäten wird der vorbereitete Quelltextschnipsel im HTML-Bearbeitungsmodus in ein Textfeld oder in einen Textblock mit den entsprechenden Sichtbarkeitseinstellungen hineinkopiert.
- Wenn nach dem Abspeichern alles funktioniert - prima!
Falls noch Fehler auftreten, diese testweise schrittweise
ausprobieren und alle Änderungen immer auch in die
lokale Sicherungsdatei es HTML-Quelltextschnipsels mit übernehmen.
- Vor der Nutzung in einem produktiv genutzten Kurs immer auch in verschiedenen Benutzerrollen und Kursformaten ausprobieren, damit man sich nicht "aussperrt".
Informationen über den aktuellen Nutzer oder die aktuelle Kursumgebung auslesen
Falls bei der Konstruktion eines auszuführenden Links Informationen über den aktuellen Benutzer bzw. die aktuelle Kursumgebung erforderlich sind, so finden sich diese in der Variablen M
- M.cfg.wwwroot ⇒ die Skripte auf andere Moodle-Instanzen übertragbar machen
- M.cfg.contextid
- M.cfg.sesskey ⇒ häufig für übergebene Formulareingaben erforderlich
- M.cfg.theme ⇒
evtl. für eine Weiche bei unterschiedlicher Adressierung von Elementen bei verschiedenen Themes
- $('input[type=hidden][name=edit]').length == 1 ⇒ Trainer oder Lehrerrolle (der Bearbeiten Button ist dann im Kurs verfügbar, wenn nicht, wird 0 zurückgegeben)
Inhalte oder Skripte verzögert nachladen
Probleme bzw. Schwierigkeiten:
- Wenn eine Funktion bereits beim Laden einer Kursseite ausgeführt werden soll und wenn diese jQuery benötigt, kann es zu Konflikten führen, wenn dieses noch nicht zur Verfügung steht
- Wenn eine feste jQuery Version von einem externen CDN nachgeladen wird, ist das einerseits schon wegen der Übertragung der IP-Adresse ein Datenschutzproblem als auch aus Sicherheitsaspekten problematisch, wenn diese Version zukünftig veraltet und Sicherheitslücken aufweist. Eine manuelle Nachpflege ist zu aufwändig.
Lösungsansatz:
- Es wird das Moodle eigene jQuery mit require nachgeladen.
Quelltextschnipsel:
Ein bestimmtes Element auf der Seite adressieren
Beispiele
- Eine andere Schaltfläche soll ausgelöst werden, ohne diese direkt anzuklicken, z.B. Tabs in einem Kurs im Ein-Themen-Format aus einem Inhaltsverzeichnis im ersten Abschnitt heraus
- Eine Schaltfläche soll ausgeblendet werden, z.B. in einem Kurs die Mitteilungen während eines Tests
Inhaltsverzeichnis im Ein-Themen-Format

Inhaltsverzeichnis im Themen-Format

Schaltfläche zum Einblenden der Mitteilungsleiste oben in der Navbar ausblenden

Alle Elemente eines bestimmten Typs ansprechen
Beispiele
- Es sollen alle externen Links oder alle Aktivitäten eines bestimmten Typs auf einer Kursseite auf einmal in neuen Tabs geöffnet werden (Pop-Ups müssen ggfs. im Browser erlaubt werden)
- Es soll eine Sammel-E-Mail an alle Kursteilnehmer mit hinterlegter E-Mailadresse über einen E-Mail-Client, nicht das Mitteilungssystem verfasst werden
E-Mailadressen als Text ausgeben
E-Mails verfassen
Informationen von einer anderen Kursunterseite holen und neu zusammenführen
Beispiele
- Testergebnisse sollen in einer ausdruckbaren Form erzeugt werden

