Memuat js di footer di Magento


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

Saya menggunakan kode di atas untuk memuat js di footer. Tapi Magento melempar kesalahan Like

Metode tidak valid Mage_Page_Block_Html_Footer :: addItem (Array ([0] => skin_js [1] => js / fabric / tool / controller_tool.js))

Saya perlu memuat js di footer. Bagaimana cara mengatasi masalah ini.

Jawaban:


8

Saat ini blok footer Magento belum dirancang untuk menambahkan javascripts.

Saya mencoba beberapa waktu yang lalu refactoring Magento dan blok footer untuk memuat setiap JS di footer daripada header tetapi cara panggilan JS disebut di dalam template membuatnya sangat sulit untuk membuatnya berfungsi.

Saran saya untuk memperbaiki masalah Anda adalah memperbarui tata letak Anda seperti ini:

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

Buat fabric/tool/controller_tool_js.phtmlfile di folder template Anda dengan kode berikut:

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

Beri tahu saya jika itu berhasil.


11

Footer tidak memiliki fungsi-fungsi ini, hanya headtidak karena blok ini bertipe page/html_headyang menampung metode-metode ini.

Anda dapat mencapainya dengan meletakkan <script src=...></script>tag JS di dalam templat ( .phtmlfile) dan memasukkannya sebagai core/templateblok:

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

Anda juga dapat menambahkannya melalui core/textblok:

<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>

2

Hanya ingin memberi tahu Anda mengapa addItemtidak bekerjareference name="footer"

Ketika Anda menggunakan reference name="footer"maka akan memanggil blok ini

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

yang akan Anda temukan di page.xmldalam tema Anda.

jadi itu berarti ia akan memeriksa addItemmetode / fungsi di kelas blok itu atau di kelas induknya, tetapi fungsi ini tidak ada di sana, itu sebabnya ia tidak akan bekerja dan itu akan membuang pengecualian.


2

<reference name="footer">tidak berfungsi dalam kasus saya. Saya telah menemukan blok yang lebih sesuai untuk js yang disebut 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>

Atau melalui templat terpisah. path: 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>

1

Saya menggunakan metode berbeda untuk mencapai apa yang mungkin ingin Anda capai. Alih-alih memutar lengan magento, saya hanya memuat skrip saya di kepala, tetapi mengatur DOMContentLoadedpendengar acara (tidak didukung dalam ie8) yang melakukan tugas saya.

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
});

1

Anda dapat menambahkan blok baru di page.xml

<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>

kemudian tambahkan file JS & CSS di sembarang layout.xml

<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>

Buat file .phtml di halaman / html / footerjscss.phtml dan tambahkan berikut ini

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

Sekarang panggil blok di templat halaman “3columns.phtml” dan lain-lain. Anda harus menampilkan blok ini sebelum memberi tag:

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

Rujuk kode di sini: http://blog.rahuldadhich.com/magento-load-css-js-footer/

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.