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


20

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

回答:


29

unset()フォームを使用することは(ご存知のように)フォームに適したソリューションではありません。処理されるときに未設定の要素が存在することを期待する送信/検証ハンドラーがわからないためです。これにより、不要なエラーが発生する可能性があります。

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

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

hide()を忘れました。
ユセフ

2
@zhilevan hide()はフォーム要素で使用すべきではありません。要素に対してバリデーターがまだ実行されているため、フォーム送信プロセス全体を簡単に混乱させる可能性があります。たとえばhide($form['title']);、ノードフォームを使用している場合、タイトルフィールドは必須ですが、値は提供されないため、フォームを送信することはできません。上記の3つの方法は、この順序で使用するのに最適な方法です。)
クライブ

@Cliveありがとう、上記の方法を知っています、私の質問はhide()に関連するものでした(私はまだ関数を覚えてdrupal_render($form['base']['prices']['sell_price'])いません)..とにかく最初の答えで私のコメントを参照してください、なぜ機能していないのですか?
セルハス

フォームをテーマにしたテンプレートファイル内のコードですか?そうでない場合、それが機能しない理由は、を使用してレンダリング要素を画面drupal_render()に出力できるが、フォームタグ/トークン/などのいずれも取得できないためです。あなたの出力全体の場合を除き$form、アレイ
クライヴ

私はフックテーマを使用し、print_r($ form)とdrupal_render($ form ['title'])さえ動作しています、問題はvertcalタブの下の要素です!
セルハス

4

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

あなたがフォーム要素を非表示にする場合はhook_form_alterunset()あなたの最良の選択肢かもしれません。

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


hideは、要素を明示するより良い方法です。
ユセフ

私が達成しようとしていたのは、カスタムUbsercart製品ノードフォームでした。表示したいのはsell_priceだけで、配送、重量などの他の要素を非drupal_render($form['base']['prices']['sell_price'])表示にしました。しかし、フォームは表示されますが、保存されません!
セルハス

4

#access to falseを使用すると、送信ボタンなどで使用された場合、一部のフォームが壊れることがあります。そのような場合、CSSを使用して要素を非表示にしました。

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

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

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