Ответы:
Вы можете попробовать Field Permissions Module
особенности
- Включите права доступа к полям для любого объекта, а не только для узлов.
- Полевые разрешения на основе ролей, позволяющие различать шаблоны просмотра в зависимости от того, какой доступ имеет пользователь.
- Права на уровне автора позволяют просматривать и редактировать поля в зависимости от того, кто является владельцем объекта.
- Разрешения для каждого поля не включены по умолчанию. Вместо этого администраторы могут явно включить эти разрешения для полей, где требуется эта функция.
Если вы хотите сделать это в пользовательском модуле
my_module_form_user_profile_form_alter(&$form, &$form_state) {
// Since it is on registration form, field might be reqruied.
$form['your_field']['#required'] = FALSE;
$form['your_field']['#access'] = FALSE;
}
my_module_form_user_register_form_alter
не так my_module_form_user_profile_form_alter
.
Сделать свойство видимости поля только для анонимных пользователей. Таким образом, значение будет храниться во время регистрации. Тогда никто не сможет получить доступ к этому полю. После установки модуля разрешения полей вы обнаружите, что эта опция применима только к анонимному пользователю.
Попробуйте использовать hook_form_alter
, см. Пример ниже:
function MODULENAME_form_alter(&$form_state, $form_id){
global $user;
//$form_id :: user detail edit form id
if($user->uid != 0 && $form_id == "required_form_id"){
//$field :: requied field name
$form[$field]['#access'] = FALSE;
}
}
Поместите этот код в пользовательский модуль, поле будет доступно для нового контента, но будет отключено для его редактирования.
if ($form_id == 'YOUR_FORM_ID') {
//dsm($form);
// for user form use '#user' instead of '#node' and uid instead of nid
if (isset($form['#node']) && isset($form['#node']->nid)){
// Prevent editing a field once the node has been created
// hiding the field entirely on the edit form.
$form['field_name']['#access'] = FALSE;
// disable update field on the edit form (gray color).
$form['field_name']['#disabled'] = TRUE;
}
}