ブロックファイル内に条件付きでプログラムでJSファイルを追加する必要があります。私はこれらのコードで試しました:MagentoにJSをプログラムで追加するには?
ただし、設定に関係なく、このファイルはロードされていません。私は条件を削除して明示的に1つのファイルだけを読み込もうとしましたが、まだ動作しません。私はここで何をやったのですか?
ブロックファイル内に条件付きでプログラムでJSファイルを追加する必要があります。私はこれらのコードで試しました:MagentoにJSをプログラムで追加するには?
ただし、設定に関係なく、このファイルはロードされていません。私は条件を削除して明示的に1つのファイルだけを読み込もうとしましたが、まだ動作しません。私はここで何をやったのですか?
ここでの問題は処理オーダーの可能性が高いです。私の推測では、あなたのPHPコードは、ヘッドブロックがレンダリングされた後に評価されています。あなたのコードがヘッドブロッククラスのインスタンスを正常に更新している間に、そのインスタンスから出力が生成された後に起こっています。
より良い解決策は、レンダリングの前に処理されるように、レイアウトXMLでaddJs()
コールを追加することです。 ifnotconfig
属性があればいいですが、今のところヘルパーを使うことができます。
設定の設定に基づいてスクリプトパスを返すメソッドでヘルパークラスを作成し、これをリターン引数として使用します。そして、レイアウトXMLで
<?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 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>
あなたのコードの "if"行にタイプミスがある場合を除いて動作します。カールブラケットの前に不必要な閉じたブラケットがあります。 とにかく、ありがとうございます。 – user1576748
テストのない危険性と(2) )コーリングジェット遅れている間にコーディング:-) – benmarks
$this->getLayout()->getBlock('head')->addJs('path');
あなたのパスが正しいかどうかを調べてください。
お返事ありがとうございます。はい、その道は正しいです。それはルートjsフォルダに相対的です。私はjsファイルをそのルートjsフォルダ(サブフォルダなし)にコピーして、このaddJs( 'file1.js')のように直接アクセスしようとしました。 – user1576748
コードを入れてみてください:<?php echo $ this-> getJsUrl(); ?> jsFile.js "と書いたコードを見てください。xml addjsは同じです。 – Guerra
絶対パスの例を追加したい場合はどうすればいいですか?http://somedomain.com/js/some.js – awavi
私は、私はあなたのlocal.xmlでこれを使用することをお勧めします、これは長い時間前に頼まれたが、場合には、誰かがこの探している知っています:
<layout>
<default>
<reference name="head">
<action ifconfig="path/to/config" method="addJs">
<script>pathto/file.js</script>
</action>
</reference>
</default>
</layout>
もちろん、/ js/folderにあるJSファイル用です。 skin_jsまたはskin_cssを追加する場合は、適切なメソッドを使用します。
PS。 CEでテスト済み1.9
簡単なエコー/プリントで条件文が機能しますか? –
お返事ありがとうございました。はい、私はそれをエコーする場合、条件付き0または1を提供します。しかし、私は1行を除く全行を削除しようとしました。 $ this-> getLayout() - > getBlock( 'head') - > addJs( 'path-to-file/file1.js'); しかし、それでも動作しません。パスはjsのルートディレクトリの後にあります。 – user1576748
どのブロックのテンプレートファイルから呼び出すのですか? –