Score:0

วิธีรับการแก้ไขย่อหน้า

ธง sa

ฉันมีรหัสที่กำลังทำงานอยู่ 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 ตัวแปรในฟังก์ชั่นด้านบนซึ่งพยายามแก้ไข ...

Score:1
ธง cn

ผู้ไม่มีชื่อ บน ฟังก์ชันใช้งานได้เฉพาะกับโหนดเดียวที่คุณได้รับผ่าน hook เป็นพารามิเตอร์ โหลดย่อหน้าที่อ้างอิงเก่าผ่านเอนทิตีต้นฉบับ:

$old_paragraphs = $node->original->get($paragraph_field)->referencedEntities();

สำหรับย่อหน้าที่ซ้อนกัน คุณสามารถใช้การโหลดซ้ำได้ แต่แต่ละสาขา (เก่า/ใหม่) แยกกัน ไม่ใช่กับ บน ฟังก์ชัน ใช้ ->referencedEntities() สำหรับหลายรายการ และ ->เอนทิตี สำหรับรายการฟิลด์เดียว ฟังก์ชันเหล่านี้จะโหลดการแก้ไข

ในไซต์หลายภาษา คุณต้องรับการแปลย่อหน้าโดยใช้ภาษาของโหนด:

$node_language = $node->language()->getId();
$value = $paragraph->getTranslation($node_language)->field_foo->value;
cn flag
ความคิดเห็นไม่ได้มีไว้สำหรับการอภิปรายเพิ่มเติม การสนทนานี้[ย้ายไปที่แชท](https://chat.stackexchange.com/rooms/131668/discussion-on-answer-by-4k4-how-to-get-the-revision-of-a-paragraph) .
cn flag
แต่ถ้ามีการจัดลำดับย่อหน้าใหม่ล่ะ คีย์อาร์เรย์ที่ระบุในอาร์เรย์ที่ส่งคืนโดย ReferencedEntities อาจไม่ชี้ไปที่เอนทิตีเดียวกัน ฉันคิดว่าเราควรโหลดเอนทิตีที่เก่ากว่าจากรหัสเอนทิตีของรายการย่อหน้า

โพสต์คำตอบ

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