Cómo mostrar un formulario de perfil utilizando el módulo profile2

11

Profile2 es un módulo que utiliza entidades para crear perfiles que son independientes de la cuenta de usuario.

Desde mi módulo, quiero poder mostrar un formulario para editar las entidades de perfil. Posiblemente usando drupal_get_form o quizás la API de Profile2 o cualquier otro método.

¿Cuál es la mejor manera de hacer esto?

Carlos Muñiz
fuente

Respuestas:

20

Hice algo como esto recientemente. Como el perfil usa campos, esto hace que las cosas sean bastante simples. Para el formulario, podría hacer algo como esto:

function my_profile_form($form, &$form_state) {
  global $user;
  if (!isset($form_state['profiles'])) {
    $profile = profile2_load_by_user($user, 'profile_machine_name');
    if (!$profile) {
      $profile = profile_create(array(
        'type' => 'profile_machine_name',
        'uid' => $user->uid
      ));
    }
    $form_state['profiles'][$profile->type] = $profile;
  }

  // Use field attach form and handle the fields yourself:
  field_attach_form('profile2', $profile, $form, $form_state);
  // Or use profile2 API which is simpler
  profile2_attach_form($form, $form_state);

  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Save'),
  );
  return $form;
}

Dado que todo el formulario de perfil es solo los campos que están adjuntos al perfil, simplemente puede adjuntar los campos usted mismo al formulario, utilizando las API principales de Drupal:

  • field_attach_form agrega los campos al formulario.
  • field_attach_validate maneja la validación.
  • field_attach_submit maneja agregar los valores a la entidad (perfil).
  • Por último, necesitaría guardar la entidad de perfil usando profile2_save.

Después de examinar el código del módulo profile2, descubrí que proporciona una función de contenedor para adjuntar los campos al formulario y guardar el formulario. Esto es más simple, pero al hacerlo, pierdes un poco de control. Para usar esto necesitas usar el profile2_attach_form. Hacer esto también manejará la validación y el almacenamiento de datos.

Para usar el código anterior, debe poder c / p, cambiar el nombre del formulario y reemplazarlo profile_machine_namecon el nombre real de la máquina del perfil para el que desea mostrar el formulario.

googletorp
fuente
No entiendo lo que está pasando aquí. Solo necesito mostrar el formulario Profile2. es posible?
Carlos Muñiz
cuando uso su código en mi módulo, me da este error: Error grave: tipos de operandos no compatibles en C: \ wamp \ www \ working \ modules \ field \ field.attach.inc en la línea 550
Carlos Muñiz
@Charlie He actualizado mi respuesta con más detalles y proporcioné una solución alternativa y más simple usando la API profile2.
googletorp
esto es googletorp !!! su respuesta funcionó con una edición menor: al final de la función agregué: return $ form que era la única forma en que podía mostrarlo al llamarlo con drupal_get_form (). Si había una forma alternativa de mostrarlo sin el formulario $ de devolución, explique, de lo contrario, ¡muchas gracias!
Carlos Muñiz
Tengo que esperar 12 horas para otorgar la recompensa :)
Carlos Muñiz