Lektion 7.4: Ladereihenfolge und Abhängigkeiten
Wenn zwei Erweiterungen dieselbe Einstellung setzen oder dasselbe Template liefern, gewinnt eine von ihnen, und die
Reihenfolge der aktiven Erweiterungen entscheidet, welche. In dieser Lektion sehen die Teilnehmenden die Reihenfolge
bei der Arbeit, deklarieren in extension.xml, worauf ihre Erweiterung aufbaut, und lesen auf der Seite
Extensions ab, wo jede Erweiterung tatsächlich geladen wird.
Auf einen Blick
| Kurs | Entwickler |
| Modul | Modul 7: Erweiterungen |
| Dauer | 40 Minuten (15 Präsentation, 25 Übung) |
| Niveau | Experten |
| Zielgruppe | Entwickler |
| Voraussetzungen | Lektion 7.3 |
Lernziele
Nach dieser Lektion können die Teilnehmenden:
- erklären, dass eine früher geladene Erweiterung bei Einstellungen und Design-Templates gewinnt;
- mit
exp:ini whereherausfinden, aus welcher Erweiterung eine Einstellung stammt; <extends>,<requires>und<uses>inextension.xmldeklarieren;- erklären, was
[ExtensionSettings] ExtensionOrdering=enabledändert; - unter Setup > Extensions die tatsächliche Ladeposition ablesen.
Hinweise für Trainer
So präsentieren Sie es
Quellen: Abhängigkeiten in extension.xml deklarieren, Ladereihenfolge der Erweiterungen und Die Seite Extensions.
Wer gewinnt (4 Minuten). Die Reihenfolge von
ActiveExtensions[]entscheidet: Eine früher geladene Erweiterung gewinnt bei Einstellungen und Design-Templates.exp:ini wherelistet jede Datei auf, die eine Variable setzt, in Ladereihenfolge, und den wirksamen Wert.Abhängigkeiten (5 Minuten). In
extension.xml, nach<metadata>:Element Lädt Ihre Erweiterung Verwenden Sie es für <extends>vor der genannten (Ihre gewinnt) Das Überschreiben von Templates oder Einstellungen einer Basiserweiterung <requires>nach der genannten Etwas, ohne das Ihre nicht funktioniert <uses>nach der genannten Etwas, das Ihre verwendet, wenn es vorhanden ist Der Kernel liest sie in
ezpExtension::getLoadingOrder(), wennExtensionOrdering=enabledgesetzt ist. Sie ordnen nur aktive Erweiterungen:<requires>aktiviert die andere nicht.Die Seite (3 Minuten). Unter Setup > Extensions zeigt jede Karte, wo die Erweiterung tatsächlich geladen wird (Geladen als Nummer n), wenn Abhängigkeiten sie verschieben; Verschiebungen werden geprüft, bevor sie geschrieben werden.
Auch Composer (2 Minuten). Dieselben Abhängigkeiten gehören in
composer.json(requireodersuggest), damit Composer installiert, was gebraucht wird.
Häufige Fragen
Warum hat das Template meines Themes nicht gegen das eines anderen Themes gewonnen? Die andere Erweiterung wird
früher geladen oder deklariert, dass sie Ihre erweitert. Lesen Sie die Reihenfolge und die Blöcke <extends>.
Legt eine fehlerhafte extension.xml die Website lahm? Sie wird in der Debug-Ausgabe gemeldet, und ihre
Ladereihenfolge wird ignoriert; prüfen Sie sie mit xmllint.
Sollte jede Erweiterung Abhängigkeiten deklarieren? Jede Erweiterung, die eine andere überschreibt oder braucht, ja; so wird die Reihenfolge erklärbar statt zufällig.
Stolperfallen
- Die Reihenfolge auf einer Live-Website von Hand ändern. Verwenden Sie die Seite Extensions oder
exp:inimit einer Prüfung; eine falsche Reihenfolge kann Templates auf der ganzen Website verändern. <requires>als Installationsprogramm. Es ordnet; es installiert und aktiviert nichts.- Unterschiedliche Reihenfolge in Entwicklung und Live-Betrieb. Die Einstellungen kommen auf jedem Rechner aus
anderen Dateien; vergleichen Sie auf beiden mit
exp:ini get site.ini/ExtensionSettings/ActiveExtensions.
Praktische Übung
Auf der Entwicklungsinstallation.
Zeigen Sie die Reihenfolge der aktiven Erweiterungen an:
php bin/php/console exp:ini get site.ini/ExtensionSettings/ActiveExtensions.Prüfen Sie, ob die Sortierung nach Abhängigkeiten eingeschaltet ist:
php bin/php/console exp:ini where site.ini/ExtensionSettings/ExtensionOrdering.Suchen Sie eine Einstellung, die mehrere Erweiterungen setzen, zum Beispiel
php bin/php/console exp:ini where design.ini/ExtensionSettings/DesignExtensions <sa>, und lesen Sie, welche Datei zuerst kommt.Lesen Sie einen echten Abhängigkeitsblock:
grep -A8 "<dependencies>" extension/*/extension.xml | head -40.Fügen Sie Ihrer
extension.xmlnach</metadata>eine Abhängigkeit hinzu:<dependencies> <uses> <extension name="ezjscore" /> </uses> </dependencies>Prüfen Sie sie:
xmllint --noout extension/mysite_hello/extension.xml.Leeren Sie den INI-Cache (
php bin/php/ezcache.php --clear-tag=ini) und öffnen Sie Setup > Extensions. Suchen Sie, womysite_hellogeladen wird.Committen Sie
extension.xmlmitUpdated: Declare the use of ezjscore.
Erwartetes Ergebnis
- Schritt 1: die Liste in Ladereihenfolge, mit
mysite_hellodarin. - Schritt 3: mehrere Dateien in Ladereihenfolge, am Ende der wirksame Wert.
- Schritt 6: keine Ausgabe.
- Schritt 7: die Karte von
mysite_hello; mitExtensionOrdering=enabledwird sie nachezjscoregeladen. - Der Trainer fragt alle Teilnehmenden, welches Element sie für ein Theme verwenden würden, das die Templates eines anderen Themes ändert.
Quiz
- Zwei Erweiterungen liefern dasselbe Template. Welche gewinnt?
- Ihr Theme überschreibt Templates eines Basis-Themes. Welches Element deklarieren Sie?
A.
<requires>B.<uses>C.<extends>D.<metadata> - Welche Einstellung lässt den Kernel die Erweiterungen nach ihren deklarierten Abhängigkeiten ordnen?
- Aktiviert
<requires>die andere Erweiterung? - Welcher Befehl listet jede Datei auf, die eine Variable setzt, in Ladereihenfolge?
Antworten
- Die Erweiterung, die in der Reihenfolge der aktiven Erweiterungen früher geladen wird.
- C.
<extends>lädt Ihre vor der Basis, sodass Ihre gewinnt. site.ini [ExtensionSettings] ExtensionOrdering=enabled.- Nein; es ordnet nur aktive Erweiterungen.
exp:ini where <file>/<block>/<variable>.
Weiterführende Literatur
- Abhängigkeiten in extension.xml deklarieren.
- Die Ladereihenfolge und welches Theme gewinnt.
- Ladereihenfolge der Erweiterungen.
Verwandte Seiten
- Modul 7: Erweiterungen
- Entwickler: Kursüberblick
- Trainer: hier beginnen
- Freie Dokumentation: Diese Seite darf unter der GNU FDL 1.3 frei kopiert, übersetzt und verbessert werden.
Werden Sie Exponential-Partner
Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.