Рейтинг:2

Как программно опубликовать последнюю версию?

флаг us
  1. Мой рабочий процесс черновик и публикация.
  2. Я создаю и публикую страницу.
  3. Я создаю черновик страницы.

Теперь есть опубликованная страница, но последняя редакция — это черновик.

Как программно установить последнюю версию как опубликованную?

Этот код публикует узел.

$node = Node::load(nid);
// Публикуем и сохраняем узел.
если ($node->hasField('moderation_state')) {
  $node->set('moderation_state', 'опубликовано');
}
$узел->setPublished();
$узел->сохранить();

Узел уже опубликован. Я хочу опубликовать черновик/последнюю версию узла.

Этот запрос имеет некоторые возможности.

// Публикуем черновик узла.
$query = \Drupal::database()->select('content_moderation_state_field_revision', 'cm');
// $query->fields('cm', ['moderation_state']);
$запрос->поля('см');
$query->условие('cm.content_entity_id', $node->id());
$query->условие('cm.moderation_state', 'черновик');
$результат = $запрос->выполнить();
$record = $result->fetchAssoc();
print_r ($ запись);

Поскольку узлы могут иметь более одного черновика, я мог бы добавить к запросу LIMIT и ORDER BY. Простое изменение moderation_state в таблице content_moderation_state_field_revision и перестроение кеша не публикует последнюю версию.

Этот код, немного измененный из EntityModerationForm.php, работал один раз, но потом снова не работал.

/** @var \Drupal\Core\Entity\ContentEntityStorageInterface $storage */
$storage = \Drupal::entityTypeManager()->getStorage($node->getEntityTypeId());
$entity = $storage->createRevision($node, $node->isDefaultRevision());

$new_state = 'опубликовано';

$entity->set('moderation_state', $new_state);

if ($entity instanceof RevisionLogInterface) {
  $entity->setRevisionCreationTime(\Drupal::time()->getRequestTime());
  $entity->setRevisionLogMessage('Черновик создан автоматически');
  $entity->setRevisionUserId(\Drupal::currentUser()->id());
}
// $node->setNewRevision(FALSE);
$сущность->сохранить();




Рейтинг:3
флаг ua
  // получить идентификатор последней версии
  $latest_vid = \Drupal::entityTypeManager()
    ->getStorage('узел')
    ->getLatestRevisionId($nid);

  // загружаем последнюю версию
  $latest_revision = \Drupal::entityTypeManager()
    ->getStorage('узел')
    ->loadRevision($latest_vid);

  // установить последнюю версию как опубликованную, если это черновик
  $is_draft = $latest_revision->moderation_state->value == 'черновик';
  если ($ is_draft) {
    $latest_revision->set('moderation_state', 'опубликовано')
      -> сохранить();
  }
флаг us
Отлично. Спасибо.

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

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