указать элементы формы $, которые будут исключены из отображения?


20

Я хочу скрыть определенные элементы в форме, используя form_alter или файл шаблона. Я где-то читал, что в Drupal 7 мы можем указать элементы $ form, чтобы они не отображались в форме, но я не помню! Не unset (), а какая-то другая функция!

Ответы:


29

Использование unset()не является хорошим решением для форм (как я думаю, вы знаете), поскольку вы никогда не знаете, какие обработчики отправки / проверки могут ожидать, что неустановленный элемент будет существовать при обработке. Это может привести к нежелательным ошибкам.

Есть три метода, которые вы можете безопасно использовать, чтобы «скрыть» элемент формы

  • Используйте '#type' => 'value'для элемента, что приведет к тому, что значение элемента все равно будет передано в функции submit / validate с его #valueобычным значением. Это мой предпочтительный метод.
  • Использование '#access' => FALSEэлемента для обозначения его не должно выводиться на экран.
  • Используйте '#type' => 'hidden'как предложил Барт (хотя использование этого зависит от вашего варианта использования; я думаю, что если вы пытаетесь скрыть значение элемента формы, вы не хотите выводить его в форме как скрытый ввод).


2
@zhilevan hide()не должен использоваться для элементов формы, он может легко испортить весь процесс отправки формы, так как для элемента все еще выполняются валидаторы. Например, если вы hide($form['title']);в форме узла, вы никогда не сможете отправить форму, так как поле заголовка является обязательным, но значение не будет предоставлено. 3 метода, описанные выше, лучше всего использовать именно в таком порядке :)
Клайв

@Clive спасибо, я знаю выше методы, мой вопрос был связан с hide () я думаю (до сих пор не могу вспомнить функцию) .. в любом случае, пожалуйста, обратитесь мой комментарий в 1-м ответе, почему drupal_render($form['base']['prices']['sell_price'])не работает?
Серхас

Это код в файле шаблона, который представляет собой форму? Если нет, то причина этого не в том, что хотя вы можете распечатать любой элемент рендеринга на экране drupal_render(), вы не получите ни одного из тегов формы / токенов / и т.д. если не вы выводите весь $formмассив
Clive

я использовал тему крючка, и print_r ($ form) и даже drupal_render ($ form ['title']) работают, проблема в элементах под вертикальными вкладками!
Серхас

4

Если вы используете файл шаблона, вы можете скрыть вещи, используя hide () .

Если вы хотите, чтобы скрыть элемент формы hook_form_alter, unset()может быть лучшим вариантом.

Если это просто для хранения значения, вы также можете использовать '#type' => 'hidden' .


скрыть это лучший способ использовать элемент.
Юсеф

Я пытался добиться пользовательской формы узла продукта Ubsercart, все, что я хотел отобразить, это sell_price и скрыть другие элементы, такие как доставка, вес и т. Д. Но drupal_render($form['base']['prices']['sell_price'])будет отображаться форма, но она не сохраняется!
Серхас

4

Я обнаружил, что использование #access для false может сломать некоторые формы, если они используются на кнопках отправки или аналогичных. В тех случаях я просто использовал CSS, чтобы скрыть элементы:

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

Просто еще один вариант.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.