6

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');
}

ただし、設定に関係なく、このファイルはロードされません。条件を削除して、1つのファイルのみを明示的にロードしようとしましたが、それでも機能しません。私はここで何を間違えましたか?

4

3 に答える 3

20

ここでの問題は、処理順序の問題である可能性があります。私の推測では、ヘッドブロックがレンダリングされた後にPHPコードが評価されていると思います。コードがヘッドブロッククラスインスタンスを正常に更新している間、そのインスタンスから出力が生成された後に発生します。

addJs()より良い解決策は、レンダリングの前に処理されるように、レイアウトXMLに呼び出しを追加することです。属性があればいいのですifnotconfigが、今のところヘルパーを使うことができます。

構成設定に基づいてスクリプトパスを返すメソッドを使用してヘルパークラスを作成し、これをreturn引数として使用します。

<?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>
于 2012-08-13T17:54:59.110 に答える
5
$this->getLayout()->getBlock('head')->addJs('path');

その正しいコード、あなたのパスが正しいかどうかを検索します。

于 2012-08-13T16:41:53.293 に答える
1

私はこれがずっと前に尋ねられたことを知っています、しかし誰かがこれを探しているなら、私はあなたの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。CE1.9でテスト済み

于 2014-10-03T14:42:52.847 に答える