วิธีแสดงฟอร์มโปรไฟล์โดยใช้โมดูล profile2


11

Profile2 เป็นโมดูลที่ใช้เอนทิตีเพื่อสร้างโปรไฟล์ที่แยกจากบัญชีผู้ใช้

จากภายในโมดูลของฉันฉันต้องการให้สามารถแสดงฟอร์มเพื่อแก้ไขเอนทิตีโปรไฟล์ อาจใช้ drupal_get_form หรือ API ของ Profile2 หรือวิธีอื่นใดก็ได้

วิธีที่ดีที่สุดที่จะไปเกี่ยวกับเรื่องนี้คืออะไร?

คำตอบ:


20

ฉันเพิ่งทำอะไรแบบนี้ เนื่องจากโปรไฟล์ใช้ฟิลด์สิ่งนี้จึงเป็นเรื่องง่าย สำหรับแบบฟอร์มคุณสามารถทำสิ่งนี้:

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

เนื่องจากรูปแบบโปรไฟล์ทั้งหมดเท่านั้นคือฟิลด์ที่แนบกับโปรไฟล์คุณจึงสามารถแนบฟิลด์ด้วยตัวคุณเองกับฟอร์มโดยใช้ Drupal core APIs:

  • field_attach_form เพิ่มเขตข้อมูลให้กับฟอร์ม
  • field_attach_validate จัดการการตรวจสอบ
  • field_attach_submit เพื่อจัดการการเพิ่มค่าให้กับกิจการ (โปรไฟล์)
  • profile2_saveสุดท้ายคุณจะต้องบันทึกรายละเอียดนิติบุคคลโดยใช้

หลังจากเรียกดูรหัสโมดูล profile2 ฉันพบว่ามันมีฟังก์ชั่น wrapper เพื่อแนบฟิลด์ไปยังแบบฟอร์มและบันทึกฟอร์ม สิ่งนี้ง่ายกว่า แต่ในการทำเช่นนั้นคุณขาดการควบคุมเล็กน้อย profile2_attach_formเมื่อต้องการใช้นี้คุณจำเป็นต้องใช้ การทำเช่นนี้จะจัดการการตรวจสอบและการบันทึกข้อมูล

ในการใช้รหัสข้างต้นคุณควรจะสามารถ c / p มันเปลี่ยนชื่อแบบฟอร์มและแทนที่profile_machine_nameด้วยชื่อเครื่องจริงของโปรไฟล์ที่คุณต้องการแสดงแบบฟอร์มสำหรับ


ฉันไม่เข้าใจว่าเกิดอะไรขึ้นที่นี่ ฉันแค่ต้องแสดงฟอร์ม Profile2 เป็นไปได้ไหม
Carlos Muñiz

เมื่อฉันใช้รหัสของคุณในโมดูลของฉันมันทำให้ฉันมีข้อผิดพลาดนี้: ข้อผิดพลาดร้ายแรง: ประเภทตัวถูกดำเนินการไม่สนับสนุนใน C: \ wamp \ www \ working \ modules \ field \ field.attach.inc ในบรรทัดที่ 550
Carlos Muñiz

@Charlie ฉันได้อัปเดตคำตอบของฉันพร้อมรายละเอียดเพิ่มเติมและให้ทางเลือกที่ง่ายกว่าเดิมโดยใช้ profile2 API
googletorp

นี่คือ googletorp !!! คำตอบของคุณทำงานกับการแก้ไขเล็กน้อย: ในตอนท้ายของฟังก์ชั่นที่ฉันเพิ่ม: ส่งกลับ $ form นั่นเป็นวิธีเดียวที่ฉันจะแสดงมันโดยเรียกมันด้วย drupal_get_form () หากมีวิธีอื่นในการแสดงโดยไม่มีแบบฟอร์มส่งคืน $ โปรดอธิบายมิฉะนั้นขอบคุณมาก!
Carlos Muñiz

ฉันต้องรอ 12 ชั่วโมงเพื่อรับรางวัล :)
Carlos Muñiz
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.