Score:2

ฉันจะเผยแพร่การแก้ไขล่าสุดโดยทางโปรแกรมได้อย่างไร

ธง us
  1. เวิร์กโฟลว์ของฉันเป็นแบบร่างและเผยแพร่
  2. ฉันสร้างและเผยแพร่เพจ
  3. ฉันสร้างร่างของเพจ

ขณะนี้มีหน้าเผยแพร่แล้ว แต่ฉบับแก้ไขล่าสุดคือฉบับร่าง

ฉันจะตั้งค่าเป็นเผยแพร่ล่าสุดโดยทางโปรแกรมได้อย่างไร

รหัสนี้เผยแพร่โหนด

$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();




Score:3
ธง ua
  // รับ ID การแก้ไขล่าสุด
  $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 flag
สมบูรณ์แบบ. ขอขอบคุณ.

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา