如何在Magento中以编程方式添加JS?

use*_*748 6 magento magento-layout-xml

我需要在块文件中有条件地以编程方式添加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');
}
Run Code Online (Sandbox Code Playgroud)

但是,无论设置是什么,都不会加载此文件.我甚至试图消除这种情况并仅显式加载一个文件,但它仍然无效.我在这做错了什么?

ben*_*rks 20

这里的问题可能是处理顺序之一.我的猜测是在渲染头部块之后正在评估您的PHP代码.当您的代码成功更新头块类实例时,它会在从该实例生成输出后发生.

更好的解决方案是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';
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在布局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>
Run Code Online (Sandbox Code Playgroud)


Gue*_*rra 5

$this->getLayout()->getBlock('head')->addJs('path');
Run Code Online (Sandbox Code Playgroud)

它是正确的代码,搜索您的路径是否正确。