새 개정이 "현재"개정이 아닌 프로그래밍 방식으로 새 노드 개정을 작성할 수 있습니까?


9

피드 가져 오기에서 기존 컨텐츠의 새 버전을 찾을 때마다 데이터를 덮어 쓰지 않고이 노드의 새 개정을 작성합니다.

일반적으로 새 개정판은 "현재"개정판이됩니다. 그러나 현재 표시된 개정판을 동일하게 유지하고 나중에 새 개정판을 게시할지 중재자가 결정하도록합니다.


1
워크 벤치 운영, 워크 플로우 또는 동일한 작업을 수행하는 모듈을 사용해 보셨습니까?
mpdonadio

하지 않았습니다. 처음에는 코드로 노드를 만들었으므로 적용되지 않았다고 가정했습니다. 아마도 그렇지 않습니다.
Letharion

답변:


13

표준 Drupal 설치에서는 "대기 중"개정을 작성할 수 없습니다. 두 가지 옵션이 있습니다.

  1. 프로그래밍 방식으로 새 개정을 작성하지만 프로그래밍 방식으로 원래 개정으로 되돌립니다 (더 새로운 개정을 작성하지만 원래 내용이 있음)
  2. (권장) 버전 제어 및 / 또는 액세스 제어를 위해 잘 고려 된 솔루션 인 Workbench 검토, 수정 또는 워크 플로우를 사용하십시오.

옵션 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

옵션 1에 대한 코드를 추가했지만 실제로 옵션 2는 원본을 반복해서 복제하는 대신 현재 버전을 처리하는 기능을 추가하기 때문에 가장 좋은 방법 일 것입니다.
Johnathan Elmore

링크가 끊어짐
Digigopher

hook_form_alter는 어디에 쓸 수 있습니까?
KTM

링크 고정. @IcecreamJelly, hook_node_update를 시도하십시오.
Johnathan Elmore

2

이것은 추측이지만 Workbench 모듈 의 Workbench Moderation 하위 모듈에 샷을 제공합니다. Workflow 보다 훨씬 쉽게 설정할 수 있습니다.

node_save()컨텐츠 유형에 대한 적절한 설정을 가진 사용자로 실행하는 한 코드에서 노드를 작성한다는 사실은 중요하지 않습니다 (검토 상태는 노드 API로 처리됨). 그러나 피드가 실행될 때 적절한 사용자로 작업을 수행하려면 일부 세션 shenanigan을 수행해야 할 수도 있습니다.


2
+1 워크 벤치 운영은 꽤 오랫동안 사용해온 훌륭한 모듈입니다
Clive
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.