วิธีใช้ hook_node_presave เพื่อเปลี่ยนค่าของฟิลด์


9

โดยทั่วไปฉันต้องการใส่ชื่อ & นามสกุลเข้าด้วยกันใน $ node-> field_par_contact_name

แต่มันเตือนฉัน (ดูด้านล่าง)

ฟังก์ชัน __ode_presave ($ โหนด) {
  if ($ node-> type == 'หุ้นส่วน') {
    $ first_name = $ node-> field_par_contact_first_name ['und'] [0] ['ชื่อ'];
    $ surname = $ node-> field_par_contact_surname ['und'] [0] ['name'];

    // https://drupal.org/project/field_hidden
    // ตัวแปรที่ซ่อนอยู่
    $ node-> field_par_contact_name ['und'] [0] ['value'] = $ first_name '' $ นามสกุล;

    // คำเตือนหลังจากบันทึก: array_flip (): สามารถพลิกค่า STRING และ INTEGER ได้เท่านั้น! ใน DrupalDefaultEntityController-> load () (บรรทัด 173 จาก ... / drupal-7.23 / ประกอบด้วย / เอนทิตี
  }
}

อัปเดตโปรดดูภาพ: ป้อนคำอธิบายรูปภาพที่นี่


คุณส่งแบบฟอร์มโดยทางโปรแกรมหรือไม่ ฉันหมายถึงคุณกำลังใช้ hook_form_alter ใช่ไหม แล้ว drupal_form_submit บางแห่งในรหัสของคุณ?
harshal

คำตอบ:


6

สำหรับผู้เริ่มคุณอาจใช้คีย์อาเรย์ที่ไม่ถูกต้องสำหรับค่าฟิลด์ที่คุณกำลังบันทึก 'ชื่อ' ควรเป็น 'ค่า' ที่นั่น

$node->field_par_contact_name['und'][0]['value'];

ประการที่สองคุณใช้ฟิลด์อ้างอิงคำศัพท์ทางภาษีสำหรับเขตข้อมูล "ชื่อ" และ "นามสกุล" จุดสำคัญหนึ่งเกี่ยวกับเขตข้อมูลอ้างอิงคือคุณไม่สามารถสันนิษฐานได้ว่าเอนทิตีที่อ้างอิงได้ถูกโหลดเต็มและมีอยู่ในวัตถุของคุณแล้ว โดยค่าเริ่มต้นเมื่อโหลดวัตถุโหนดแล้วฟิลด์นั้นจะมีลักษณะดังนี้:

$node->field_par_contact_first_name (Array)
  'und' (Array)
    0 (Array)
      'tid' => 284

มีเพียงปุ่ม 'tid' เท่านั้นที่แน่นอน 'name' เป็นคุณสมบัติของคำที่อ้างอิงและโดยปกติจะไม่สามารถใช้งานได้โดยอัตโนมัติ (รหัสที่ตามมาอาจโหลดคำที่อ้างอิงจริงและทำให้พร้อมใช้งานภายในวัตถุ $ node แต่นั่นเป็นเพียงสิ่งที่เกิดขึ้นถ้าเป็นเช่นนั้น)

คุณจะมีเวลาได้ง่ายขึ้นถ้าเขตข้อมูล "ชื่อ" และ "นามสกุล" ของคุณเป็นเขตข้อมูลข้อความแทนการอ้างอิง จากนั้นค่าเหล่านั้นจะเป็นของโหนดโดยตรงแทนที่จะเป็นคำศัพท์อนุกรมวิธานแยกต่างหากที่ถูกอ้างอิง

หากคุณติดอยู่โดยใช้การอ้างอิงคำศัพท์อนุกรมวิธานดังนั้นคุณควรกำหนดจุดในรหัสของคุณเพื่อโหลดคำที่อ้างอิงแล้วรับค่าที่คุณต้องการจากคุณสมบัติ $ term-> name


ดูภาพด้านบน ไม่มี 'ค่า'
kenpeter

อาคุณกำลังใช้เขตข้อมูลการอ้างอิงคำ Taxonomy สำหรับชื่อและนามสกุลไม่ใช่ฟิลด์ข้อความตามที่ฉันสันนิษฐาน นั่นเป็นเรื่องแปลก :) ปรับปรุงคำตอบ
Les Lim

คุณถูก.
kenpeter
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.