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をロードする必要があります。この問題を克服する方法。

回答:


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

フッターにはこれらの機能はありません。headこのブロックはpage/html_headこれらのメソッドを保持するタイプであるため、フッターにのみあります。

<script src=...></script>テンプレート(.phtmlファイル)内にJS タグを配置してこれを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>

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

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/

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.