Yeni revizyon “geçerli” haline gelmeden programlı olarak yeni bir düğüm revizyonu oluşturabilir miyim?


10

Özet akışlarım içe aktarıldığında mevcut bir içerik parçasının yeni bir sürümünü bulduğunda, verilerin üzerine yazmak yerine bu düğümde yeni bir düzeltme oluşturur.

Normalde yeni revizyon hemen "güncel" hale gelir. Ancak şu anda görüntülenen revizyonun aynı kalmasını istiyorum ve bir moderatörün daha sonra yenisinin yayınlanması gerekip gerekmediğine karar vermesini istiyorum.


1
Workbench Moderation, Workflow veya aynı şeyi yapan modüllerden herhangi birini kullanmayı denediniz mi?
mpdonadio

Yapmadım. Başlangıçta kodda düğüm oluşturduğum için, uygulanmadığını varsaydım. Belki de durum böyle değildir.
Letharion

Yanıtlar:


14

Standart bir Drupal yüklemesi "Beklemede" düzeltmesi oluşturmanıza izin vermez. İki seçeneğiniz var:

  1. Programlı olarak yeni bir düzeltme oluşturun, ancak programlı olarak orijinal düzeltmeye geri dönün (bu daha da yeni bir düzeltme oluşturur, ancak orijinal içeriğe sahiptir)
  2. (Önerilen) Sürüm kontrolü ve / veya erişim kontrolü için iyi düşünülmüş çözümler olan Workbench Moderation, Revisioning veya Workflow kullanın.

Seçenek 1 için: Bu kodu yeni bir Kural olarak ekleyebilir veya yeni bir modülde kullanabilirsiniz

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

Seçenek 2 için: Revizyon veya İş Akışı üzerinde Workbench'i öneririm, ancak her biri ihtiyaçlarınıza bağlı olarak farklı. Workbench, Revizyon'un halefidir ve Workflow sadece sürüm kontrolünden çok daha fazlasıdır, bu nedenle ihtiyaçlarınız için iyi bir uyum olabilir veya olmayabilir.

İşte Workbench ve Workflow arasındaki farklar hakkında hızlı bir döküm .


İlk seçenek harika olurdu, ancak geri dönüşü nasıl yapabilirim?
Letharion

Seçenek 1 için kod eklendi, ancak gerçekten seçenek 2 muhtemelen en iyi bahistir, çünkü orijinali tekrar tekrar kopyalamak yerine, hangi sürümün geçerli olduğunu işlemek için işlevsellik ekler
Johnathan Elmore

bağlantı koptu
digitgopher

Hook_form_alter'a nerede yazılır?
KTM

bağlantı düzeltildi. @IcecreamJelly, hook_node_update öğesini deneyin.
Johnathan Elmore

2

Bu bir tahmin, ama WorkBEnch Moderation alt modülünü verecekti Tezgahı modülü bir vuruş. Bunu ayarlamak için iş akışından çok daha kolay buldum .

Kodda düğümler oluşturduğunuz gerçeği node_save(), içerik türü için uygun ayarlara sahip bir kullanıcı olarak çalıştığı sürece önemli değildir (denetleme durumları düğüm API'siyle işlenir). Ancak bu, Feed'ler çalıştığında doğru kullanıcı olarak işlerin yapılmasını sağlamak için bazı oturum parlaklıkları yapmanız gerektiği anlamına gelebilir.


2
+1 tezgah moderasyonu bir süredir kullanıyorum mükemmel bir modül
Clive
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.