web-dev-qa-db-ja.com

表示から除外する$ form要素を指定しますか?

Form_alterまたはテンプレートファイルを使用して、フォームの特定の要素を非表示にしたい。 Drupal 7で、フォームに表示されないように$ form要素を指定できますが、覚えられません!unset()ではなく他の関数です)をどこかで読んだことがあります。

19
Serjas

unset()を使用することは、フォームの適切な解決策ではありません(ご存知のとおり)。処理時に未設定の要素が存在することを予期している送信/検証ハンドラがわからないためです。これにより、不要なエラーが発生する可能性があります。

フォーム要素を「隠す」ために安全に使用できる3つの方法があります。

  • エレメントで'#type' => 'value'を使用します。これにより、エレメントの値は、通常どおり#valueを使用して送信/検証関数に渡されます。これは私の好みの方法です。
  • 要素で'#access' => FALSEを使用して、画面に出力しないことを示します。
  • Bartが示唆したように'#type' => 'hidden'を使用します(使用方法はユースケースによって異なります。フォーム要素の値を非表示にしようとしている場合、フォームに非表示として出力したくないと思います入力)。
29
Clive

テンプレートファイルを使用している場合は、 hide() を使用して非表示にできます。

_hook_form_alter_でフォーム要素を非表示にする場合は、unset()が最適なオプションとなる場合があります。

値を格納するだけの場合は、 '#type' => 'hidden' も使用できます。

4
Bart

#accessをfalseに使用すると、送信ボタンなどで使用すると一部のフォームが壊れる可能性があることがわかりました。これらの場合、要素を非表示にするためにCSSを使用しました:

$form['basic']['submit']['#attributes']['class'][] = 'element-hidden';

ちょうど別のオプション。

4
Tom James