вказати елементи форми $, які потрібно виключити з відображення?


20

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

Відповіді:


29

Використання unset()не є хорошим рішенням для форм (як я думаю, ви знаєте), тому що ви ніколи не знаєте, які обробники подання / перевірки можуть очікувати, що невстановлений елемент буде існувати під час їх обробки. Це може призвести до небажаних помилок.

Існує три методи, які можна сміливо використовувати, щоб "приховати" елемент форми

  • Використовуйте '#type' => 'value'елемент, що призведе до того, що значення для елемента все ж передаватиметься функціям подання / перевірки з його #valueнормальним. Це мій кращий метод.
  • Використовувати '#access' => FALSEна елементі для позначення його не слід виводити на екран.
  • Використовуйте так, '#type' => 'hidden'як запропонував Барт (хоча використання цього залежить від випадку використання; я думаю, якщо ви намагаєтесь приховати значення елемента форми, ви не хочете виводити його у форму як прихований вхід).

забув сховати () .
Юсеф

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

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

Це код у файлі шаблону, який має тематичну форму? Якщо ні, то причина цього не працює в тому, що, хоча ви можете роздрукувати на екрані будь-який елемент візуалізації drupal_render(), ви не отримаєте жодних тегів форм / жетонів / тощо. якщо ви не виведете весь $formмасив
Clive

Я використовував тему гака і print_r ($ форма) і навіть drupal_render ($ form ['title']) працюють, проблема полягає в елементах на вершальних вкладках!
Serjas

4

Якщо ви використовуєте файл шаблону, ви можете приховати речі, використовуючи hid () .

Якщо ви хочете сховати елемент форми в hook_form_alter, unset()можливо, це найкращий варіант.

Якщо це просто для зберігання значення, ви можете також використовувати "#type" => "прихований" .


приховати - кращий метод для вираження елемента.
Юсеф

Те , що я намагався домогтися був користувальницької форми Ubsercart вузол продукту, все , що я хотів дисплея sell_price, і приховати інші елементи , такі як перевезення вантажу, вага і т.д. Але drupal_render($form['base']['prices']['sell_price'])буде відображати форму, але його не економити!
Serjas

4

Я виявив, що використання #access для false може порушити деякі форми, якщо використовується на кнопках подання чи подібних. У цих випадках я просто використовував CSS для приховування елементів:

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.