hook_form_alter()で#statesを使用してCCKフィールドグループを非表示にしますか?


9

カスタムモジュールがあり、ドロップダウン選択リストで特定の項目が選択されているときに、「#states」を使用してCCKフィールドグループを非表示にしようとしています。

以下のように、hook_form_alter()内から状態を使用してみました。

$form['group_mygroup']['#states']['invisible'] = array(
  ':input[name="field_trigger[' . LANGUAGE_NONE. ']"]' => array( 'value' => 'hide' ),
);

これは何もしないようです。

http://proofgroup.com/blog/2008/dec/modifying_cck_fieldgroups_hook_form_alterなどのさまざまなサイトに従って、モジュールの重みを変更することを検討しました。

しかし、まだ役に立たない。状態を使用してフィールドグループ内のすべてのフォーム要素を非表示にできますが、フィールドグループ自体は非表示にできません。誰かが何か考えを持っていますか?


今後の視聴者向け:@ andriy-malishの答えが正しいです。
UltraBob 2017年

回答:


11
/ **
 * hook_field_group_build_pre_render_alterを実装します。
 * /
function mymodule_field_group_build_pre_render_alter(&$ element){
  if(isset($ element ['#form_id'])){
    if($ element ['#form_id'] == 'mynodetype_node_form'){
      $ element ['group_myfieldgroup'] ['#states'] = array(
        '目に見える' => array(
          ':input [name = "field_myfield [und]"]' => array( 'checked' => TRUE)、
        )
      );
      $ element ['group_myfieldgroup'] ['#id'] = 'group_myfieldgroup';
    }
  }
}

このフックを使用して、フィールドグループを非表示にします。チェックボックスfield_myfieldがオンの場合にのみ表示されます。

$elementこのフックで変数を探索するために、私は使用しました

die('<pre>'.print_r($element, 1).'</pre>');

の代わりにdpm()

それが役に立てば幸い:)


1

フィールドグループは、のルートでは定義されていません$form。使うべきではないようです$form['group_mygroup']$form['#fieldgroups']['group_mygroup']


0

モジュール例を見て、フィールドセットをどのように非表示にするかを確認できます。それに基づいて、私はあなたのコードは次のようになるはずだと思います:

$form['group_mygroup']['#states'] = array(
  'invisible' => array(
    ':input[name="field_trigger"]' => array('value' => 'hide'),
  ),
),

2
あなたの提案をありがとう。それは私のコードがわずかに異なると宣言したのと同じですが。FAPIを使用してフォームとフィールドセットを宣言すると、フィールドセットを非表示にできます。私の問題は、hook_form_alter()内のCCKフィールドグループでは機能しないことです。
thepearson、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.