Tải js ở chân trang trong Magento


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

Tôi đã sử dụng mã trên để tải js ở chân trang. Nhưng Magento ném lỗi như

Phương thức không hợp lệ Mage_Page_Block_Html_Footer :: addItem (Mảng ([0] => skin_js [1] => js / vải / tool / control_tool.js))

Tôi cần tải js ở chân trang. Làm thế nào để khắc phục vấn đề này.

Câu trả lời:


8

Hiện tại khối chân trang Magento chưa được thiết kế để thêm javascripts.

Tôi đã thử cách đây một lần nữa để tái cấu trúc Magento và khối chân trang để tải mọi JS trong phần chân trang thay vì tiêu đề nhưng cách gọi lệnh JS được gọi bên trong các mẫu khiến cho việc này rất khó để làm việc này.

Đề nghị của tôi để khắc phục vấn đề của bạn là cập nhật bố cục của bạn như thế này:

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

Tạo một fabric/tool/controller_tool_js.phtmltệp trong thư mục mẫu của bạn với mã sau đây:

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

Cho tôi biết nếu nó hiệu quả.


11

Chân trang không có các chức năng này, chỉ có headđiều là vì khối này thuộc loại page/html_headchứa các phương thức này.

Bạn có thể đạt được điều này bằng cách đặt <script src=...></script>thẻ JS bên trong một mẫu ( .phtmltệp) và bao gồm nó dưới dạng một core/templatekhối:

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

Ngoài ra, bạn có thể thêm nó thông qua một core/textkhối:

<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

Chỉ muốn cho bạn biết tại sao addItemkhông làm việc trongreference name="footer"

Khi bạn sử dụng reference name="footer"thì nó sẽ gọi khối này

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

mà bạn sẽ tìm thấy trong page.xml chủ đề của bạn.

vì vậy nó có nghĩa là nó sẽ kiểm tra addItemphương thức / hàm trong lớp khối đó hoặc trong lớp cha của chúng, nhưng hàm này không có ở đó, đó là lý do tại sao nó không hoạt động và nó sẽ ném ngoại lệ.


2

<reference name="footer">không hoạt động trong trường hợp của tôi. Tôi đã tìm thấy khối thích hợp hơn cho js được gọi là 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>

Hoặc thông qua mẫu riêng. đường dẫn: 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

Tôi đã sử dụng một phương pháp khác để đạt được những gì bạn có thể đang tìm cách hoàn thành. Thay vì vặn cánh tay của magento, tôi chỉ tải tập lệnh của mình vào đầu, nhưng đặt một trình DOMContentLoadedlắng nghe sự kiện (không được hỗ trợ trong eg8) để thực hiện các nhiệm vụ của mình.

ứng dụng / thiết kế / frontend / cơ sở / mặc định / layout / namepace_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>

ứng dụng / mã / cộng đồng / 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

Bạn có thể thêm khối mới trong 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>

sau đó thêm các tệp JS & CSS trong bất kỳ layout.xml nào

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

Tạo tập tin .phtml trong trang / html / footerjscss.phtml và thêm vào sau

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

Bây giờ hãy gọi khối trong mẫu trang Kiểu 3columns.phtml và v.v. bạn sẽ cần xuất khối này trước thẻ:

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

Tham khảo mã tại đây: http://blog.rahuldadhich.com/magento-load-css-js-footer/

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.