Score:2

hook_node_presave รับต้นฉบับของโหนดที่แปลแล้ว

ธง cn

ฉันใช้ hook_node_presave และฉันต้องการตรวจสอบว่าฟิลด์ใดได้รับการอัปเดตเมื่อมีการอัปเดตโหนดที่แปลแล้ว นี่คือรหัสของฉัน:

ฟังก์ชัน hook_import_node_presave (\Drupal\node\NodeInterface $node) {
  ถ้า (!$node->isNew()){
    $entityFieldManager = \Drupal::service('entity_field.manager');
    $fields = $entityFieldManager->getFieldDefinitions('โหนด', 'บทความ');
    foreach($fields เป็น $field_name => $field_definition) {
      foreach ($node->getTranslationLanguages() เป็น $langcode => $langcode_value) {
        $node = $node->getTranslation($langcode);
        ถ้า ($node->get($field_name)->getValue() != $node->original->get($field_name)->getValue()) {
          // ทำอะไรสักอย่าง
        }
      }
    }
  }
}

อย่างไรก็ตาม,

$node = $node->getTranslation($langcode);
$node->original->get($field_name)->getValue()

แม้ว่า "getTranslation()" "ต้นฉบับ" จะยังคงชี้ไปที่ภาษาเริ่มต้น ฉันต้องการรับภาษา "ดั้งเดิม" ของโหนดที่แปล

4uk4 avatar
cn flag
ผลลัพธ์ของ $node->original->getTranslation($langcode)->get($field_name)->getValue() คืออะไร
Gabriel Fernandez avatar
cn flag
ใช่! ดูเหมือนว่าตอนนี้จะได้รับค่า "ดั้งเดิม" ของโหนดที่แปลแล้ว ขอบคุณมาก!
Score:1
ธง cn
$node = $node->getTranslation($langcode);

สิ่งนี้กำลังเปลี่ยนการแปลของวัตถุโหนดที่ส่งผ่านโดยการอ้างอิง ใช้ตัวแปรอื่นดีกว่า:

$node_translated = $node->getTranslation($langcode);

$node->original->get($field_name)->getValue()

ต้นฉบับ เป็นวัตถุโหนดแยกต่างหากและต้องแปลแยกกัน:

$node->original->getTranslation($langcode)->get($field_name)->getValue()

โพสต์คำตอบ

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