Magento JavaScript neu einbinden (addJs)

7

Ich werde das einfach halten .... auf meinen Produktseiten muss ich die prototype.js-Datei entfernen und sie durch die neueste Version des Prototyps ersetzen. Bisher habe ich local.xml erfolgreich verwendet, indem ich folgendes verwendet habe:

%Vor%

Das Problem ist, dass der Prototyp jetzt unter alle anderen Includes geladen wird, wodurch er nicht mehr funktioniert.

Gibt es eine Möglichkeit, die Reihenfolge eines JavaScript-Includes mithilfe von local.xml festzulegen, ohne jede einzelne Datei entfernen und hinzufügen zu müssen?

    
Adam Moss 06.09.2011, 08:33
quelle

7 Antworten

43

Sie können das params-Element mit dem HTML-Attribut "data-group" verwenden. Magento wird Elemente mit "params" setzen, die nach Elementen ohne "params" gesetzt wurden. Sie können local.xml in Ihrem Design verwenden, um die Reihenfolge dieser Elemente sicherzustellen (ich empfehle Magento, seine Standarddateien zuerst hinzuzufügen):

%Vor%

Die Reihenfolge, in der Elemente mit "params" gesetzt werden, wird nur in der Reihenfolge angegeben, in der die Aktionen ausgeführt werden. Elemente werden nach dem Wert von "params" gruppiert. Wenn also die Gruppe "js001" durch die erste Aktion (javascript2.js) definiert wird, werden nachfolgende Aktionen mit demselben Gruppennamen an diese Gruppe usw. angehängt.

Im obigen Beispiel lautet die Renderreihenfolge:

  • prototype / javascript5.js (no params, kommt zuerst)
  • prototype / javascript0.js (zuerst erstellte Parametergruppe "js002")
  • prototype / javascript1.js (zuerst erstellte Parametergruppe "js002")
  • prototype / javascript4.js (zuerst erstellte Parametergruppe "js002")
  • prototype / javascript2.js (zweite erstellte Parametergruppe "js001")
  • prototype / javascript3.js (zweite erstellte Parametergruppe "js001")

Elemente, die mit addItem addJs, addCss usw. hinzugefügt wurden, werden auf die gleiche Weise behandelt, unterscheiden sich jedoch (und werden entsprechend gruppiert) nach Typ (siehe Reihenfolge unten), wobei jede Gruppe in Supergruppen intern als geordnet ist oben erklärt:

  • js
  • skin_js
  • js_css
  • skin_css
Dmitri Sologoubenko 26.10.2012 14:49
quelle
1

Mage_Page_Block_Html_Head $ _data; hält das Array dieser Elemente, also denke ich, Sie können es für Ihr eigenes gut filtern. Standardmethoden erlauben nicht die Reihenfolge der hinzugefügten Elemente zu definieren.

    
Anton S 06.09.2011 08:48
quelle
1

Ich verstehe, dass dieser Beitrag ziemlich alt ist, aber ich stolperte darüber, während ich dieses Problem erforschte, also dachte ich, warum nicht.

Ich bin mir nicht sicher, ob das die eleganteste Lösung ist, aber es funktioniert ausreichend gut für uns.

Ich habe im Prinzip einen neuen Block in meinem local.xml erstellt: <block type="core/template" name="prehead" template="page/html/prehead/main.phtml" />

Dann habe ich meine Hauptlayouts (1column.phtml und Freunde) so geändert, dass sie folgendes enthalten: <head> <?php echo $this->getBlockHtml('prehead') ?> <?php echo $this->getChildHtml('head') ?> </head>

In main.phtml füge ich mein JS hinzu, das ich zuerst laden möchte

<script type='text/javascript' src='<?php echo $this->getSkinUrl('js/require.js', array('_secure'=>true)); ?>'></script> <script type='text/javascript' src='<?php echo $this->getSkinUrl('js/main.js', array('_secure'=>true)); ?>'></script>

Dies ist auch für uns praktisch, weil es uns immer noch erlaubt, die main.js abhängig von der Seite, auf der wir uns befinden, zu ändern, indem Sie in local.xml :

so etwas tun

<checkout_onestep_index translate="label"> <label>One Step Checkout</label> <block type="core/template" name="prehead" template="page/html/prehead/checkout.phtml" /> </checkout_onestep_index>

Ich hoffe, es hilft jemandem, der zufällig darüber stolpert.

-Ken

    
Ken Koch 31.10.2014 14:25
quelle
0

Da local.xml zuletzt vom Magento-System geladen wird, wird das dort genannte xml endlich zusammengeführt. Das könnte der Grund sein, dass dein neuer Prototyp unter anderen Skripten geladen wird.

Alternativ können Sie die Methode Mage_Page_Block_Html_Head :: getCssJsHtml () überschreiben und damit spielen.

Danke

    
MagePsycho 06.09.2011 11:41
quelle
0

Ok, hier ist meine Lösung. Kopieren Sie zuerst app \ code \ core \ Mage \ Page \ Block \ Html \ head.php nach app \ code \ local \ Mage \ Page \ Block \ Html \ head.php

Fügen Sie diese Funktion dann zur Datei hinzu:

%Vor%

Fügen Sie nun in Ihrer .XML-Layoutdatei eine Zeile wie folgt ein:

%Vor%

Die Parameter sind genau wie für removeItem, aber jetzt wird die Ersetzungsdatei an der gleichen Stelle in die Liste eingefügt wie die ursprüngliche Datei. Es erbt auch die gleichen Parameter param, if und cond. Bitte benutze diesen Code sorgfältig, da ich ihn gerade erst geschrieben und grundlegende Tests gemacht habe!

    
Barny Shergold 22.09.2011 17:03
quelle
0

Ich denke, dass die Lösung von Barny Shergold die korrekteste ist, aber der Kommentar zum Vermeiden der Änderung von Kerndateien ist korrekt. Um das Beste aus beiden Welten zu haben, können Sie Barnys Lösung in einem Modul implementieren, das die Klasse Mage_Page_Block_Html_Head wie folgt erweitert:

Yourcompany / Layouthelper / etc / config.xml

%Vor%

Ihre Firma / Layouthelper / Block / Html / Head.php

%Vor%     
Eric Seastrand 06.02.2015 20:29
quelle
0

jquery Konflikt mit Prototyp in Magento:

Die einfachste Lösung besteht darin, am Ende Ihrer Hauptjquery-Datei hinzuzufügen.

%Vor%

Oder erstellen Sie Ihre benutzerdefinierte js-Datei und fügen Sie diese Zeile hinzu und fügen Sie diese Datei auch nach js ein.

    
Hassan Ali Shahzad 01.04.2015 15:59
quelle

Tags und Links