it-swarm.com.de

Wie kann ich den Workflow-Status (D8-Kern) einer Entität mit Inhaltsmoderation programmgesteuert ändern?

Ich verwende Drupal 8.4-rc2. Wenn Sie die Module Workflow und Inhaltsmoderation aktivieren, erhalten Sie automatisch den redaktionellen Workflow als Demonstration.

Die Zustände sind wie folgt:

  • Archiviert
  • Entwurf
  • Veröffentlicht

Und die Übergänge sind wie folgt:

  • Neuen Entwurf erstellen (vom Entwurf/veröffentlicht zum Entwurf)
  • Veröffentlichen (vom Entwurf/veröffentlicht bis veröffentlicht)

Wie kann ich einen Übergang programmgesteuert aufrufen? Oder wie kann ich den Status programmgesteuert ändern, ohne einen Übergang aufzurufen (obwohl dies den Geist zu verletzen scheint, Übergänge überhaupt erst definieren zu lassen)?

Insbesondere habe ich einen Knoten, der einer Inhaltsmoderation unterliegt (Status: archiviert, Entwurf, veröffentlicht). Standardmäßig wird der Knoten auf der Seite "Knoten bearbeiten" im ursprünglichen Zustand gespeichert (sodass ein Entwurfsknoten als Entwurf gespeichert wird). Ich möchte mit einem Submit-Handler eine zweite Schaltfläche "Als veröffentlicht speichern" hinzufügen, verstehe jedoch nicht, wie ich den Status programmgesteuert ändern kann.

Was ich bisher verstehe, ist, dass Workflows Entitäten und Zustände sind, also anders als Drupal 7, in dem die meisten Workflow-Module Felder verwendeten, um zu verfolgen, was vor sich ging.

Ich habe das Modul Beispiele überprüft, aber es gibt noch nichts zum Konfigurationsmanagement/zu den Workflows.

4
Patrick Kenny

Ein gutes Beispiel finden Sie in Code des Inhaltsmoderationsmoduls .

$entity->set('moderation_state', $new_state);
if ($entity instanceof RevisionLogInterface) {
  $entity->setRevisionLogMessage($form_state->getValue('revision_log'));
  $entity->setRevisionUserId($this->currentUser()->id());
}
$entity->save();
10

Ich verwende D8 noch nicht stark, aber im Workbench-Moderationsmodul von D7 hatten Knoten ein moderation_state-Feld, das Draft oder Published war. Übergänge in D7 waren normalerweise für Benutzerrollen-Workflows vorgesehen, während Sie in Code normalerweise die Knotenzustände direkt über node_load und node_save geändert haben. Wenn D8 vom d7-Modul inspiriert wurde, ist die Implementierung möglicherweise ähnlich.

Haben Sie die Tests, auf die hier verwiesen wird, in den Beispiellinks gesehen: https://www.drupal.org/docs/8/core/modules/workflows/overview und Beispielmodifikationen für das Knotenmoderationsfeld hier - http://cgit.drupalcode.org/drupal/tree/core/modules/content_moderation/tests/src/Functional/ModerationStateNodeTest.php

2
tenken