system.xmlフィールドの依存関係


16

したがって、フィールドの1つにタグをsystem.xml追加することにより、モジュールのファイルでフィールド間の依存関係を設定でき<depends>ます。

<field1>
    ....
</field1>
<field2>
    ....
    <depends>
       <field1>1</field1>
    </depends>
</field2>

上記のコードはfield2、の値がのときに表示されることを意味します。の値がORであるかどうかをMagentoに指示する方法を教えてください。field11field2field112

回答:


29

これを試して:

<depends>
    <field separator="|">
        <value>1|2|3</value>
    </field>
</depends>

これが機能することを知っていますか、それをそこに置いているだけですか?
ベンマーク14

1
男...私はどのように知りませんが、これは実際に動作します。今、私は恥ずかしくて、設定セクションを実装した人に言った私の悪い言葉をすべて申し訳ありません。何らかの理由$dependent['separator']で、属性の値を返しますseparator。これをこれまでにダウン投票した人には、アップ投票してください(可能な場合は2回)。完全に動作します。ありがとう。cc @benmarks
マリウス

1
この動作!=それは良いアイデアです。あなたの言葉に謝罪する必要はないと思う:-D
ベンマーク14

7

[編集]

以下の答えは間違っていました。私はこれで7つのアップ投票を得たので、(まだ)それを削除しません。しかし、私はそれを編集しているので、あなたはすべてあなたの投票を撤回する機会があります(私がそれに値するので、それを下票することさえ)。

元の回答

ハ!..私はそれを見つけました。
簡単な答え:できません!
長い答え:誰かが配列とオブジェクトの違いを知っているなら、あなたはそれができるはずです。
理論的にはこれは機能するはずです

<field1>
    ....
</field1>
<field2>
    ....
    <depends>
       <field1>
           <value>1|2</value>
           <separator>|</separator>
       </field1>
    </depends>
</field2>

しかし、依存関係を処理するコードには、Mage_Adminhtml_Block_System_Config_Form::initFields366行目付近にこのコードがあります

if (isset($dependent['separator'])) {
    $dependentValue = explode((string)$dependent['separator'], $dependentValue);
}

$dependentは常にオブジェクトなので、$dependent['separator']設定されません。
上記のコードを

if (isset($dependent->separator)) {
    $dependentValue = explode((string)$dependent->separator, $dependentValue);
}

すべてがスムーズに機能します。
拡張のためだけにコアを変更することはできないので、値ごとに1つではなく2つのフィールドを作成するfield1か、これを処理して設定ページに追加するカスタムjsを作成する必要があります。


2
畜生。この種のバグを知っています:-)報告してください。素晴らしい洞察力!
ファビアンBlechschmidt

1
なんて素晴らしい調査なのか、あなたはあなたがシャーロックではないと確信していますか?+1して報告してください。
デビッドマナーズ

2
@DavidMannersエレメンタリーワトソン
マリウス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.