Рейтинг:3

Многоязычная модерация контента

флаг az

У меня два языка (английский и французский). Я хочу:

  • Изучите варианты создания/просмотра/утверждения/публикации контента на английском языке как собственный рабочий процесс
  • Изучите варианты создания/просмотра/утверждения/публикации контента на французском языке как собственный рабочий процесс
  • Не должно быть никакой зависимости между ходом модерации на английском языке и Французский поток модерации
  • После публикации, если есть необходимость изменить содержимое, его можно снова отправить обратно. Анонимные пользователи будут видеть последнюю опубликованную версию страницы, пока измененная страница не будет снова опубликована.

Рецензенты имеют право просматривать страницу только в том случае, если ее статус Рассмотрение.

Я попробовал следующие решения:

  1. Условие рабочего процесса: когда только Опубликовано установлено как Редакция по умолчанию.
    Любой язык работает правильно, но когда есть перевод и один из языков опубликован, даже если мы изменим состояние модерации узла на другом языке, текущий статус версии все еще находится на последней опубликованной версии узла. узел, независимо от языка и состояния модерации последнего, остается черновиком, поскольку база данных не обновляется (даже несмотря на то, что мы изменили ее на проверку или одобрение). В результате рецензент не может просмотреть переведенную страницу, поскольку она все еще находится в черновике. Поскольку версия доступна, рецензент должен перейти к конкретной версии и просмотреть страницу. Это нежелательно: проверяющие не должны беспокоиться об идентификаторе узла.

  2. Условие рабочего процесса: если только Review и Approved оба установлены как редакция по умолчанию.
    Оба языка теперь независимы; оба могут быть опубликованы по отдельности. Изменение любой из ревизий обратно на Рассмотрение или же Одобренный для изменения существующего содержимого узла отменяет его публикацию. В результате анонимные пользователи больше не могут видеть страницу.

  3. я пытался реализовать hook_entity_update() для обновления content_moderation_state_field_data.

    функция sync_revision_node_update (EntityInterface $ сущность) {
      $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)
            ->условие('langcode', $langcode)->выполнить();
        }
      }
    }
    

    Это обновление таблицы 'content_moderation_state_field_data', но страница /fr/test все еще не проверяется. Он до сих пор остается в проекте. Рецензенты должны перейти к последней версии и просмотреть страницу (/fr/node/$node_id/latest), но это нежелательно. Рецензенты не должны беспокоиться об идентификаторе узла.

  4. Я попытался написать хук предварительной обработки, который будет перенаправлять на последнюю версию.

    функция sync_revision_preprocess_page(&$variables) {
      $node = \Drupal::routeMatch()->getParameter('node');
      если ($узел экземпляр\Drupal\узел\NodeInterface) {
        $nid = $node->id();
        $vid = \Drupal::entityTypeManager()
        ->getStorage('узел')
        ->getLatestRevisionId($nid);
        $moderationState = $node->moderation_state->значение;
        $langcode = $node->get('langcode')->значение;
        $url = $_SERVER['REQUEST_URI'];
    
       if ($moderationState != "опубликовано" && strpos($url,'latest') == false) {
         $путь = "/". $лангкод . "/" . "узел/" . $нид . "/" . "последний";
         $response = новый RedirectResponse($path);
         $ответ->отправить();
       }
     }
    }
    

    Это не работает, как ожидалось. Сначала /fr/test получает ошибку 403, поэтому перенаправление не работает.

Пожалуйста, предложите лучший рабочий подход, чтобы соответствовать всем этим критериям.

Рейтинг:0
флаг cn

Для всего, что не является плоской модерацией рабочего процесса - предлагаю настроить и использовать https://www.drupal.org/project/state_machine модуль.

Вы можете настроить его для своих нужд.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.