Cara menampilkan formulir profil menggunakan modul profile2


11

Profile2 adalah modul yang menggunakan entitas untuk membuat profil yang terpisah dari akun pengguna.

Dari dalam modul saya, saya ingin dapat menampilkan formulir untuk mengedit entitas profil. Mungkin menggunakan drupal_get_form atau mungkin API Profile2 atau metode lainnya.

Apa cara terbaik untuk masalah ini?

Jawaban:


20

Saya melakukan sesuatu seperti ini baru-baru ini. Karena profil menggunakan bidang, ini membuat semuanya sangat sederhana. Untuk formulir Anda bisa melakukan sesuatu seperti ini:

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

Karena semua formulir profil hanya merupakan bidang yang dilampirkan ke profil, Anda dapat dengan mudah melampirkan bidang itu sendiri ke formulir, menggunakan API inti Drupal:

  • field_attach_form menambahkan bidang ke formulir.
  • field_attach_validate menangani validasi.
  • field_attach_submit untuk menangani penambahan nilai ke entitas (profil).
  • Terakhir Anda harus menyimpan entitas profil menggunakan profile2_save.

Setelah menelusuri kode modul profile2, saya menemukan bahwa itu menyediakan fungsi pembungkus untuk melampirkan bidang ke formulir dan menyimpan formulir. Ini lebih sederhana, tetapi dengan melakukannya, Anda kehilangan sedikit kontrol. Untuk menggunakan ini, Anda perlu menggunakan profile2_attach_form. Melakukan ini juga akan menangani validasi dan penyimpanan data.

Untuk menggunakan kode di atas Anda harus bisa c / p, ganti nama formulir dan ganti profile_machine_namedengan nama mesin profil yang Anda inginkan untuk menampilkan formulir.


Saya tidak mengerti apa yang terjadi di sini. Saya hanya perlu menampilkan formulir Profile2. Apakah ini mungkin?
Carlos Muñiz

ketika saya menggunakan kode Anda di modul saya itu memberi saya kesalahan ini: Kesalahan fatal: jenis operan yang tidak didukung dalam C: \ wamp \ www \ working \ modules \ field \ field.attach.inc on line 550
Carlos Muñiz

@Charlie Saya telah memperbarui jawaban saya dengan lebih detail dan memberikan solusi alternatif dan lebih sederhana menggunakan API profile2.
googletorp

ini dia googletorp !!! jawaban Anda bekerja dengan suntingan kecil: pada akhir fungsi saya menambahkan: mengembalikan $ form itu satu-satunya cara saya bisa menampilkannya dengan memanggilnya dengan drupal_get_form (). Jika ada cara alternatif untuk menampilkannya tanpa formulir pengembalian $ maka tolong jelaskan, jika tidak, terima kasih banyak!
Carlos Muñiz

Saya harus menunggu 12 jam untuk menghadiahkan hadiah :)
Carlos Muñiz
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.