it-swarm.it

Come visualizzare un modulo profilo usando il modulo profile2

Profile2 è un modulo che utilizza entità per creare profili separati dall'account utente.

Dal mio modulo, voglio essere in grado di visualizzare un modulo per modificare le entità del profilo. Forse usando drupal_get_form o forse l'API di Profile2 o qualsiasi altro metodo.

Qual è il modo migliore per farlo?

11
Carlos Muñiz

Ho fatto qualcosa di simile di recente. Poiché il profilo utilizza i campi, questo rende le cose piuttosto semplici. Per il modulo potresti fare qualcosa del genere:

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;
}

Poiché tutto il modulo del profilo è solo i campi collegati al profilo, puoi semplicemente collegare tu stesso i campi al modulo, usando Drupal API principali:

  • field_attach_form aggiunge i campi al modulo.
  • field_attach_validate gestisce la convalida.
  • field_attach_submit per gestire l'aggiunta dei valori all'entità (profilo).
  • Infine, dovrai salvare l'entità profilo usando profile2_save.

Dopo aver sfogliato il codice del modulo profile2, ho scoperto che fornisce una funzione wrapper per allegare i campi al modulo e salvare il modulo. Questo è più semplice, ma nel farlo perdi un po 'di controllo. Per utilizzare questo è necessario utilizzare il profile2_attach_form. In questo modo gestirai anche la convalida e il salvataggio dei dati.

Per utilizzare il codice sopra, dovresti essere in grado di c/p, rinominare il modulo e sostituire profile_machine_name con il nome effettivo della macchina del profilo per cui desideri visualizzare il modulo.

20
googletorp