Ergebnis 1 bis 29 von 29

Thema: Bundle Ladereihenfolge

  1. #1
    Contao-Nutzer
    Registriert seit
    17.07.2013.
    Beiträge
    77

    Frage Bundle Ladereihenfolge

    Hallo an alle,
    ich hätte mal wieder eine Frage:

    Wie kann ich einem Bundle sagen das es erst geladen werden soll wenn ein definiertes vorher fertig geladen wurde?
    Ich möchte auf Funktionen einen anderen Bundle zugreifen, das asynchron Daten lädt und in einer Funktion zur Verfügung stellt.
    Leider ist das aber wohl nicht rechtzeitig fertig und ich bekomme den Fehler das es diese Funktion nicht gibt.

    Rufe ich die Funktion per Button auf, also später einfach dann klappt alles ohne Probleme...
    Dachte ich könnte das mit "require" in der composer.json machen aber das ändert nichts an der Ladereihenfolge wie es aussieht...

    Leider fand ich nichts passendes hier im Forum, sollte ich übersehen haben, würde mich ein Link freuen

  2. #2
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.512
    User beschenken
    Wunschliste

    Standard

    Im ContaoManager Plugin, welches jedes Contao Bundle mitbringt, kannst du ansagen über "setLoadAfter", das deines nach einem anderem geladen werden soll.
    Überlicherweise steht dort, das nach "ContaoCoreBundle" geladen werden soll. Das kann man erweitern.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  3. #3
    Contao-Nutzer
    Registriert seit
    17.07.2013.
    Beiträge
    77

    Standard

    Zitat Zitat von BugBuster Beitrag anzeigen
    Im ContaoManager Plugin, welches jedes Contao Bundle mitbringt, kannst du ansagen über "setLoadAfter", das deines nach einem anderem geladen werden soll.
    Überlicherweise steht dort, das nach "ContaoCoreBundle" geladen werden soll. Das kann man erweitern.
    Was meinst du mit ContaoManager Plugin? Im CM sehe ich die Option nicht...

    Ich nutze lokale Bundles die selber geschrieben wurden. Wo muss ich dort das "setLoadAfter" eintragen?
    Geändert von avus (31.01.2018 um 17:12 Uhr)

  4. #4
    Contao-Fan
    Registriert seit
    16.11.2012.
    Ort
    Freiburg
    Beiträge
    539

    Standard

    Zitat Zitat von avus Beitrag anzeigen
    Ich nutze lokale Bundles die selber geschrieben wurden. Wo muss ich dort das "setLoadAfter" eintragen?
    Das kommt in die Plugin.php
    Hier ein Beispiel
    https://github.com/contao/newsletter...in.php#L29-L31
    Grüße
    Alex

  5. #5
    Contao-Nutzer
    Registriert seit
    17.07.2013.
    Beiträge
    77

    Standard

    Zitat Zitat von 07alex07 Beitrag anzeigen
    Das kommt in die Plugin.php
    Hier ein Beispiel
    https://github.com/contao/newsletter...in.php#L29-L31
    Ah super danke... werde mir das mal genau anschauen

  6. #6
    Contao-Nutzer
    Registriert seit
    17.07.2013.
    Beiträge
    77

    Standard

    So ganz will es leider noch nicht, egal wie ich Namespace rein mache wird das ignoriert.

    Code:
    BundleConfig::create('Entwickler\ZweitesBundle\EntwicklerZweitesBundle')->setLoadAfter(
    [
    	'Contao\CoreBundle\ContaoCoreBundle',
    	'Entwickler\ErstesBundle\EntwicklerErstesBundle'
    ]),
    So habe ich es gerade probiert und schreibe einfach ein console.log wenn geladen wird.
    Aber immer kommt: zweites dann erstes... statt erstes dann zweites

  7. #7
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.094
    Partner-ID
    10107

    Standard

    Dein eigenes Bundle darfst du dort nicht angeben . Damit sagst du momentan, dass dein eigenes Bundle nach dem CoreBundle und nach deinem eigenen Bundle geladen werden soll.

  8. #8
    Contao-Nutzer
    Registriert seit
    17.07.2013.
    Beiträge
    77

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Dein eigenes Bundle darfst du dort nicht angeben . Damit sagst du momentan, dass dein eigenes Bundle nach dem CoreBundle und nach deinem eigenen Bundle geladen werden soll.
    Öhm ich glaube du hast dich verlesen...
    Mein eines Bundle heißt "erstesBundle" und das andere "zweitesBundle".

  9. #9
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.094
    Partner-ID
    10107

    Standard

    Tatsächlich. Poste mal den gesamten Code deines Contao Manager Plugins.

  10. #10
    Contao-Nutzer
    Registriert seit
    17.07.2013.
    Beiträge
    77

    Standard

    Code:
    <?php
    namespace Entwickler\ZweitesBundle\ContaoManager;
    
    use Contao\ManagerPlugin\Bundle\Config\BundleConfig;
    use Contao\ManagerPlugin\Bundle\BundlePluginInterface;
    use Contao\ManagerPlugin\Bundle\Parser\ParserInterface; 
    use Contao\CoreBundle\ContaoCoreBundle; 
    
    class Plugin implements BundlePluginInterface
    {
    	public function getBundles(ParserInterface $parser)
    	{
    		return
    		[
    			BundleConfig::create('Entwickler\ZweitesBundle\EntwicklerZweitesBundle')->setLoadAfter(
    			[
    				'Contao\CoreBundle\ContaoCoreBundle',
    				'Entwickler\ErstesBundle\EntwicklerErstesBundle'
    			]),
    		];
    	}
    }

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

    Standard

    Ähm, um welche Funktionalitäten geht es dir? Wenn du von asynchronen Funktionen sprichst, meinst du vermutlich Javascript. Das hat dann aber nichts mit den bundles tun, en da etwas asynchron geladen wird. Das müsste dann js-seitig angefangen werden.

    Oder habe ich hier eine falsche Annahme?

    Dein Plugin sieht sonst korrekt aus.

  12. #12
    Contao-Nutzer
    Registriert seit
    17.07.2013.
    Beiträge
    77

    Standard

    Zitat Zitat von webstar Beitrag anzeigen
    Ähm, um welche Funktionalitäten geht es dir? Wenn du von asynchronen Funktionen sprichst, meinst du vermutlich Javascript. Das hat dann aber nichts mit den bundles tun, en da etwas asynchron geladen wird. Das müsste dann js-seitig angefangen werden.

    Oder habe ich hier eine falsche Annahme?

    Dein Plugin sieht sonst korrekt aus.
    Natürlich wird später auch was mit JS gemacht.
    Im Moment lade ich in meinem Template eine JS-Datei und in der logge ich einfach wenn diese gestartet wurde.

    Aber leider bekomme ich die Logs immer verkehrt herum weswegen ich die Ladereihenfolge ändern möchte...

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

    Standard

    Und wie landen die JS-Dateien in der Ausgabe? Wo werden diese hinzugefügt?

  14. #14
    Contao-Nutzer
    Registriert seit
    17.07.2013.
    Beiträge
    77

    Standard

    Zitat Zitat von webstar Beitrag anzeigen
    Und wie landen die JS-Dateien in der Ausgabe? Wo werden diese hinzugefügt?
    Wie gesagt in meinem Template vom Bundle mit:
    Code:
    $GLOBALS['TL_JAVASCRIPT'][$modulName.'2']	= 'bundles/'.$modulName.'/js/bundle.js|static';

  15. #15
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.094
    Partner-ID
    10107

    Standard

    Ich hatte mich schon gewundert, warum du von console.log sprichst.

    Auf diese Weise findest du erstens nicht die Lade Reihenfolge der Bundles raus und zweitens kannst du nicht unbedingt davon ausgehen, dass die Reihenfolge der console.log Ausgabe mit dem was du erwartest übereinstimmt.

  16. #16
    Contao-Nutzer
    Registriert seit
    17.07.2013.
    Beiträge
    77

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Ich hatte mich schon gewundert, warum du von console.log sprichst.

    Auf diese Weise findest du erstens nicht die Lade Reihenfolge der Bundles raus und zweitens kannst du nicht unbedingt davon ausgehen, dass die Reihenfolge der console.log Ausgabe mit dem was du erwartest übereinstimmt.
    Hmmm wie kann ich das am besten dann überprüfen?

    Ich habe gerade auch mal beim zweiten Modul das "static" weg gemacht, dann stimmt zumindest die Log Ausgabe.

    Ich dachte das "static" erzeugt pro Bundle eine Datei aus allen JS-Dateien für Ladeoptimierung. Habe ich das falsch verstanden oder geht das über alle Bundles?

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

    Standard

    Zitat Zitat von avus Beitrag anzeigen
    Hmmm wie kann ich das am besten dann überprüfen?

    Ich habe gerade auch mal beim zweiten Modul das "static" weg gemacht, dann stimmt zumindest die Log Ausgabe.

    Ich dachte das "static" erzeugt pro Bundle eine Datei aus allen JS-Dateien für Ladeoptimierung. Habe ich das falsch verstanden oder geht das über alle Bundles?
    In welchen Template der bundles fügst du das JS ein? Ist das ein Frontend-Modul? Du könntest ja auch in deinem zweiten bundle erst das Script vom ersten bundle und dann vom zweiten bundle laden. Dann ist die Reihenfolge definiert.

  18. #18
    Contao-Nutzer
    Registriert seit
    17.07.2013.
    Beiträge
    77

    Standard

    Zitat Zitat von webstar Beitrag anzeigen
    In welchen Template der bundles fügst du das JS ein? Ist das ein Frontend-Modul? Du könntest ja auch in deinem zweiten bundle erst das Script vom ersten bundle und dann vom zweiten bundle laden. Dann ist die Reihenfolge definiert.
    Im Standard Template im entsprechenden Ordner... und ja es ist ein Frontend Bundle.
    Ja ich hatte auch schon daran gedacht eine funktion aufzurufen wenn das erste geladen ist, die aber eigentlich im zweiten sich befindet.
    Aber ob das die schöne Lösung ist...

  19. #19
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.094
    Partner-ID
    10107

    Standard

    Zitat Zitat von avus Beitrag anzeigen
    Ich dachte das "static" erzeugt pro Bundle eine Datei aus allen JS-Dateien für Ladeoptimierung. Habe ich das falsch verstanden oder geht das über alle Bundles?
    Alle JavaScript Dateien, die mit |static in TL_JAVASCRIPT hinzugefügt werden, werden zusammengefasst ausgegeben (sofern im Seitenlayout das so eingestellt ist).

  20. #20
    Contao-Fan Avatar von syncgw
    Registriert seit
    17.07.2012.
    Beiträge
    313

    Standard

    Hei,
    ich greife das Thema nochmal auf...

    Code:
        public function getBundles(ParserInterface $parser)
        {
            return [
                BundleConfig::create(Isotope_STINBundle::class)
                    ->setLoadAfter([ ContaoCoreBundle::class, Isotope::class ]),
            ];
        }
    Sollte eigentlich sicherstellen, dass meine Klasse (und DCA) erst nach Isotope geladen wird. Mein Problem besteht darin, dass ich ein DCA erweitern will
    Code:
    var_dump($GLOBALS['TL_DCA']['tl_iso_config']['palettes']);
    $GLOBALS['TL_DCA']['tl_iso_config']['palettes']['default'] .= ';{eu_stin_legend:hide},eu_stin_countries';
    Leider zeigt der var_dump nur ein Null an... und in Folge dessen ist die Anweisung wirkungslos.

    Hat jemand eine Idee, wie ich das Laden der DCA steuern kann?
    __________________________________________
    Live long and prosper
    Florian

    Spenden GitHub

  21. #21
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.094
    Partner-ID
    10107

    Standard

    Die Isotope Extension ist kein Bundle. Da schreibst du einfach nur 'isotope'.

  22. #22
    Contao-Fan Avatar von syncgw
    Registriert seit
    17.07.2012.
    Beiträge
    313

    Standard

    ja, das habe ich auch schon erfolglos versucht...
    Code:
        public function getBundles(ParserInterface $parser)
        {
            return [
                BundleConfig::create(Isotope_STINBundle::class)
                    ->setLoadAfter([ 'isotope' ]),
            ];
        }
    Hat auch nicht geholfen. Ich habe auch versucht die Isotope::Backend Klasse. Hat alles nicht funktioniert...
    __________________________________________
    Live long and prosper
    Florian

    Spenden GitHub

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

    Standard

    Zitat Zitat von syncgw Beitrag anzeigen
    ja, das habe ich auch schon erfolglos versucht...
    Code:
        public function getBundles(ParserInterface $parser)
        {
            return [
                BundleConfig::create(Isotope_STINBundle::class)
                    ->setLoadAfter([ 'isotope' ]),
            ];
        }
    Hat auch nicht geholfen. Ich habe auch versucht die Isotope::Backend Klasse. Hat alles nicht funktioniert...
    Sieht eigentlich gut aus. Hast du zwischenzeitlich mal den Cache geleert? der Contao Manager cacht die Bundle Konfigurationen soweit ich weiß in der var/cache/[dev|prod]/bundles.map.

  24. #24
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.094
    Partner-ID
    10107

    Standard

    Zitat Zitat von syncgw Beitrag anzeigen
    ja, das habe ich auch schon erfolglos versucht...
    Code:
        public function getBundles(ParserInterface $parser)
        {
            return [
                BundleConfig::create(Isotope_STINBundle::class)
                    ->setLoadAfter([ 'isotope' ]),
            ];
        }
    Hat auch nicht geholfen. Ich habe auch versucht die Isotope::Backend Klasse. Hat alles nicht funktioniert...
    So müsste es funktionieren. Applikations Cache hast du danach gelöscht?

  25. #25
    Contao-Fan Avatar von syncgw
    Registriert seit
    17.07.2012.
    Beiträge
    313

    Standard

    MEA CULPA... da hat mich der Cache wieder aus der Bahn geworfen...

    Code:
    vendor\bin\contao-console cache:clear
    hilft...

    DANKE für eure schnelle Antwort!
    __________________________________________
    Live long and prosper
    Florian

    Spenden GitHub

  26. #26
    Contao-Fan
    Registriert seit
    16.01.2012.
    Beiträge
    418

    Standard

    Guten Tag,

    kann man dies auch irgendwie von zwei Bundels abhängig machen? sowas wie

    Code:
    BundleConfig::create(ABundle::class)->setLoadAfter([ContaoCalendarBundle::class],[BBundle::class]),
    Also dass ABundle nach calendarbundle UND nach BBundle geladen wird? Hab es so versucht - funktioniert aber nicht.

  27. #27
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.094
    Partner-ID
    10107

    Standard

    setLoadAfter erwartet als Parameter ein Array - in diesem Array kannst du mehrere Bundles angeben.

  28. #28
    Contao-Fan
    Registriert seit
    16.01.2012.
    Beiträge
    418

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    setLoadAfter erwartet als Parameter ein Array - in diesem Array kannst du mehrere Bundles angeben.

    Darf ich noch kurz nach der Syntax dafür fragen? So in etwa?

    Code:
    BundleConfig::create(ABundle::class)->setLoadAfter(array([ContaoCalendarBundle::class],[BBundle::class])),

  29. #29
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.094
    Partner-ID
    10107

    Standard

    Nein, so hast du jetzt zwei Arrays als zwei Parameter übergeben. Du musst ein einzelnes Array daraus machen.

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
  •