Respuestas:
Puedes probar el Módulo de permisos de campo
Caracteristicas
- Habilite los permisos de campo en cualquier entidad, no solo en los nodos.
- Permisos de campo basados en roles que permiten una visualización diferente según el acceso del usuario.
- Los permisos a nivel de autor permiten ver y editar campos en función de quién es el propietario de la entidad.
- Los permisos para cada campo no están habilitados de forma predeterminada. En cambio, los administradores pueden habilitar estos permisos explícitamente para los campos donde se necesita esta característica.
Si quieres hacerlo en módulo personalizado
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
, no my_module_form_user_profile_form_alter
.
Haga la propiedad de visibilidad de campo solo para usuarios anónimos. Por lo tanto, el valor se almacenará en el momento del registro. Entonces nadie puede acceder a ese campo. Una vez que instale el módulo de permisos de campo, encontrará esta opción para aplicar solo a usuarios anónimos.
Intente usar hook_form_alter
, vea el siguiente ejemplo:
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;
}
}
coloque este código en un módulo personalizado, el campo podrá en contenido nuevo pero estará deshabilitado para editarlo.
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;
}
}