Puncte:3

Moderare de conținut în mai multe limbi

drapel az

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:

  1. 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.

  2. 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.

  3. 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.

  4. 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.

Puncte:0
drapel cn

Pentru tot ceea ce nu este o moderare plată a fluxului de lucru - vă propun să configurați și să utilizați https://www.drupal.org/project/state_machine modul.

Îl puteți configura pentru nevoile dvs.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.