Score:3

การกลั่นกรองเนื้อหาหลายภาษา

ธง az

ฉันมีสองภาษา (อังกฤษและฝรั่งเศส) ฉันต้องการ:

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

ผู้ตรวจทานได้รับอนุญาตให้ดูหน้าเฉพาะเมื่อสถานะเป็นเท่านั้น ทบทวน.

ฉันลองวิธีแก้ไขต่อไปนี้:

  1. เงื่อนไขเวิร์กโฟลว์: เมื่อเผยแพร่แล้วเท่านั้นที่ถูกตั้งค่าเป็นการแก้ไขเริ่มต้น
    ภาษาใดๆ ทำงานได้อย่างถูกต้อง แต่เมื่อมีการแปลและเผยแพร่ภาษาใดภาษาหนึ่ง แม้ว่าเมื่อเราเปลี่ยนสถานะการดูแลของโหนดในภาษาอื่น สถานะการแก้ไขปัจจุบันยังคงอยู่ในการแก้ไขเผยแพร่ล่าสุดของ โหนดโดยไม่คำนึงถึงภาษาและสถานะการดูแลของโหนดหลังจะยังคงอยู่ในแบบร่างเนื่องจากฐานข้อมูลไม่ได้รับการอัปเดต (แม้ว่าเราจะเปลี่ยนเพื่อตรวจสอบหรืออนุมัติก็ตาม) ส่งผลให้ผู้ตรวจสอบไม่สามารถดูหน้าที่แปลได้ เนื่องจากยังอยู่ในฉบับร่าง เนื่องจากมีการแก้ไข ผู้ตรวจทานจึงต้องไปที่การแก้ไขนั้นและดูหน้านั้น สิ่งนี้ไม่ต้องการ: ผู้ตรวจสอบไม่ควรใส่ใจกับรหัสโหนด

  2. เงื่อนไขเวิร์กโฟลว์: เมื่อเฉพาะตรวจทานและอนุมัติเท่านั้นที่ตั้งค่าเป็นการแก้ไขเริ่มต้น
    ทั้งสองภาษาเป็นอิสระแล้ว ทั้งสองสามารถเผยแพร่แยกกันได้ เปลี่ยนการแก้ไขใด ๆ กลับเป็น ทบทวน หรือ ที่ได้รับการอนุมัติ หากต้องการแก้ไขเนื้อหาของโหนดที่มีอยู่ให้ยกเลิกการเผยแพร่ ด้วยเหตุนี้ ผู้ใช้ที่ไม่ระบุตัวตนจะไม่สามารถมองเห็นเพจได้อีกต่อไป

  3. ฉันพยายามที่จะใช้ hook_entity_update () เพื่ออัปเดต content_moderation_state_field_data

    ฟังก์ชัน sync_revision_node_update (EntityInterface $entity) {
      $entity_type = $entity->getEntityTypeId();
    
      ถ้า ($entity_type == "โหนด") {
        $entity_id = $entity->id();
        $vid = \Drupal::entityTypeManager()->getStorage('โหนด')
          ->getLatestRevisionId($entity_id);
        $langcode = $entity->get('langcode')->value;
        $moderationState = $entity->moderation_state->ค่า;
    
        ถ้า ($moderationState != "เผยแพร่แล้ว") {
          $table = 'content_moderation_state_field_data';
          $query = \Drupal::database()->update($table)
            ->เขตข้อมูล(อาร์เรย์(
                'moderation_state' => $moderationState,
                'content_entity_revision_id' => $vid,
            ))
            ->เงื่อนไข('content_entity_id', $entity_id)
            ->condition('langcode', $langcode)->execute();
        }
      }
    }
    

    นี่เป็นการอัปเดตตาราง 'content_moderation_state_field_data' แต่หน้า /fr/test ยังไม่ได้รับการตรวจสอบ มันยังคงอยู่ในร่าง ผู้ตรวจสอบต้องไปแก้ไขล่าสุดและดูหน้า (/fr/node/$node_id/latest) แต่ไม่ต้องการ ผู้ตรวจสอบไม่ควรกังวลเกี่ยวกับรหัสโหนด

  4. ฉันพยายามเขียนเบ็ดการประมวลผลล่วงหน้าที่จะเปลี่ยนเส้นทางไปยังการแก้ไขล่าสุด

    ฟังก์ชัน sync_revision_preprocess_page(&$ตัวแปร) {
      $node = \Drupal::routeMatch()->getParameter('โหนด');
      ถ้า ($ โหนดอินสแตนซ์ของ \Drupal\node\NodeInterface) {
        $nid = $node->id();
        $vid = \Drupal::entityTypeManager()
        ->getStorage('โหนด')
        ->getLatestRevisionId($nid);
        $moderationState = $node->moderation_state->value;
        $langcode = $node->get('langcode')->value;
        $url = $_SERVER['REQUEST_URI'];
    
       ถ้า ($moderationState != "เผยแพร่" && strpos($url,'ล่าสุด') == เท็จ) {
         $เส้นทาง = "/" $langcode . "/" . "โหนด/" . $นิด "/" . "ล่าสุด";
         $response = ใหม่ RedirectResponse($path);
         $response->send();
       }
     }
    }
    

    สิ่งนี้ไม่ทำงานตามที่คาดไว้ /fr/test ได้รับข้อผิดพลาด 403 เป็นอันดับแรก ดังนั้นการเปลี่ยนเส้นทางจึงไม่ทำงาน

โปรดแนะนำแนวทางการทำงานที่ดีกว่าเพื่อให้สอดคล้องกับเกณฑ์เหล่านี้ทั้งหมด

Score:0
ธง cn

สำหรับทุกสิ่งที่ไม่ใช่การกลั่นกรองเวิร์กโฟลว์แบบเรียบ - ฉันเสนอให้ตั้งค่าและใช้งาน https://www.drupal.org/project/state_machine โมดูล.

คุณสามารถตั้งค่าได้ตามความต้องการของคุณ

โพสต์คำตอบ

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