¿Cómo agregar campos adicionales al perfil de usuario?

22

Me gustaría agregar campos adicionales al perfil de usuario. Me gustaría que el usuario pueda editar casi toda la información que almaceno en la base de datos sobre él. Tengo algunas ideas: tal vez sea posible hacerlo usando el formulario api.

Alexey
fuente
detalle blog está aquí: goo.gl/zxBTBY
Suresh Kamrushi

Respuestas:

23

Una forma de agregar campos de usuario por código para que pueda poner esto en su módulo.

He encontrado esto: field_create_field con en los comentarios una forma de crear un campo para su usuario al habilitar su módulo:

/**
 * Implementation of hook_enable().
 */
function MYMODULE_enable() {
  // Check if our field is not already created.
  if (!field_info_field('field_myField')) {
    $field = array(
        'field_name' => 'field_myField', 
        'type' => 'text', 
    );
    field_create_field($field);

    // Create the instance on the bundle.
    $instance = array(
        'field_name' => 'field_myField', 
        'entity_type' => 'user', 
        'label' => 'My Field Name', 
        'bundle' => 'user', 
        // If you don't set the "required" property then the field wont be required by default.
        'required' => TRUE,
        'settings' => array(
           // Here you inform either or not you want this field showing up on the registration form.
            'user_register_form' => 1,
        ),
        'widget' => array(
            'type' => 'textfield',
            'weight' => '1',
        ), 
    );
    field_create_instance($instance);
  }
}
VOLAR
fuente
1
Encontré esta página muy útil que explica cómo exportar campos que se crearon con la interfaz de usuario. Esta exportación se puede usar con field_create_field y field_create_instance para hacer todo mediante programación
Whisky,
Gracias, esto fue muy útil. ¿Tienes una idea de cómo asignar automáticamente el peso también?
inertialmedia
puede agregar 'weight' => '1',a la matriz de widgets en la $instanceagregaré en mi respuesta.
VUELO
Para los casos complejos, es útil añadir primero el campo manualmente en /admin/config/people/accounts/fields, a continuación, utilizar el inspector de campo en /admin/config/development/field-inspectorexportar el campo y en el campo matrices instancia de definición para su uso en código como el anterior.
tanius
Para mantener limpia la base de datos, también puede implementar un hook_uninstall para eliminar el campo. function MYMODULE_uninstall() {field_delete_field('field_myField');}
dxvargas
35

Encontré la página difícil de encontrar, pero en / admin / config / people / accounts / fields puedes agregar campos a los usuarios.

Attiks
fuente
2
Gracias, pero ¿puedo hacerlo usando el formulario api? Necesito más funcionalidad
Alexey
¿Qué es lo que quieres hacer, que no es posible con los campos?
Attiks
Ya creé mis propios campos en la tabla Drupal users. Los "campos" crean nuevos campos fuera de la tabla users.
Alexey el
así es como funciona drupal, ¿por qué quieres almacenar los campos dentro de la tabla de usuarios?
Attiks
Es la forma más conveniente de hacerlo en mi opinión. Por cierto, para agregar campos adicionales que usohook_form_alter(&$form, &$form_state, $form_id)
Alexey
5

El perfil en D7 es un poco extraño. El módulo profile2 puede hacer lo que necesita.

Jeremy French
fuente
4

En Drupal 7, use este proceso para agregar un campo nuevo o existente con diferentes tipos de campo (como Imagen, campo Etiquetas, etc.) al perfil del usuario:

  1. Habilite el módulo de IU de campo .
  2. Vaya a " Admin → Configuración → Personas: Configuración de la cuenta " en el menú de administración, y luego a " Administrar campos " (la segunda pestaña).

    (Alternativamente, use la ruta directa en la URL:) /admin/config/people/accounts/fields.

  3. Complete la línea "Agregar campo nuevo" o "Agregar campo existente" en la parte inferior del formulario y haga clic en "Guardar".
Chanuka Asanka
fuente
1

¿Qué tipo de campos quieres agregar?

  • Si se trata de un sitio de redes sociales y está agregando campos de configuración de privacidad, use el módulo Privacidad por usuario .
  • Si desea agregar pestañas o campos de acordeón, use el módulo field_group para agregar nuevos grupos en los campos de la cuenta de usuario (URL: / admin / config / people / accounts / fields).
  • Y si desea diferentes campos para diferentes roles, use el módulo profile2 .
Druvision
fuente