ฉันมีรหัสที่กำลังทำงานอยู่ hook_node_update
. รหัสนี้จับการแก้ไขของโหนดที่บันทึกไว้และเปรียบเทียบค่าของฟิลด์ระหว่างโหนดปัจจุบันกับการแก้ไขเพื่อสร้างบันทึกประวัติบางประเภท (สิ่งที่ถูกลบ/อัปเดต/เพิ่ม)
สิ่งนี้ทำงานได้ดีมากยกเว้นฟิลด์ย่อหน้า ...
เมื่อรหัสของฉันพยายามแก้ไขย่อหน้า (วนซ้ำ) ฉันได้รับย่อหน้าเดียวกันทุกครั้งแทนที่จะเป็นการแก้ไขเก่า (ดังนั้นจึงไม่มีความแตกต่างในการบันทึก)
นี่คือรหัสของฉันเพื่อรับการแก้ไขโหนดที่บันทึกไว้ (ทำงานได้ดี) รหัสนี้ยังใช้สำหรับย่อหน้า (ไม่ทำงาน)
$updated_entity
: โหนด/ย่อหน้าที่กำลังอยู่ในกระบวนการที่จะบันทึก
$old_entity
: การแก้ไขเพื่อเปรียบเทียบ
$old_entity = $updated_entity->เดิม;
ถ้า (!$old_entity) {
$storage = $this->getStorage($updated_entity);
// ไม่ต้องทดสอบว่าแก้ไขได้ไหม เพราะเราใช้แค่ Node และ Paragraphs
ถ้า ($revision_id = $updated_entity->getLoadedRevisionId()) {
$old_entity = $storage->loadRevision($revision_id);
}
อื่น {
//... จัดการเอนทิตีใหม่
]);
}
}
รหัสนี้ เมื่อนำไปใช้กับย่อหน้า กำลังสร้าง $old_entity == $updated_entity
ย่อหน้าถูกแยกออกจากโหนดที่บันทึกไว้ในปัจจุบันดังต่อไปนี้:
$paragraphs = $updated_entity->get($paragraph_field)->referencedEntities();
หลังจากนั้นพวกเขากลายเป็น $updated_entity
ตัวแปรในฟังก์ชั่นด้านบนซึ่งพยายามแก้ไข ...