Загрузите 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 выдает ошибку

Неверный метод 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>тег 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>
7ochem
источник
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>

Или через отдельный шаблон. путь: дизайн / 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), который выполняет мои задачи.

приложение / дизайн / интерфейс / базы / по умолчанию / макет / 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>

Приложение / код / ​​сообщества / NameSpace / модуль / и т.д. / 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() ?>

Теперь вызовите блок в шаблоне страницы «3columns.phtml» и т. Д. Вам нужно будет вывести этот блок перед тегом:

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

Ссылочный код здесь: http://blog.rahuldadhich.com/magento-load-css-js-footer/

Рахул Дадхич
источник