Form_alterまたはテンプレートファイルを使用して、フォームの特定の要素を非表示にしたい。 Drupal 7で、フォームに表示されないように$ form要素を指定できますが、覚えられません!unset()ではなく他の関数です)をどこかで読んだことがあります。
unset()
を使用することは、フォームの適切な解決策ではありません(ご存知のとおり)。処理時に未設定の要素が存在することを予期している送信/検証ハンドラがわからないためです。これにより、不要なエラーが発生する可能性があります。
フォーム要素を「隠す」ために安全に使用できる3つの方法があります。
'#type' => 'value'
を使用します。これにより、エレメントの値は、通常どおり#value
を使用して送信/検証関数に渡されます。これは私の好みの方法です。'#access' => FALSE
を使用して、画面に出力しないことを示します。'#type' => 'hidden'
を使用します(使用方法はユースケースによって異なります。フォーム要素の値を非表示にしようとしている場合、フォームに非表示として出力したくないと思います入力)。テンプレートファイルを使用している場合は、 hide() を使用して非表示にできます。
_hook_form_alter
_でフォーム要素を非表示にする場合は、unset()
が最適なオプションとなる場合があります。
値を格納するだけの場合は、 '#type' => 'hidden' も使用できます。
#accessをfalseに使用すると、送信ボタンなどで使用すると一部のフォームが壊れる可能性があることがわかりました。これらの場合、要素を非表示にするためにCSSを使用しました:
$form['basic']['submit']['#attributes']['class'][] = 'element-hidden';
ちょうど別のオプション。