Come visualizzare un modulo profilo usando il modulo profile2


11

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?

Risposte:


20

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, utilizzando le API principali di Drupal:

  • 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 collegare 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 riportato dovresti essere in grado di c / p, rinominare il modulo e sostituirlo profile_machine_namecon il nome effettivo della macchina del profilo per cui desideri visualizzare il modulo.


Non capisco cosa sta succedendo qui. Devo solo visualizzare il modulo Profile2. È possibile?
Carlos Muñiz,

quando uso il codice nel mio modulo, mi viene visualizzato questo errore: Errore irreversibile: tipi di operando non supportati in C: \ wamp \ www \ working \ modules \ field \ field.attach.inc sulla riga 550
Carlos Muñiz,

@Charlie Ho aggiornato la mia risposta con maggiori dettagli e ho fornito una soluzione alternativa e più semplice utilizzando l'API profile2.
googletorp

questo è googletorp !!! la tua risposta ha funzionato con una modifica minore: alla fine della funzione ho aggiunto: return $ form che era l'unico modo in cui potevo farla visualizzare chiamandolo con drupal_get_form (). Se esiste un modo alternativo per visualizzarlo senza il modulo $ restituito, ti preghiamo di spiegare, altrimenti grazie mille!
Carlos Muñiz,

Devo aspettare 12 ore per assegnare la taglia :)
Carlos Muñiz,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.