Jak wyświetlić formularz profilu za pomocą modułu profile2

11

Profile2 to moduł, który używa encji do tworzenia profili, które są niezależne od konta użytkownika.

W moim module chcę mieć możliwość wyświetlenia formularza do edycji jednostek profilu. Prawdopodobnie przy użyciu drupal_get_form lub API API Profile2 lub innej metody.

Jak najlepiej to zrobić?

Carlos Muñiz
źródło

Odpowiedzi:

20

Ostatnio zrobiłem coś takiego. Ponieważ profil używa pól, to czyni sprawę bardzo prostą. Dla formularza możesz zrobić coś takiego:

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

Ponieważ wszystkie formularze profilu są tylko polami dołączonymi do profilu, możesz po prostu sam dołączyć pola do formularza, używając podstawowych interfejsów API Drupal:

  • field_attach_form dodaje pola do formularza.
  • field_attach_validate obsługuje sprawdzanie poprawności.
  • field_attach_submit obsługuje dodawanie wartości do encji (profilu).
  • Na koniec musisz zapisać encję profilu za pomocą profile2_save.

Po przejrzeniu kodu modułu profile2 odkryłem, że zapewnia on funkcję otoki w celu dołączenia pól do formularza i zapisania formularza. To jest prostsze, ale robiąc to tracisz trochę kontroli. Aby tego użyć, musisz użyć profile2_attach_form. W ten sposób zajmie się również sprawdzaniem poprawności i zapisywaniem danych.

Aby użyć powyższego kodu, powinieneś być w stanie go c / p, zmienić nazwę formularza i zastąpić profile_machine_namerzeczywistą nazwą komputera profilu, dla którego chcesz wyświetlić formularz.

googletorp
źródło
Nie rozumiem, co się tutaj dzieje. Muszę tylko wyświetlić formularz Profile2. czy to możliwe?
Carlos Muñiz
kiedy używać swój kod w moim modułu daje mi ten błąd: Fatal error: nieobsługiwane typy operandu w katalogu C: \ wamp \ www \ praca \ Modules \ \ field.attach.inc pola na linii 550
Carlos Muñiz
@Charlie Zaktualizowałem swoją odpowiedź o więcej szczegółów i podałem alternatywne i prostsze rozwiązanie z wykorzystaniem API profil2.
googletorp
to jest googletorp !!! twoja odpowiedź działała z drobną edycją: na końcu dodanej funkcji: return $ form był to jedyny sposób, w jaki mogłem ją wyświetlić, wywołując go za pomocą drupal_get_form (). Jeśli istnieje alternatywny sposób wyświetlania go bez formularza zwrotu $, proszę wyjaśnić, w przeciwnym razie bardzo dziękuję!
Carlos Muñiz
Muszę czekać 12 godzin, aby przyznać nagrodę :)
Carlos Muñiz