Коли ви встановите поле як readonly
, браузер блокує поле і після подання надсилає дані на сервер. Інший атрибут полягає в disabled
тому, що він блокує поле і не надсилає дані назад на сервер.
В обох випадках ви можете примусово встановити значення таким самим після подання. Отже, навіть коли поле встановлено на readonly
або disabled
, і користувач змінив HTML і надіслав різні дані, $form_state['values']
залишиться незмінним.
function _build_element_readonly($element, &$form_state) {
$element['value']['#attributes']['readonly'] = 'readonly';
$element['value']['#value'] = isset($element['value']['#default_value'])
? $element['value']['#default_value']
: '';
return $element;
}
Зауважте, що ми встановлюємо #value
з #default_value. #default_value - це звичайний спосіб встановити значення за замовчуванням, яке завантажується під час створення форми, і $form_state['values']
буде містити default_value або введення користувача. Якщо ви встановите #value
явно, введення користувача ігнорується і #value
буде використовуватися.
У будь-якому разі, я б рекомендував використовувати '#access' => FALSE,
приховування елементів форми. Це повністю видалить елемент, дозволяючи вам використовувати його значення.
field_permissions
було б простіше, ніж виконувати роботу брудно.