Bisakah saya membuat revisi simpul baru secara terprogram, tanpa revisi baru menjadi revisi “terkini”?

9

Setiap kali impor feed saya menemukan versi baru dari konten yang ada, itu membuat revisi baru dari node ini alih-alih menimpa data.

Biasanya revisi baru menjadi yang "saat ini" segera. Saya ingin revisi yang ditampilkan saat ini tetap sama, dan biarkan moderator memutuskan nanti apakah yang baru harus diterbitkan.

Pelajaran
sumber
1
Sudahkah Anda mencoba menggunakan Workbench Moderation, Workflow, atau modul apa pun yang melakukan hal yang sama?
mpdonadio
Saya belum. Saya awalnya berasumsi bahwa karena saya membuat simpul dalam kode, mereka tidak berlaku. Mungkin bukan itu masalahnya.
Letharion

Jawaban:

13

Pemasangan Drupal standar tidak memungkinkan Anda untuk membuat revisi "Tertunda". Anda memiliki dua opsi:

  1. Secara terprogram membuat revisi baru tetapi secara programatik kembali ke revisi asli (yang membuat revisi lebih baru, tetapi memiliki konten asli)
  2. (Disarankan) Gunakan Moderasi Workbench, Revisi atau Alur Kerja yang merupakan solusi yang dipikirkan dengan baik untuk kontrol versi dan / atau kontrol akses.

Untuk opsi 1: Anda dapat menambahkan kode ini sebagai Aturan baru atau menggunakannya dalam modul baru

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

Untuk opsi 2: Saya akan merekomendasikan Workbench over Revisioning atau Workflow, tetapi masing-masing berbeda tergantung pada kebutuhan Anda. Workbench adalah jenis penerus Revisioning, dan Workflow jauh lebih dari sekadar kontrol versi, sehingga mungkin cocok atau tidak cocok untuk kebutuhan Anda.

Berikut ini rincian singkat tentang perbedaan antara Workbench dan Workflow.

Johnathan Elmore
sumber
Opsi pertama memang bagus, tetapi bagaimana cara mengembalikannya?
Letharion
Menambahkan kode untuk opsi 1, tetapi benar-benar opsi 2 mungkin merupakan taruhan terbaik Anda karena menambahkan fungsionalitas untuk menangani versi mana yang saat ini, alih-alih hanya menduplikasi yang asli berulang-ulang
Johnathan Elmore
tautannya terputus
digitgopher
Tempat menulis di hook_form_alter?
KTM
tautan diperbaiki. @IcecreamJelly, coba hook_node_update.
Johnathan Elmore
2

Ini dugaan, tetapi saya akan memberikan sub-modul Workbench Moderation dalam modul Workbench . Saya menemukan ini jauh lebih mudah untuk diatur daripada Workflow .

Fakta bahwa Anda membuat node dalam kode tidak masalah, asalkan node_save()berjalan sebagai pengguna dengan pengaturan yang tepat untuk jenis konten (negara-negara moderasi ditangani dengan API API). Namun, ini bisa berarti bahwa Anda perlu melakukan beberapa shenanigans sesi untuk menyelesaikan sesuatu sebagai pengguna yang tepat ketika Feeds berjalan.

mpdonadio
sumber
2
+1 workbench moderation adalah modul hebat yang telah saya gunakan cukup lama sekarang
Clive