新しいリビジョンを「現在の」リビジョンにすることなく、プログラムで新しいノードリビジョンを作成できますか?


9

フィードのインポートで既存のコンテンツの新しいバージョンが見つかると、データを上書きする代わりに、このノードの新しいリビジョンが作成されます。

通常、新しいリビジョンはすぐに「最新」のものになります。ただし、現在表示されているリビジョンは変更せず、モデレーターに後で新しいリビジョンを公開するかどうかを決定させてください。


1
Workbench Moderation、Workflow、または同じことを行うモジュールを使用してみましたか?
mpdonadio

私はしていません。最初はコードでノードを作成するため、適用されないと想定していました。おそらくそうではありません。
Letharion 2012

回答:


13

標準のDrupalインストールでは、「保留中」のリビジョンを作成できません。次の2つのオプションがあります。

  1. プログラムで新しいリビジョンを作成しますが、プログラムで元のリビジョンに戻します(これにより、さらに新しいリビジョンが作成されますが、元のコンテンツが含まれています)。
  2. (推奨)バージョン管理やアクセス制御のためのよく考えられたソリューションであるワークベンチのモデレーション、リビジョン、またはワークフローを使用します。

オプション1の場合:このコードを新しいルールとして追加するか、新しいモジュールで使用できます。

<?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');
?>

オプション2の場合:リビジョンやワークフローよりもワークベンチをお勧めしますが、それぞれニーズに応じて異なります。Workbenchは、Revisioningの後継の一種であり、Workflowは単なるバージョン管理以上のものなので、ニーズに適している場合とそうでない場合があります。

ここでは、WorkbenchとWorkflowの違いについて簡単に説明します。


最初のオプションは素晴らしいでしょうが、どのようにして元に戻すことができますか?
Letharion 2012

オプション1のコードを追加しましたが、実際にはオプション2がおそらく最善の策です。これは、元のバージョンを何度も何度も複製するのではなく、現在のバージョンを処理するための機能を追加するためです
Johnathan Elmore

リンクが壊れている
digitgopher '17

hook_form_alterのどこに書き込むか?
KTM

リンクが修正されました。@ IcecreamJelly、hook_node_updateを試してください。
Johnathan Elmore

2

これは推測ですが、WorkbenchモジュールのWorkbench Moderationサブモジュールを試してみます。これは、ワークフローよりもはるかに簡単に設定できることがわかりました。

node_save()コンテンツタイプの適切な設定を使用してユーザーとしてを実行する限り、コードでノードを作成しているという事実は問題になりません(モデレート状態はノードAPIで処理されます)。ただし、これは、フィードの実行時に適切なユーザーとして作業を行うために、いくつかのセッションを実行する必要があることを意味する場合があります。


2
+1ワークベンチのモデレートは、私がかなり長い間使用してきたすばらしいモジュールです
Clive
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.