Lade js in die Fußzeile in Magento

12
<reference name="footer">
    <action method="addItem">
        <type>skin_js</type>
        <file>js/fabric/tool/controller_tool.js</file>
    </action>
</reference>

Ich habe den obigen Code verwendet, um js in die Fußzeile zu laden. Aber Magento wirft Fehler wie

Ungültige Methode Mage_Page_Block_Html_Footer :: addItem (Array ([0] => skin_js [1] => js / fabric / tool / controller_tool.js))

Ich muss js in die Fußzeile laden. So überwinden Sie dieses Problem.

Vivek Aasaithambi
quelle

Antworten:

8

Derzeit wurde der Magento-Fußzeilenblock nicht zum Hinzufügen von Javascripts entwickelt.

Ich habe vor einiger Zeit versucht, Magento und den Footer-Block umzugestalten, um jeden JS in der Fußzeile anstelle des Headers zu laden, aber die Art und Weise, wie der JS-Aufruf in den Vorlagen aufgerufen wird, macht es sehr schwierig, dies zum Laufen zu bringen.

Mein Vorschlag zur Behebung Ihres Problems ist, Ihr Layout folgendermaßen zu aktualisieren:

<reference name="before_body_end">
    <block type="core/template" name="controller_tool_javascript" template="fabric/tool/controller_tool_js.phtml"/>
</reference>

Erstellen Sie eine fabric/tool/controller_tool_js.phtmlDatei in Ihrem Vorlagenordner mit dem folgenden Code:

<script type="text/javascript" src="<?php echo $this->getSkinUrl('js/fabric/tool/controller_tool.js') ?>"></script>

Lassen Sie mich wissen, ob das funktioniert.

Raphael bei Digital Pianism
quelle
11

Die Fußzeile verfügt nicht über diese Funktionen, sondern nur über die Funktionen, headda dieser Block vom Typ ist, page/html_headder diese Methoden enthält.

Sie erreichen dies, indem Sie das JS- <script src=...></script>Tag in eine Vorlage ( .phtmlDatei) einfügen und diese als core/templateBlock einfügen:

<reference name="footer">
    <block type="core/template" name="fabric_controller_tool_js" template="fabric/controller_tool_js.phtml" />
</reference>

Sie können es auch über einen core/textBlock hinzufügen :

<reference name="footer">
    <block type="core/text" name="fabric_controller_tool_js">
         <action method="setText">
             <text><![CDATA[<script src="/js/fabric/tool/controller_tool.js"></script>]]></text>
         </action>
    </block>
</reference>
7ochem
quelle
2

Ich möchte Ihnen nur sagen, warum ich addItemnicht arbeitereference name="footer"

Wenn Sie reference name="footer"dann verwenden, ruft es diesen Block auf

<block type="page/html_footer" name="footer" as="footer" template="page/html/footer.phtml"> 

was Sie page.xmlin Ihrem Thema finden.

Das bedeutet, dass die addItemMethode / Funktion in dieser Blockklasse oder in der übergeordneten Klasse überprüft wird, aber diese Funktion ist nicht vorhanden. Deshalb funktioniert sie nicht und löst eine Ausnahme aus.

Murtuza Zabuawala
quelle
2

<reference name="footer">funktioniert in meinem fall nicht. Ich habe mehr geeigneten Block für js genannt gefunden js:

<reference name="js">
    <block type="core/text" name="fabric_controller_tool_js">
        <action method="setText">
            <text><![CDATA[<script src="/js/fabric/tool/controller_tool.js"></script>]]></text>
        </action>
    </block>
</reference>

Oder durch separate Vorlage. Pfad: design / adminhtml / default / default / template / sales / order / js.phtml:

<reference name="js">
    <block type="core/template" name="fabric_controller_tool_js" template="sales/order/js.phtml" />
</reference>
Ruslan Mavlyanov
quelle
1

Ich habe eine andere Methode angewendet, um das zu erreichen, was Sie vielleicht erreichen möchten. Anstatt Magentos Arm zu drehen, lade ich einfach mein Skript in den Kopf, setze aber einen DOMContentLoadedEreignis-Listener (in IE8 nicht unterstützt), der meine Aufgaben ausführt.

app / design / frontend / base / default / layout / namespace_module.xml

<?xml version="1.0" encoding="UTF-8"?>
<layout version="0.0.1">
  <default>
    <reference name="head">
      <action method="addJs">
        <script>NameSpace/Module/entry.js</script>
      </action>
    </reference>
  </default>
</layout>

app / code / community / NameSpace / Module / etc / config.xml

<?xml version="1.0" encoding="UTF-8"?>
<config>
  <modules>
    <NameSpace_Module>
      <version>0.0.1</version>
    </NameSpace_Module>
  </modules>
  <frontend>
    <layout>
      <updates>
        <module>
          <file>namespace_module.xml</file>
        </module>
      </updates>
    </layout>
  </frontend>
</config>

js / NameSpace / Module / entry.js

document.addEventListener("DOMContentLoaded", function(event) {
  // do something
});
Benny Powers
quelle
1

Sie können in page.xml einen neuen Block hinzufügen

<block type="core/text_list" name="before_body_end" as="before_body_end" translate="label">
    <block type="page/html_head" name="footerjscss" as="footerjscss" after="-" template="page/html/footerjscss.phtml"/>
</block>

Fügen Sie anschließend JS- und CSS-Dateien in jede layout.xml ein

<reference name="footerjscss">
    <action method="addItem"><type>skin_js</type><name>js/slideshow.js</name></action>
    <action method="addItem"><type>skin_css</type><name>css/madisonisland.css</name><params/><if/></action>
</reference>

Erstellen Sie eine .phtml-Datei in der Datei page / html / footerjscss.phtml und fügen Sie Folgendes hinzu

<?php echo $this->getCssJsHtml() ?>

Rufen Sie nun den Block in der Seitenvorlage "3columns.phtml" usw. auf. Sie müssen diesen Block vor dem Tag ausgeben:

<?php echo $this->getChildHtml('before_body_end') ?>

Code finden Sie hier: http://blog.rahuldadhich.com/magento-load-css-js-footer/

Rahul Dadhich
quelle