Tôi có thể lập trình tạo một bản sửa đổi nút mới mà không cần bản sửa đổi mới trở thành bản sửa đổi hiện tại không?


9

Bất cứ khi nào việc nhập nguồn cấp dữ liệu của tôi tìm thấy phiên bản mới của một phần nội dung hiện có, nó sẽ tạo ra một phiên bản mới của nút này thay vì ghi đè dữ liệu.

Thông thường, bản sửa đổi mới sẽ trở thành bản "hiện tại" ngay lập tức. Tuy nhiên, tôi muốn bản sửa đổi được hiển thị vẫn giữ nguyên và để người điều hành quyết định sau nếu bản mới được xuất bản.


1
Bạn đã thử sử dụng Workbench Modulation, Workflow hoặc bất kỳ mô-đun nào làm điều tương tự chưa?
mpdon Arena

Tôi chưa. Ban đầu tôi cho rằng vì tôi tạo nút trong mã nên họ không áp dụng. Có lẽ đó không phải là trường hợp.
Letharion

Câu trả lời:


13

Cài đặt Drupal tiêu chuẩn không cho phép bạn tạo bản sửa đổi "Đang chờ xử lý". Bạn có hai lựa chọn:

  1. Lập trình tạo một bản sửa đổi mới nhưng lập trình trở lại bản sửa đổi ban đầu (tạo bản sửa đổi thậm chí mới hơn, nhưng nó có nội dung gốc)
  2. (Khuyến nghị) Sử dụng Kiểm duyệt, Sửa đổi hoặc Luồng công việc là các giải pháp được cân nhắc kỹ lưỡng để kiểm soát phiên bản và / hoặc kiểm soát truy cập.

Đối với tùy chọn 1: Bạn có thể thêm mã này làm Quy tắc mới hoặc sử dụng mã này trong mô-đun mới

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

Đối với tùy chọn 2: Tôi muốn giới thiệu Workbench thay đổi hoặc Workflow, nhưng mỗi cách khác nhau tùy thuộc vào nhu cầu của bạn. Workbench là loại kế thừa của Sửa đổi và Workflow không chỉ đơn thuần là kiểm soát phiên bản, vì vậy nó có thể phù hợp hoặc không phù hợp với nhu cầu của bạn.

Đây là một sự cố nhanh chóng về sự khác biệt giữa Workbench và Workflow.


Tùy chọn đầu tiên sẽ rất tuyệt, nhưng làm cách nào để hoàn nguyên?
Letharion

Đã thêm mã cho tùy chọn 1, nhưng thực sự tùy chọn 2 có lẽ là lựa chọn tốt nhất của bạn bởi vì nó thêm chức năng để xử lý phiên bản nào hiện tại, thay vì chỉ lặp lại bản gốc nhiều lần
Johnathan Elmore

liên kết bị hỏng
Digitgopher

Viết ở đâu trong hook_form_alter?
Crazyrubixfan

liên kết cố định. @IcecreamJelly, hãy thử hook_node_update.
Johnathan Elmore

2

Đây là một phỏng đoán, nhưng tôi sẽ cung cấp cho mô-đun phụ Workbench Modulation trong mô-đun Workbench . Tôi đã tìm thấy điều này dễ dàng hơn để thiết lập hơn Workflow .

Thực tế là bạn đang tạo các nút trong mã không quan trọng, miễn là người dùng node_save()chạy với các cài đặt phù hợp cho loại nội dung (trạng thái kiểm duyệt được xử lý bằng API nút). Tuy nhiên, điều này có thể có nghĩa là bạn cần thực hiện một số shenanigans phiên để hoàn thành công việc như người dùng phù hợp khi Nguồn cấp dữ liệu chạy.


2
Kiểm duyệt bàn làm việc +1 là một mô-đun tuyệt vời mà tôi đã sử dụng nó khá lâu rồi
Clive
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.