Điểm:2

Làm cách nào để xuất bản bản sửa đổi mới nhất theo chương trình?

lá cờ us
  1. Quy trình công việc của tôi là soạn thảo và xuất bản.
  2. Tôi tạo và xuất bản một trang.
  3. Tôi tạo một bản nháp của trang.

Hiện đã có trang được xuất bản, nhưng bản sửa đổi mới nhất là bản nháp.

Làm cách nào để tôi lập trình đặt là bản sửa đổi mới nhất đã xuất bản?

Mã này xuất bản nút.

$node = Nút::load(nid);
// Xuất bản và lưu nút.
if ($node->hasField('moderation_state')) {
  $node->set('moderation_state', 'published');
}
$node->setPublished();
$node->save();

Nút đã được xuất bản. Tôi muốn xuất bản bản nháp/bản sửa đổi mới nhất của nút.

Truy vấn này có một số khả năng.

// Xuất bản bản thảo của một nút.
$query = \Drupal::database()->select('content_moderation_state_field_revision', 'cm');
// $query->fields('cm', ['moderation_state']);
$query->field('cm');
$query->condition('cm.content_entity_id', $node->id());
$query->condition('cm.moderation_state', 'draft');
$result = $query->execute();
$record = $result->fetchAssoc();
print_r($record);

Vì các nút có thể có nhiều hơn một bản nháp nên tôi có thể thêm GIỚI HẠN và ĐẶT HÀNG THEO vào truy vấn. Chỉ cần thay đổimode_state trong bảng content_moderation_state_field_revision và xây dựng lại bộ nhớ cache sẽ không xuất bản bản sửa đổi mới nhất.

Mã này, được thay đổi một chút từ EntityModerationForm.php, đã hoạt động một lần nhưng sau đó không hoạt động trở lại.

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

$new_state = 'đã xuất bản';

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

if ($entity instanceof RevisionLogInterface) {
  $entity->setRevisionCreationTime(\Drupal::time()->getRequestTime());
  $entity->setRevisionLogMessage('Bản nháp được tạo tự động');
  $entity->setRevisionUserId(\Drupal::currentUser()->id());
}
// $node->setNewRevision(FALSE);
$entity->save();




Điểm:3
lá cờ ua
  // lấy ID sửa đổi mới nhất
  $latest_vid = \Drupal::entityTypeManager()
    ->getStorage('nút')
    ->getLatestRevisionId($nid);

  // tải phiên bản mới nhất
  $latest_revision = \Drupal::entityTypeManager()
    ->getStorage('nút')
    ->loadRevision($latest_vid);

  // đặt bản sửa đổi mới nhất thành xuất bản nếu là bản nháp
  $is_draft = $latest_revision->moderation_state->value == 'bản nháp';
  nếu ($is_draft) {
    $latest_revision->set('moderation_state', 'published')
      -> lưu();
  }
lá cờ us
hoàn hảo. Cảm ơn 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.