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

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

19 голосов | спросил Serjas 5 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 05 Sep 2012 14:56:02 +0400 2012, 14:56:02

3 ответа


28

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

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

  • Используйте '#type' => 'value', что приведет к тому, что значение элемента все равно будет передано в функции submit /validate с его #value как обычно. Это мой предпочтительный метод.
  • Используйте '#access' => FALSE для элемента, который он обозначает, не должен выводиться на экран.
  • Используйте '#type' => 'hidden', как предложил Барт (хотя использование этого зависит от вашего варианта использования, я предполагаю, что если вы пытаетесь скрыть значение элемента формы, вы не хотите выводить его в форме как скрытый ввод).
ответил Clive 5 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 05 Sep 2012 15:32:37 +0400 2012, 15:32:37
4

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

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

Если вам нужно сохранить значение, вы можете использовать '#type' => «скрытый» .

ответил Bart 5 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 05 Sep 2012 15:01:54 +0400 2012, 15:01:54
4

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

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

Еще один вариант.

ответил Tom James 16 WedEurope/Moscow2015-12-16T14:15:42+03:00Europe/Moscow12bEurope/MoscowWed, 16 Dec 2015 14:15:42 +0300 2015, 14:15:42

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132