it-swarm-eu.dev

Jak zobrazit formulář profilu pomocí modulu profile2

Profile2 je modul, který používá entity k vytváření profilů, které jsou oddělené od uživatelského účtu.

Z mého modulu chci zobrazit formulář pro úpravu entit profilu. Možná pomocí drupal_get_form nebo možná Profile2 API nebo jakoukoli jinou metodou.

Jaký je nejlepší způsob, jak toho dosáhnout?

11
Carlos Muñiz

Nedávno jsem něco takového udělal. Protože profil používá pole, je vše velmi jednoduché. Pro formulář byste mohli udělat něco takového:

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

Protože celý formulář profilu jsou pouze pole připojená k profilu, můžete pole jednoduše připojit k formuláři pomocí rozhraní API Drupal core API:

  • field_attach_form přidá pole do formuláře.
  • field_attach_validate zpracovává ověření.
  • field_attach_submit pro zpracování přidávání hodnot do entity (profilu).
  • Nakonec budete muset uložit entitu profilu pomocí profile2_save.

Po procházení kódu modulu profile2 jsem zjistil, že poskytuje funkci wrapper pro připojení polí k formuláři a uložení formuláře. To je jednodušší, ale tím ztratíte malou kontrolu. Chcete-li toto použít, musíte použít profile2_attach_form. Tím se také vyřeší validace a uložení dat.

Chcete-li použít výše uvedený kód, měli byste být schopni c/p, přejmenovat formulář a nahradit profile_machine_name se skutečným názvem počítače profilu, pro který chcete zobrazit formulář.

20
googletorp