Завантажте js у нижній колонтитул у Magento


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

Я використовував вище код для завантаження js у нижній колонтитул. Але Magento кидає помилку Like

Недійсний метод Mage_Page_Block_Html_Footer :: addItem (масив ([0] => skin_js [1] => js / тканина / інструмент / контролер_tool.js))

Мені потрібно завантажити js у нижній колонтитул. Як подолати це питання.

Відповіді:


8

В даний час колонтитул Magento не розроблений для додавання javascripts.

Нещодавно я спробував рефакторинг 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>тег JS всередину шаблону ( .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>

Або через окремий шаблон. 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

Я використовував інший метод, щоб досягти того, що ви можете домагатися. Замість того, щоб скрутити руку магентто, я просто завантажую свій сценарій у голову, але встановлюю DOMContentLoadedслухача подій (не підтримується в ie8), який виконує мої завдання.

app / design / frontend / base / default / layout / 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 / тощо / 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 / Модуль / 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>

потім додайте файли JS та CSS у будь-який 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>

Створіть .phtml файл у page / html / footerjscss.phtml та додайте наступне

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

Тепер виклику блоку в шаблоні сторінки "3column.phtml" і т. Д. Вам потрібно буде вивести цей блок перед тегом:

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

Код посилання тут: http://blog.rahuldadhich.com/magento-load-css-js-footer/

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.