Ответы:
Использование unset()
не является хорошим решением для форм (как я думаю, вы знаете), поскольку вы никогда не знаете, какие обработчики отправки / проверки могут ожидать, что неустановленный элемент будет существовать при обработке. Это может привести к нежелательным ошибкам.
Есть три метода, которые вы можете безопасно использовать, чтобы «скрыть» элемент формы
'#type' => 'value'
для элемента, что приведет к тому, что значение элемента все равно будет передано в функции submit / validate с его #value
обычным значением. Это мой предпочтительный метод.'#access' => FALSE
элемента для обозначения его не должно выводиться на экран.'#type' => 'hidden'
как предложил Барт (хотя использование этого зависит от вашего варианта использования; я думаю, что если вы пытаетесь скрыть значение элемента формы, вы не хотите выводить его в форме как скрытый ввод).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'])
будет отображаться форма, но она не сохраняется!
Я обнаружил, что использование #access для false может сломать некоторые формы, если они используются на кнопках отправки или аналогичных. В тех случаях я просто использовал CSS, чтобы скрыть элементы:
$form['basic']['submit']['#attributes']['class'][] = 'element-hidden';
Просто еще один вариант.