Чи можу я програмно створити нову версію вузла, без того, щоб нова редакція стала «поточною»?


9

Щоразу, коли мій імпорт каналів знаходить нову версію існуючого фрагмента вмісту, він створює нову версію цього вузла замість перезапису даних.

Зазвичай нова редакція стає "поточною" одразу. Я хотів би, щоб наразі відображена редакція залишалася такою ж, і нехай модератор вирішить пізніше, чи слід опублікувати нову.


1
Ви спробували використовувати модерацію Workbench, Workflow або будь-який з модулів, які роблять те саме?
mpdonadio

Я ні. Спочатку я припускав, що оскільки я створюю вузол у коді, вони не застосовуються. Можливо, це не так.
Летаріон

Відповіді:


13

Стандартна установка Drupal не дозволяє створити версію "Очікування". У вас є два варіанти:

  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 над переглядом чи робочим процесом, але кожен відрізняється залежно від ваших потреб. Workbench є свого роду спадкоємцем Revisioning, а Workflow - це набагато більше, ніж просто контроль версій, тому він може чи не може відповідати вашим потребам.

Ось швидкий розбір між різницями між Workbench та Workflow.


Перший варіант був би чудовим, але як мені зробити повернення?
Летаріон

Додано код для варіанту 1, але насправді варіант 2 - це, мабуть, найкраща ставка, оскільки він додає функціональність для роботи з версією поточної версії, замість того, щоб просто дублювати оригінал знову і знову
Джоннатан Елмор

посилання розірвано
digitgopher

Куди писати на гачку_форма_алтер?
KTM

посилання виправлено. @IcecreamJelly, спробуй_поновити_підключення.
Джоннатан Елмор

2

Це здогад, але я б дав підмодуль Workbench Moderation в модулі Workbench . Мені це було набагато простіше налаштувати, ніж Workflow .

Те, що ви створюєте вузли в коді, не має значення, якщо node_save()працює як користувач із належними налаштуваннями типу вмісту (стану модерації обробляються за допомогою API вузла). Це, однак, може означати, що вам потрібно зробити декілька сеансів, щоб зробити це як належний користувач під час запуску каналів.


2
+1 модерація верстаків - це чудовий модуль, яким я користуюсь вже досить давно
Clive
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.