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


9

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.


1
Haben Sie versucht, Workbench Moderation, Workflow oder eines der Module zu verwenden, die dasselbe tun?
mpdonadio

Ich habe nicht. Ich ging zunächst davon aus, dass sie nicht zutreffen, da ich den Knoten im Code erstelle. Vielleicht ist das nicht der Fall.
Letharion

Antworten:


13

Bei einer Standard-Drupal-Installation 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 finden Sie eine kurze Übersicht über die Unterschiede zwischen Workbench und Workflow.


Die erste Option wäre großartig, aber wie mache ich das Zurücksetzen?
Letharion

Der Code für Option 1 wurde hinzugefügt, aber Option 2 ist wahrscheinlich die beste Wahl, da er Funktionen für die Behandlung der aktuellen Version hinzufügt, anstatt nur das Original immer wieder zu duplizieren
Johnathan Elmore,

Die Verbindung ist unterbrochen
Digitgopher

Wo in hook_form_alter schreiben?
Crazyrubixfan

Link behoben. @IcecreamJelly, versuchen Sie hook_node_update.
Johnathan Elmore

2

Dies ist eine Vermutung, aber ich würde dem Workbench-Moderations-Untermodul im Workbench- Modul eine Chance geben. Ich fand es viel einfacher einzurichten als Workflow .

Die Tatsache, dass Sie Knoten im Code erstellen, sollte keine Rolle spielen, solange der node_save()Benutzer 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
+1 Workbench-Moderation ist ein hervorragendes Modul, das ich seit einiger Zeit benutze
Clive
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.