Añadir el formulario de perfil de usuario (profile2) directamente al formulario de editar mi cuenta

profile2 perfil de usuario

El módulo profile2 nos permite crear distintos tipos de perfiles de usuario, cada uno con sus campos. Si bien el módulo User, que viene en el core, ya permite añadir campos a una cuenta de usuario, profile2 es muy útil cuando queremos que no todos los usuarios tengan los mismos campos, y queremos distintos perfiles de usuario con distintos campos, en función del rol que tengan los usuarios. Sin embargo, los formularios de edición de los perfiles aparecen en páginas distintas, en forma de pestañas dentro de la página de edición de cuenta. Hay casos en los que nos interesa que el formulario de edición de perfil venga integrado en el mismo formulario de edición de cuenta, como puede ser el caso del perfil "main", que viene por defecto, y que normalmente usamos como perfil genérico para todos los usuarios

Para añadir el formulario de edición de perfil de usuario del módulo profile2 directamente a la página de edición de cuenta ( http://example.com/user/[UID]/edit ) tenemos que hacer 2 cosas:

  1. En primer lugar, ocultar la pestaña de edición del perfil, a través del hook_menu_alter, en nuestro módulo personalizado. En el ejemplo asumimos que el tipo de perfil se llama "main". Si no es así, habrá que modificar el código para utilizar el nombre de nuestro tipo de perfil:
    /**
     * Implements hook_menu_alter().
    */
    function MIMODULO_menu_alter(&$items) {
      $items['user/%user_category/edit/main']['access callback'] = FALSE;
    }
    
  2. Alterar el formulario de edición de cuenta, para que incluya todos los campos (los de la cuenta de usuario, y los de nuestro perfil de profile2). Ésto lo haremos mediante el hook_form_FORM_ID_alter

    /**
     * Implements hook_form_FORM_ID_alter() for the user edit form.
    */
    function MIMODULO_form_user_profile_form_alter(&$form, &$form_state) {
      if (($type = profile2_get_types('main')) && $type->userCategory) {
        if (empty($form_state['profiles'])) {
          $profile = profile2_load_by_user($form['#user'], 'main');
          if (empty($profile)) {
            $profile = profile_create(
              array(
                'type' => 'main',
                'uid' => $form['#user']->uid
              )
            );
          }
          $form_state['profiles'][$profile->type] = $profile;
        }
        profile2_attach_form($form, $form_state);
      }
    }

Fuente: http://www.jide.fr/english/add-profile2-form-directly-on-the-user-edit-form

Añadir nuevo comentario

Plain text

  • No se permiten etiquetas HTML.
CAPTCHA
Esta pregunta es para evitar el envío automático de spam