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ć?

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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.