在Magento的页脚中加载js


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

我使用上面的代码将js加载到页脚中。但是Magento抛出错误

无效的方法Mage_Page_Block_Html_Footer :: addItem(Array([0] => skin_js [1] => js / fabric / tool / controller_tool.js))

我需要在页脚中加载js。如何克服这个问题。

Answers:


8

目前,Magento页脚块尚未设计为添加javascript。

我曾尝试过重构Magento和页脚块,以将每个JS加载到页脚而不是页眉中,但是在模板内部调用JS调用的方式使其很难工作。

我建议解决此问题的方法是像这样更新布局:

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

fabric/tool/controller_tool_js.phtml使用以下代码在模板文件夹中创建一个文件:

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

让我知道是否可行。


11

页脚没有这些功能,只有headdos,因为此块是page/html_head可容纳这些方法的类型。

您可以通过将JS <script src=...></script>标签放在模板(.phtml文件)内并将其作为一个core/template块来实现此目的:

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

您也可以通过一个core/text块将其添加:

<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

只想告诉你为什么addItem不工作reference name="footer"

当您使用时reference name="footer",它将调用此块

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

您会page.xml在主题中找到它。

因此,这意味着它将检查addItem该块类或它们的父类中的方法/函数,但是此函数不存在,这就是为什么它将不起作用并且将引发异常的原因。


2

<reference name="footer">在我的情况下不起作用。我为js找到了更合适的块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>

或通过单独的模板。路径: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

我使用了另一种方法来实现您可能想要实现的目标。我没有扭动magento的手臂,而是将脚本加载到头部,而是设置了一个DOMContentLoaded执行我的任务的事件侦听器(ie8中不支持)。

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>

应用程序/代码/社区/名称空间/模块/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

您可以在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>

然后在任何layout.xml中添加JS和CSS文件

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

在page / html / footerjscss.phtml中创建.phtml文件并添加以下内容

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

现在调用页面模板“ 3columns.phtml”中的块,等等。您将需要在标记之前输出该块:

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

在这里参考代码:http : //blog.rahuldadhich.com/magento-load-css-js-footer/

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.