it-swarm-id.com

Cara menampilkan formulir profil menggunakan modul profile2

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?

11
Carlos Muñiz

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 cukup melampirkan bidang itu sendiri ke formulir, menggunakan Drupal API inti:

  • 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 dapat c/p, ganti nama formulir dan ganti profile_machine_name dengan nama mesin sebenarnya dari profil yang ingin Anda tampilkan formulirnya.

20
googletorp