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.

Vivek Aasaithambi
sumber

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.

Raphael di Digital Pianism
sumber
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>
7ochem
sumber
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.

Murtuza Zabuawala
sumber
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>
Ruslan Mavlyanov
sumber
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
});
Benny Powers
sumber
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/

Rahul Dadhich
sumber