logo

パレット - カラフルに🎨

Palette — ビジュアルページビルダー、デザインの専門知識は不要です。

ライブデモ パレットをダウンロード

Scroll

hook_form_alterでの#statesの使用

22/02/2025, by 匿名 (未認証ユーザー)
フォーラム

こんにちは。drupal 7のフィールド依存の実装に関する問題を解決しようとしています。多くの質問から、7のDrupalでは条件付きフィールドの代わりに#statesを使用するのが最適であることが理解できました。この問題のもう1つの課題は、multi_stepモジュールを使用する場合の依存関係の問題です。

全体的に#statesの動作については理解していますが、hook_formで独自のフォームを作成する場合の動作方法のみを理解しました。しかし、私の課題は既に完成した素材追加フォームを変更することです。

hook_form_ID_FORM_alter

私はそれを使用しています。dsm($form)を使ってアレイを探しています。
しかし、依存関係を正しく記述する方法を理解できません。

たとえば、作成されたフォームでは次のようにしました。

<?php $form['radio_type'] = array(
    
'#type' => 'radios',
    
'#options' => array(
      
'0'   => t('ドロップダウングループが表示される'),
      
'1' => t('テキストフィールドが非アクティブになる'),
      
'2'      => t('チェックボックスが消える'),
    ),
    
'#title' => t('アクションを選択してください')
  );
  
  
$form['grupa'] = array(
    
'#type' => 'fieldset',
    
'#title' => t('グループ'),
    
'#states' => array(
      
'visible' => array(
        
':input[name="radio_type"]' => array('value' => '0'),
      ),
    ),
  );
?>

 

hook_from_alter関数では(現在テンプレートに記入しています)
このようなことをしようとしています:

<?phpfunction theme_form_zavedeniya_node_form_alter(&$form, &$form_state$form_id) {
   
dpm($form); 
   
$form['body']['und']['0']['value']['#states']  = array(
  
'invisible' => array(
    
':input[name="field_sity2"]' => array('value' => '56'),
  ),
);
}
?>

 

つまり、field_sity2フィールドで56番の値を選択したときにbodyフィールドが消えるようにします。
とにかく、何も機能しません。様々な方法で試しましたが、正しく行われたことはないようです。お知恵をお借りします。

P.S. 従属フィールドで多段階の素材作成フォームを作成するために何を使用するかについてのアドバイスもいただけると幸いです。また、将来的に素材を編集する場合、ステップバイステップではなく、タブで編集できるようにしたいです。