Điểm:3

Kiểm duyệt nội dung đa ngôn ngữ

lá cờ az

Tôi có hai ngôn ngữ (tiếng Anh và tiếng Pháp). Tôi muốn:

  • Khám phá các tùy chọn để tạo/đánh giá/phê duyệt/xuất bản nội dung tiếng Anh như quy trình làm việc của chính nó
  • Khám phá các tùy chọn để tạo/đánh giá/phê duyệt/xuất bản nội dung tiếng Pháp như quy trình làm việc của chính nó
  • Không nên có sự phụ thuộc giữa quy trình kiểm duyệt bằng tiếng Anh và Pháp điều tiết dòng chảy
  • Sau khi xuất bản, nếu có bất kỳ nhu cầu sửa đổi nội dung nào, nội dung có thể được gửi lại. Người dùng ẩn danh sẽ nhìn thấy phiên bản được xuất bản lần cuối của trang cho đến khi trang đã sửa đổi được xuất bản lại

Người đánh giá có quyền chỉ xem một trang nếu trạng thái của nó là Ôn tập.

Tôi đã thử các giải pháp sau:

  1. Điều kiện quy trình công việc: Khi chỉ Đã xuất bản được đặt là Bản sửa đổi mặc định.
    Bất kỳ ngôn ngữ nào cũng hoạt động bình thường, nhưng khi có bản dịch và một trong các ngôn ngữ được xuất bản, ngay cả khi chúng tôi thay đổi trạng thái kiểm duyệt của nút bằng ngôn ngữ khác, trạng thái sửa đổi hiện tại vẫn nằm trên phiên bản đã xuất bản cuối cùng của ngôn ngữ đó. nút bất kể ngôn ngữ là gì và trạng thái kiểm duyệt của nút sau vẫn nằm trong bản nháp vì cơ sở dữ liệu không được cập nhật (mặc dù chúng tôi đã thay đổi nó để xem xét hoặc phê duyệt). Kết quả là Người phản biện không thể xem trang đã dịch vì nó vẫn còn ở dạng bản nháp. Vì đã có bản sửa đổi nên người đánh giá phải đi đến bản sửa đổi cụ thể và xem trang. Điều này là không mong muốn: Người đánh giá không nên bận tâm với ID nút.

  2. Điều kiện quy trình làm việc: Khi chỉ Xem xét và Phê duyệt, cả hai đều được đặt làm Bản sửa đổi mặc định.
    Cả hai ngôn ngữ đều độc lập; cả hai có thể được xuất bản riêng lẻ. Thay đổi bất kỳ sửa đổi nào trở lại thành Ôn tập hoặc Đã được phê duyệt để sửa đổi nội dung nút hiện có sẽ hủy xuất bản nó. Do đó, người dùng ẩn danh không thể xem trang được nữa.

  3. tôi đã cố gắng thực hiện hook_entity_update() để cập nhật content_moderation_state_field_data.

    chức năng sync_revision_node_update(EntityInterface $entity) {
      $entity_type = $entity->getEntityTypeId();
    
      nếu ($entity_type == "nút") {
        $entity_id = $entity->id();
        $vid = \Drupal::entityTypeManager()->getStorage('node')
          ->getLatestRevisionId($entity_id);
        $langcode = $entity->get('langcode')->value;
        $moderationState = $entity->moderation_state->value;
    
        if ($moderationState != "đã xuất bản") {
          $table = 'content_moderation_state_field_data';
          $query = \Drupal::database()->update($table)
            -> trường (mảng (
                'moderation_state' => $moderationState,
                'content_entity_revision_id' => $vid,
            ))
            ->điều kiện('content_entity_id', $entity_id)
            ->điều kiện('langcode', $langcode)->execute();
        }
      }
    }
    

    Điều này đang cập nhật bảng 'content_moderation_state_field_data' nhưng trang /fr/test vẫn chưa được xem xét. Nó vẫn còn trong dự thảo. Người đánh giá cần xem bản sửa đổi mới nhất và xem trang (/fr/node/$node_id/latest), nhưng điều này không được mong muốn. Người đánh giá không nên bận tâm về ID nút.

  4. Tôi đã cố gắng viết một hook tiền xử lý sẽ chuyển hướng đến bản sửa đổi mới nhất.

    chức năng sync_revision_pre process_page(&$variables) {
      $node = \Drupal::routeMatch()->getParameter('node');
      if ($node instanceof \Drupal\node\NodeInterface) {
        $nid = $node->id();
        $vid = \Drupal::entityTypeManager()
        ->getStorage('nút')
        ->getLatestRevisionId($nid);
        $moderationState = $node->moderation_state->value;
        $langcode = $node->get('langcode')->value;
        $url = $_SERVER['REQUEST_URI'];
    
       if ($moderationState != "đã xuất bản" && strpos($url,'latest') == false) {
         $path = "/" . mã ngôn ngữ $. "/" . "nút/" . $nid . "/" . "muộn nhất";
         $response = new RedirectResponse($path);
         $ phản hồi-> gửi();
       }
     }
    }
    

    Điều này không hoạt động như mong đợi. /fr/test lần đầu tiên gặp lỗi 403 và do đó chuyển hướng không hoạt động.

Vui lòng đề xuất một phương pháp làm việc tốt hơn để phù hợp với tất cả các tiêu chí này.

Điểm:0
lá cờ cn

Đối với mọi thứ không phải là kiểm duyệt quy trình làm việc cố định - tôi đề xuất thiết lập và sử dụng https://www.drupal.org/project/state_machine mô-đun.

Bạn có thể thiết lập nó cho nhu cầu của bạn.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.