Ergebnis 1 bis 13 von 13

Thema: Reihenfolge der Initialisierung von Contao-Modulen beeinflussen

  1. #1
    Contao-Nutzer
    Registriert seit
    11.12.2013.
    Beiträge
    3

    HTML Reihenfolge der Initialisierung von Contao-Modulen beeinflussen

    Hallo an alle,

    ich beschäftige mich mittlerweile sehr viel mit der Entwicklung von Contao-Modulen, alles soweit kein Problem, funktioniert super.

    Jetzt bin ich allerdings auf ein erstes größeres Problem gestoßen und ich weiß aktuell noch nicht wie ich es angehen soll.

    Ich habe ein Element-Modul gemacht, welches die Core-Elemente und Core-Module um viele nützliche Funktionen erweitert. Beispielsweise komplette Bootstrap-Unterstützung der einzelnen Elemente, Carousel, Tab-Modul, Autogrid etc. pp. Hier bearbeite ich unter anderem dynamisch die Paletten, Callback-Funktionen und füge auch dynamisch zu allen vorhandenen Paletten neue Legenden hinzu.

    Es müsste sicher gestellt werden, dass dieses Modul, ganz gleich welche Contao-Module noch so vorhanden sind, immer am Ende initialisiert wird, da ansonsten das Modul auf evtl. später initialisierte Module keinen Einfluss mehr hat.

    Ich habe gesehen, dass ich über die autoload.ini Abhängigkeiten bestimmen kann. Allerdings kann ich in diesem Fall nicht damit arbeiten, weil mein Modul ja eben von keinem anderen Modul abhängig ist und das wäre für mich nur eine Notlösung.

    Hat sich damit schon jemand beschäftigt und kann mir weiterhelfen?

    Ich freue mich über jeden Tipp und jeden Gedankenansatz.

    P.s.: Eine Möglichkeit wäre evtl. initial beim ersten Modulaufruf, dass ich die autoload.ini mit PHP modifiziere und eine Abhängigkeit auf das letzte Modul setze. Spätestens bei einem neuen Modul, welches weiter hinten im ABC kommt wäre jedoch wieder alles für die Katz. Von den Probleme mit GIT mal ganz abgesehen... Kein leichtes Thema

  2. #2
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Nenn dein Modul einfach zzz_* dann wird es automatisch am Ende geladen


    Gesendet von meinem iPhone mit Tapatalk
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  3. #3
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.086
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Ja, bis einer auf die gleiche idee kommt und sein Modul zzzz_* nennt.

  4. #4
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard Reihenfolge der Initialisierung von Contao-Modulen beeinflussen

    Ja das mag sein, aber normalerweise werden nur solche Hilfs Module so genannt und keine Slider etc. Daher ist die Chance sehr groß alles zu erwischen was davor geladen wird. Ansonsten halt das Modul zzzzzzzzzzz_* nennen


    Gesendet von meinem iPhone mit Tapatalk
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  5. #5
    Contao-Nutzer
    Registriert seit
    11.12.2013.
    Beiträge
    3

    Standard Etwas unschön...

    Hi ihr beiden,

    vielen Dank schon mal für eure Antworten. Das wäre natürlich eine Lösung, allerdings ist es eben auch unschön und funktioniert nur in 99% der Fälle.

    Mich würde interessieren, ob es evtl. auch noch eine ganz saubere Lösung gibt, die "immer" funktioniert.

    Vielleicht eine Hauptkonfiguration oder über eine manuelle Sortierung via Einstellungen?!

    Gibt es hier evtl. schon eine Erweiterung?

    Ich fände es auch sinnvoll wenn sowas im Core wäre, sprich Standard-Sortierung ABC, aber ich kann manuell über die Einstellungen umsortieren wie bei den CSS-Files beispielsweise.

    Vielleicht hat ja noch jemand Ideen.

    Greetz

  6. #6
    Contao-Fan
    Registriert seit
    09.09.2009.
    Beiträge
    366

    Standard

    Seit Contao 3.X ist es nicht mehr nötig mit zzzz... zu arbeiten. Über die autoload.ini können requirements gesetzt werden.

    Code:
    ;;
    ; List modules which are required to be loaded beforehand
    ;;
    requires[] = "core"
    requires[] = "event-dispatcher"

  7. #7
    Contao-Nutzer
    Registriert seit
    11.12.2013.
    Beiträge
    3

    Computer requirements

    Hi typo,

    ja, ich hatte ja schon gesagt, dass ich dies bereits gesehen habe mit den Abhängigkeiten der autoload.ini. Aber auch das ist nicht ausreichend, folgendes Beispiel:

    Ich habe 4 Module:
    - sg-autogrid
    - sg-elements
    - sg-contacts
    - sg-mediacenter

    Alle Module können unabhängig voneinander laufen.

    Wenn die Module jedoch in einer bestimmten Konstellation zusammenlaufen, müssen sie in einer bestimmten Reihenfolge geladen werden, damit die 100%ige Funktionalität aller Module gewährleistet ist.

    Beispiel:

    Kunde A bekommt nur Modul:
    - sg-elements

    Kunde B bekommt Module:
    - sg-elements
    - sg-mediacenter

    sg-elements muss aber "nach" sg-mediacenter geladen werden. Jetzt könnte ich eine Abhängigkeit rein machen in sg-elements auf sg-mediacenter. Bei Kunde A wirft das ganze jedoch dann einen Fehler, weil sg-mediacenter nicht verfügbar ist.

    Ich habe ein bisschen rumgestöbert und habe das hier im Repo gefunden:
    https://github.com/contao/core/issues/6835

    Dort steht, dass man optionale Abhängigkeiten mit einem * setzen kann. Das hilft mir nun schon mal extrem weiter, da ich alle Module mit optionalen requirements ausstatten kann.

    Schön wäre jedoch zukünftig trotzdem, wenn man sagen könnte, dass eine Erweiterung nach allen anderen initialisiert wird, damit auch "unbekannte" Module mit Hilfserweiterungen ausgestattet werden können (z.B. Autogrid-Möglichkeit für neue Inhaltselemente).

    Vielleicht möchte noch jemand was einwerfen, der mehr weiß als wir, ansonsten komme ich mit dem * jetzt erstmal zurecht ;-)

    Merci sg

  8. #8
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von typo Beitrag anzeigen
    Seit Contao 3.X ist es nicht mehr nötig mit zzzz... zu arbeiten. Über die autoload.ini können requirements gesetzt werden.

    Code:
    ;;
    ; List modules which are required to be loaded beforehand
    ;;
    requires[] = "core"
    requires[] = "event-dispatcher"
    Typo, das ist falsch! Die Requirements sind lediglich dazu da um "Abhängigkeiten" zu setzen und nicht die Position eines Moduls. Es ist dir damit eben NICHT möglich die eigene Erweiterung erst am Ende zu laden! Es sei denn du kennst ALLE Erweiterungen die es in diesem System gibt und lädst diese vorab. Es ist also sehr wohl weiterhin nötig mit "zzzz" zu arbeiten. Auch wenn es nur eine 99% Lösung ist, ist diese wesentlich effektiver als die autoload.ini
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  9. #9
    Contao-Urgestein
    Registriert seit
    29.10.2009.
    Ort
    Magdeburg
    Beiträge
    2.020
    Partner-ID
    626
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von the_scrat Beitrag anzeigen
    Typo, das ist falsch! Die Requirements sind lediglich dazu da um "Abhängigkeiten" zu setzen und nicht die Position eines Moduls. Es ist dir damit eben NICHT möglich die eigene Erweiterung erst am Ende zu laden! Es sei denn du kennst ALLE Erweiterungen die es in diesem System gibt und lädst diese vorab. Es ist also sehr wohl weiterhin nötig mit "zzzz" zu arbeiten. Auch wenn es nur eine 99% Lösung ist, ist diese wesentlich effektiver als die autoload.ini
    Doch genau das macht die Angabe. Es stellt sicher, dass die angegebenen module davor geladen werden.

  10. #10
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    ??? Woher weißt du denn welche Module im jeweiligen System überhaupt vorhanden sind?

    Meiner Meinung ist die autoload.ini nur für eine Positionierung/Ladereihenfolge da, von sicher existierenenden Erweiterungen.

    Also wenn ich eine Erweiterung für isotope entwickle, welche benötigt, dass Isotope geladen ist, dann gebe ich das per autoload.ini an requires[] = "isotope". Das ist EINE Abhängigkeit bei der ich aber weiß dass es isotope gibt.
    Ich bin gespannt wie du ein Modul an die letzte Position setzen möchtest per autoload.ini....
    Geändert von the_scrat (16.01.2015 um 18:37 Uhr)
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  11. #11
    Contao-Urgestein Avatar von folkfreund
    Registriert seit
    09.04.2010.
    Beiträge
    1.928

    Standard

    Und was passiert, wenn noch ein anderer Entwickler seine Erweiterung am Ende laden will, aus genau so guten Gründen?
    Ich glaube, du kannst immer ein Gegenbeispiel finden.

    folkfreund

  12. #12
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von folkfreund Beitrag anzeigen
    Und was passiert, wenn noch ein anderer Entwickler seine Erweiterung am Ende laden will, aus genau so guten Gründen?
    Ich glaube, du kannst immer ein Gegenbeispiel finden.

    folkfreund
    Das hat doch nichts mit Gegenbeispielen zu tun. Bisher wurden Erweiterungen die am Ende geladen werden sollen einfach mit "z" oder "zzzz" gekennzeichnet und daran hat sich nichts geändert. Daran ändert auch die autoload.ini nichts.

    typo sagt es wäre seit Contao 3.x nicht mehr notwendig und das ist m.M. falsch. Dafür ist die Autoload.ini auch nicht da, sondern nur um das eigene Modul in Abhängigkeit zu anderen Modulen zu setzen die notwendig sind damit das eigene Modul korrekt läuft, nicht mehr und nicht weniger.
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  13. #13
    Administratorin Avatar von lucina
    Registriert seit
    19.06.2009.
    Ort
    Kiel (DE)
    Beiträge
    7.337
    Partner-ID
    152
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    "Der Schlüssel requires bestimmt, von welchen anderen Erweiterungen die Erweiterung abhängig ist. Die Erweiterungen werden dann in der entsprechenden Reihenfolge geladen. Es können beliebig viele requires angegeben werden."

    https://contao.org/de/cookbook/3.3/a...l#autoload-ini


    Sent from my iPhone using Tapatalk

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •