- Fluxul meu de lucru este redactarea și publicarea.
- Creez și public o pagină.
- Creez o schiță a paginii.
Acum există pagina publicată, dar cea mai recentă revizuire este proiectul.
Cum pot seta în mod programatic cea mai recentă revizuire publicată?
Acest cod publică nodul.
$nod = Nod::load(nid);
// Publicați și salvați nodul.
if ($node->hasField('stare_moderare')) {
$nod->set('stare_moderare', 'publicat');
}
$nod->setPublished();
$nod->salvare();
Nodul este deja publicat. Doresc să public schița/ultimea revizuire a nodului.
Această interogare are câteva posibilități.
// Publicați schița unui nod.
$interogare = \Drupal::database()->select('content_moderation_state_field_revision', 'cm');
// $query->fields('cm', ['stare_moderare']);
$query->fields('cm');
$query->condition('cm.content_entity_id', $node->id());
$query->condition('cm.moderation_state', 'draft');
$rezultat = $interogare->execute();
$record = $rezultat->fetchAssoc();
print_r($record);
Deoarece nodurile pot avea mai mult de o schiță, aș putea adăuga o LIMITĂ și un ORDER BY la interogare. Simpla schimbare a stării_moderării din tabelul content_moderation_state_field_revision și reconstruirea memoriei cache nu publică cea mai recentă revizuire.
Acest cod, ușor modificat de la EntityModerationForm.php, a funcționat o dată, dar apoi nu a mai funcționat.
/** @var \Drupal\Core\Entity\ContentEntityStorageInterface $storage */
$storage = \Drupal::entityTypeManager()->getStorage($node->getEntityTypeId());
$entity = $storage->createRevision($node, $node->isDefaultRevision());
$new_state = 'publicat';
$entity->set('stare_moderare', $stare_noua);
if ($entity instanceof RevisionLogInterface) {
$entity->setRevisionCreationTime(\Drupal::time()->getRequestTime());
$entity->setRevisionLogMessage('Ciornă creată automat');
$entity->setRevisionUserId(\Drupal::currentUser()->id());
}
// $nod->setNewRevision(FALSE);
$entity->salvare();