Відповіді:
Використання unset()
не є хорошим рішенням для форм (як я думаю, ви знаєте), тому що ви ніколи не знаєте, які обробники подання / перевірки можуть очікувати, що невстановлений елемент буде існувати під час їх обробки. Це може призвести до небажаних помилок.
Існує три методи, які можна сміливо використовувати, щоб "приховати" елемент форми
'#type' => 'value'
елемент, що призведе до того, що значення для елемента все ж передаватиметься функціям подання / перевірки з його #value
нормальним. Це мій кращий метод.'#access' => FALSE
на елементі для позначення його не слід виводити на екран.'#type' => 'hidden'
як запропонував Барт (хоча використання цього залежить від випадку використання; я думаю, якщо ви намагаєтесь приховати значення елемента форми, ви не хочете виводити його у форму як прихований вхід).hide()
не слід використовувати на елементах форми, він може легко зіпсувати весь процес подання форми, оскільки валідатори все ще запущені для елемента. Наприклад, якщо ви hide($form['title']);
знаходитесь у формі вузла, ви ніколи не зможете подати форму, оскільки потрібне поле заголовка, але значення не буде надано. 3 вищевказаних методу найкращі в застосуванні у такому порядку :)
drupal_render($form['base']['prices']['sell_price'])
не працює?
drupal_render()
, ви не отримаєте жодних тегів форм / жетонів / тощо. якщо ви не виведете весь $form
масив
Якщо ви використовуєте файл шаблону, ви можете приховати речі, використовуючи hid () .
Якщо ви хочете сховати елемент форми в hook_form_alter
, unset()
можливо, це найкращий варіант.
Якщо це просто для зберігання значення, ви можете також використовувати "#type" => "прихований" .
drupal_render($form['base']['prices']['sell_price'])
буде відображати форму, але його не економити!
Я виявив, що використання #access для false може порушити деякі форми, якщо використовується на кнопках подання чи подібних. У цих випадках я просто використовував CSS для приховування елементів:
$form['basic']['submit']['#attributes']['class'][] = 'element-hidden';
Просто ще один варіант.