Я пытаюсь сделать некоторые поля формы профиля Drupal доступными только для чтения в режиме редактирования. Я использую следующий код в hook_alter
$form[field_organisation_company_name][und][0]['#after_build'][]='_build_element_readonly';
function _build_element_readonly($element, &$form_state) {
$element['value']['#attributes']['readonly'] = 'readonly';
return $element;
}
В пользовательском интерфейсе поле отображается только для чтения, но, тем не менее, я могу изменить значение, используя firebug и save. Есть ли способ предотвратить такое поведение?
field_permissions
это будет проще, чем делать работу грязным способом.Когда вы устанавливаете поле как
readonly
, браузер блокирует поле и отправляет данные обратно на сервер после отправки. Другой атрибут заключается вdisabled
том, что блокирует поле и не отправляет данные обратно на сервер.В обоих случаях вы можете принудительно установить одинаковое значение после отправки. Таким образом, даже если для поля установлено значение
readonly
илиdisabled
, а пользователь изменил HTML и отправил разные данные,$form_state['values']
он останется неизменным.Обратите внимание, что мы установили
#value
из #default_value. #default_value - это обычный способ установить значение по умолчанию, которое загружается при построении формы и$form_state['values']
будет содержать default_value или пользовательский ввод. Когда вы устанавливаете#value
явно, пользовательский ввод игнорируется и#value
будет использоваться.В любом случае, я бы рекомендовал использовать
'#access' => FALSE,
при скрытии элементов формы. Он полностью удалит элемент, позволяя вам использовать его значения.источник
Вы не можете запретить Firebug изменять поля только для чтения. Но если текстовое поле доступно только для чтения, его единственной целью является отображение данных. Так почему бы не заменить элемент input на элемент text?
Вместо этого вы можете использовать атрибут «disabled», потому что отключенные поля ввода не отправляются на сервер.
Вы также можете удалить атрибут «disabled» с помощью firebug, но ядро drupal не реагирует на изменения отключенных полей ввода!
источник
Самый безопасный способ сделать это - изменить тип поля на «элемент». http://api.drupal.org/api/drupal/developer!topics!forms_api_reference.html/7#item
источник
Вы можете использовать Полевые разрешения + Поле только для чтения .
Полевые разрешения позволят вам сделать некоторые из ваших полей недоступными для определенных пользователей.
Поле Readonly позволит вам отображать недоступные поля в виде элементов только для чтения в формах редактирования (а не скрывать их).
источник
Я думаю, что использование
#disabled = true;
- это самый простой способ для достижения этой цели, вместо добавления какого-либо тяжелого модуля в ваше ядро, в качестве примера я отключаю редактирование настраиваемого поля изображения в user_profile_form, когда оно ранее заполнялось пользователем.Кроме того, вы можете проверить роль пользователя и просто отключить (поле только для чтения) для не администраторов.
источник