回答:
unset()
フォームを使用することは(ご存知のように)フォームに適したソリューションではありません。処理されるときに未設定の要素が存在することを期待する送信/検証ハンドラーがわからないためです。これにより、不要なエラーが発生する可能性があります。
フォーム要素を「隠す」ために安全に使用できる3つの方法があります
'#type' => 'value'
エレメントで使用します。これにより、エレメントの値は#value
通常どおりに送信/検証関数に渡されます。これは私の好みの方法です。'#access' => FALSE
要素に使用して、画面に出力しないことを示します。'#type' => 'hidden'
Bartが提案したとおりに使用します(これの使用はユースケースに依存しますが、フォーム要素の値を非表示にしようとしている場合、非表示の入力としてフォームに出力したくないと思います)。hide()
はフォーム要素で使用すべきではありません。要素に対してバリデーターがまだ実行されているため、フォーム送信プロセス全体を簡単に混乱させる可能性があります。たとえばhide($form['title']);
、ノードフォームを使用している場合、タイトルフィールドは必須ですが、値は提供されないため、フォームを送信することはできません。上記の3つの方法は、この順序で使用するのに最適な方法です。)
drupal_render($form['base']['prices']['sell_price'])
いません)..とにかく最初の答えで私のコメントを参照してください、なぜ機能していないのですか?
drupal_render()
に出力できるが、フォームタグ/トークン/などのいずれも取得できないためです。あなたの出力全体の場合を除き$form
、アレイ
テンプレートファイルを使用している場合は、hide()を使用して内容を非表示にできます。
あなたがフォーム要素を非表示にする場合はhook_form_alter
、unset()
あなたの最良の選択肢かもしれません。
値を保存するだけの場合は、'#type' => 'hidden'も使用できます。
drupal_render($form['base']['prices']['sell_price'])
表示にしました。しかし、フォームは表示されますが、保存されません!