Am două limbi (engleză și franceză). Vreau sa:
- Explorați opțiunile pentru a crea/revizui/aproba/publica conținut în limba engleză
ca propriul flux de lucru
- Explorați opțiunile de a crea/examina/aproba/publica conținut francez
ca propriul flux de lucru
- Nu ar trebui să existe nicio dependență între fluxul de moderare a limbii engleze și
Fluxul moderației franceze
- După publicare, dacă este nevoie să se modifice conținutul, acesta poate fi din nou trimis înapoi. Utilizatorii anonimi vor vedea ultima versiune publicată a paginii până când pagina modificată este din nou publicată
Evaluatorii au permisiunea de a vizualiza o pagină numai dacă starea acesteia este Revizuire.
Am incercat urmatoarele solutii:
Condiția fluxului de lucru: Când numai Publicat este setată ca Revizie implicită.
Orice limbă funcționează corect, dar când există o traducere și una dintre limbi este publicată, chiar dacă atunci când schimbăm starea de moderare a nodului în cealaltă limbă, starea actuală de revizuire se află încă pe ultima revizuire publicată a limbii. nodul indiferent de limbă și starea de moderare a acestuia din urmă rămâne pe draft, deoarece baza de date nu este actualizată (chiar dacă am schimbat-o pentru a fi revizuită sau aprobată). Drept urmare, examinatorul nu poate vizualiza pagina tradusă, deoarece este încă în schiță. Deoarece este disponibilă o revizuire, examinatorul trebuie să acceseze revizuirea anume și să vadă pagina. Acest lucru nu este de dorit: evaluatorii nu ar trebui să fie deranjați cu ID-ul nodului.
Condiția fluxului de lucru: când numai Revizuire și Aprobat, ambele sunt setate ca Revizie implicită.
Ambele limbi sunt acum independente; ambele pot fi publicate individual. Schimbarea oricăreia dintre revizuiri înapoi la Revizuire sau Aprobat pentru a modifica conținutul nodului existent îl anulează. Ca urmare, utilizatorii anonimi nu mai pot vedea pagina.
Am încercat să pun în aplicare hook_entity_update()
pentru a actualiza content_moderation_state_field_data.
funcția sync_revision_node_update(EntityInterface $entity) {
$entity_type = $entity->getEntityTypeId();
if ($entity_type == „nod”) {
$entity_id = $entity->id();
$vid = \Drupal::entityTypeManager()->getStorage('nod')
->getLatestRevisionId($entity_id);
$langcode = $entity->get('langcode')->value;
$moderationState = $entity->moderation_state->value;
if ($moderationState != „publicat”) {
$table = 'conținut_moderație_state_field_data';
$interogare = \Drupal::base de date()->actualizare($tabel)
->câmpuri(matrice(
'moderation_state' => $moderationState,
'content_entity_revision_id' => $vid,
))
->condition('content_entity_id', $entity_id)
->condition('langcode', $langcode)->execute();
}
}
}
Aceasta actualizează tabelul „content_moderation_state_field_data”, dar pagina /fr/test nu este încă în curs de examinare. Încă rămâne în draft. Evaluatorii trebuie să treacă la cea mai recentă revizuire și să vadă pagina (/fr/node/$node_id/latest), dar acest lucru nu este dorit. Evaluatorii nu ar trebui să se deranjeze cu ID-ul nodului.
Am încercat să scriu un cârlig de preprocesare care va redirecționa către cea mai recentă revizuire.
funcția sync_revision_preprocess_page(&$variabile) {
$nod = \Drupal::routeMatch()->getParameter('nod');
if ($node instanță a \Drupal\node\NodeInterface) {
$nid = $nod->id();
$vid = \Drupal::entityTypeManager()
->getStorage('nodul')
->getLatestRevisionId($nid);
$moderationState = $nod->moderation_state->valoare;
$langcode = $node->get('langcode')->value;
$url = $_SERVER['REQUEST_URI'];
if ($moderationState != „publicat” && strpos($url,'latest') == false) {
$cale = "/" . $langcode . „/” . „nod/” . $nid . „/” . "cele mai recente";
$răspuns = new RedirectResponse($cale);
$răspuns->trimite();
}
}
}
Acest lucru nu funcționează așa cum era de așteptat. /fr/testul primește mai întâi o eroare 403 și, prin urmare, redirecționarea nu funcționează.
Vă rugăm să sugerați o abordare de lucru mai bună pentru a se potrivi cu toate aceste criterii.