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:
Đ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.
Đ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.
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.
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.