Когда вы устанавливаете поле как 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
это будет проще, чем делать работу грязным способом.