Как программно добавить JS в Magento?
Мне нужно добавить файл JS условно и программно внутри файла блока. Я пытался с этими кодами:
if (Mage::getStoreConfig('mymodule/settings/enable')) {
$this->getLayout()->getBlock('head')->addJs('path-to-file/file1.js');
} else {
$this->getLayout()->getBlock('head')->addJs('path-to-file/file2.js');
}
Тем не менее, независимо от настройки, ни один из этих файлов не загружается. Я даже пытался устранить условие и явно загрузить только один файл, но он все равно не работает. Что я здесь не так сделал?
3 ответа
Проблема здесь, вероятно, связана с обработкой заказа. Я предполагаю, что ваш PHP-код оценивается после рендеринга блока head. Пока ваш код успешно обновляет экземпляр класса головного блока, это происходит после того, как из этого экземпляра был сгенерирован вывод.
Лучшим решением будет добавить addJs()
вызовы в макете XML, так что они будут обработаны до рендеринга. Было бы неплохо, если бы ifnotconfig
атрибут, но пока вы можете использовать помощника.
Создайте вспомогательный класс с методом, который возвращает путь к сценарию на основе параметров конфигурации, а затем используйте его в качестве аргумента возврата.
<?php
class My_Module_Helper_Class extends Mage_Core_Helper_Abstract
{
public function getJsBasedOnConfig()
{
if (Mage::getStoreConfigFlag('mymodule/settings/enable')) {
return 'path-to-file/file1.js';
}
else {
return 'path-to-file/file2.js';
}
}
}
Тогда в макете XML:
<?xml version="1.0"?>
<layout>
<default>
<reference name="head">
<action method="addJs">
<file helper="classgroup/class/getJsBasedOnConfig" />
<!-- i.e. Mage::helper('module/helper')->getJsBasedOnConfig() -->
</action>
</reference>
</default>
</layout>
$this->getLayout()->getBlock('head')->addJs('path');
Это правильный код, ищите, если ваш путь правильный.
Я знаю, что это было задано давно, но если кто-то ищет это, я бы предложил использовать это в вашем local.xml:
<layout>
<default>
<reference name="head">
<action ifconfig="path/to/config" method="addJs">
<script>pathto/file.js</script>
</action>
</reference>
</default>
</layout>
Конечно, это для файлов JS, расположенных в папке /js/. Используйте соответствующий метод, если вы хотите добавить skin_js или skin_css.
PS. Проверено на CE 1.9