it-swarm.com.de

Kann ich programmgesteuert eine neue Knotenrevision erstellen, ohne dass die neue Revision zur "aktuellen" wird?

Immer wenn mein Feed-Import eine neue Version eines vorhandenen Inhalts findet, wird eine neue Revision dieses Knotens erstellt, anstatt Daten zu überschreiben.

Normalerweise wird die neue Revision sofort zur "aktuellen". Ich möchte jedoch, dass die aktuell angezeigte Revision gleich bleibt, und lasse einen Moderator später entscheiden, ob die neue veröffentlicht werden soll.

9
Letharion

Bei einer Standardinstallation Drupal) können Sie keine "ausstehende" Revision erstellen. Sie haben zwei Möglichkeiten:

  1. Erstellen Sie programmgesteuert eine neue Revision, kehren Sie jedoch programmgesteuert zur ursprünglichen Revision zurück (wodurch eine noch neuere Revision erstellt wird, die jedoch den ursprünglichen Inhalt enthält).
  2. (Empfohlen) Verwenden Sie Workbench Moderation, Revisioning oder Workflow, gut durchdachte Lösungen für die Versionskontrolle und/oder Zugriffskontrolle.

Zu Option 1: Sie können diesen Code als neue Regel hinzufügen oder in einem neuen Modul verwenden

<?php
  // Programatically load the existing revision and save it
  // Taken from http://api.drupal.org/api/drupal/modules!node!node.module/function/node_save/7
  // Load the revision
  $original_revision = node_load($nid);
  $original_revision->revision = 1;
  $original_revision->log = t('Copy of the revision from %date.', array('%date' => format_date($original_revision->revision_timestamp)));

  $new_revision = node_load($nid);
  // Make any changes to the new revision here...
  $new_revision->revision = 1;
  $new_revision->log = t('Summarize your changes here');

  // Save the new revision first
  node_save($new_revision);

  // Save the original one again so that it is still the current revision
  node_save($original_revision);

  watchdog('content', '@type: reverted %title revision %revision.', array('@type' => $node_revision->type, '%title' => $node_revision->title, '%revision' => $node_revision->vid));
  drupal_set_message(t('@type %title was saved with a new revision, but reverting to original revision from %revision-date.', array('@type' => node_type_get_name($node_revision), '%title' => $node_revision->title, '%revision-date' => format_date($node_revision->revision_timestamp))));
  drupal_goto('node/' . $node_revision->nid . '/revisions');
?>

Für Option 2: Ich würde Workbench gegenüber Revisioning oder Workflow empfehlen, aber jede ist je nach Ihren Anforderungen unterschiedlich. Workbench ist eine Art Nachfolger von Revisioning, und Workflow ist viel mehr als nur eine Versionskontrolle, sodass es möglicherweise gut zu Ihren Anforderungen passt oder nicht.

Hier ist ein kurze Aufschlüsselung zu den Unterschieden zwischen Workbench und Workflow.

13

Dies ist eine Vermutung, aber ich würde dem Submodul Workbench-Moderation im Modul Workbench eine Chance geben. Ich habe festgestellt, dass dies viel einfacher einzurichten ist als Workflow .

Die Tatsache, dass Sie Knoten im Code erstellen, sollte keine Rolle spielen, solange node_save() als Benutzer mit den richtigen Einstellungen für den Inhaltstyp ausgeführt wird (die Moderationszustände werden mit der Knoten-API behandelt). Dies kann jedoch bedeuten, dass Sie einige Sitzungsshenanigans ausführen müssen, um die Dinge als der richtige Benutzer zu erledigen, wenn Feeds ausgeführt wird.

2
mpdonadio