- เวิร์กโฟลว์ของฉันเป็นแบบร่างและเผยแพร่
- ฉันสร้างและเผยแพร่เพจ
- ฉันสร้างร่างของเพจ
ขณะนี้มีหน้าเผยแพร่แล้ว แต่ฉบับแก้ไขล่าสุดคือฉบับร่าง
ฉันจะตั้งค่าเป็นเผยแพร่ล่าสุดโดยทางโปรแกรมได้อย่างไร
รหัสนี้เผยแพร่โหนด
$node = Node::load(นิด);
// เผยแพร่และบันทึกโหนด
ถ้า ($node->hasField('moderation_state')) {
$node->set('moderation_state', 'เผยแพร่แล้ว');
}
$node->setPublished();
$node->save();
โหนดได้รับการเผยแพร่แล้ว ฉันต้องการเผยแพร่แบบร่าง/การแก้ไขล่าสุดของโหนด
ข้อความค้นหานี้มีความเป็นไปได้บางอย่าง
// เผยแพร่แบบร่างของโหนด
$query = \Drupal::database()->select('content_moderation_state_field_revision', 'cm');
// $query->fields('cm', ['moderation_state']);
$query->fields('ซม.');
$query->condition('cm.content_entity_id', $node->id());
$query->condition('cm.moderation_state', 'แบบร่าง');
$result = $query->execute();
$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);
ถ้า (อินสแตนซ์ $entity ของ RevisionLogInterface) {
$entity->setRevisionCreationTime(\Drupal::time()->getRequestTime());
$entity->setRevisionLogMessage('แบบร่างที่สร้างขึ้นโดยอัตโนมัติ');
$entity->setRevisionUserId(\Drupal::currentUser()->id());
}
// $node->setNewRevision(FALSE);
$entity->save();