Làm thế nào tôi có thể xóa tất cả các sửa đổi nút / trường?


17

Tôi có 7 trang web drupal, nơi nó giữ các sửa đổi nút và trường. Tôi tiếp tục sửa đổi trong trường hợp do nhầm lẫn một phiên bản lỗi mới được lưu và tôi muốn hoàn nguyên lại.

Nhưng, bây giờ tôi muốn dọn dẹp và tối ưu hóa cơ sở dữ liệu để có ít không gian hơn trong đĩa cứng.

Một số phương pháp xóa tất cả các sửa đổi ngoại trừ bản sửa đổi hiện tại, cho tất cả các nút / trường của trang web là gì?

Câu trả lời:


13

Sử dụng mô-đun Node Revision Delete để xóa và quản lý các phiên bản của bạn. (Tôi là người duy trì mô-đun.)

Mô-đun Node Revision Delete cho phép bạn quản lý các phiên bản của Nút theo sự lựa chọn của bạn. Nó giúp bạn giữ số lượng sửa đổi cụ thể cho nút. Mô-đun này cung cấp cho bạn sự linh hoạt để áp dụng xóa sửa đổi cho loại nội dung cụ thể và chạy nó vào thời gian cụ thể. Bạn có thể quản lý cài đặt của mình từ Trang Quản trị Xóa Sửa đổi Nút.


Bạn có thể xóa các sửa đổi trường với Node Revision Delete không? Tôi không thấy bất kỳ tùy chọn nào để làm như vậy với mô-đun này
BlondeSwan

15

Vẫn chưa có bản phát hành ổn định để xóa Revision nhưng một cổng D7 đang trên đường (không chắc là nó có hoạt động không).

Trong chủ đề này, ai đó đã đề xuất sử dụng VBO để cô lập các bản sửa đổi và xóa chúng.

Nếu bạn cảm thấy thoải mái với API, hãy tạo một vòng lặp thông qua tất cả các nút của bạn, truy xuất các bản sửa đổi bằng cách sử dụng node_revision_list()và xóa chúng bằng cách sử dụng node_revision_delete().

Như một phương sách cuối cùng và nếu bạn thích làm phiền với DB ( như tôi làm ), bạn có thể xóa các hàng field_revision_*và bản sửa đổi của bản sửa đổi node_revision. Thử đi:

CẢNH BÁO: hoàn toàn không được kiểm tra!

DELETE FROM field_revision_body
WHERE NOT EXISTS (
  SELECT NULL
  FROM node
  WHERE vid = revision_id
);

DELETE FROM node_revision
WHERE NOT EXISTS (
  SELECT NULL
  FROM node
  WHERE node.vid = node_revision.vid
);

Bạn có thể tìm thấy danh sách đầy đủ các bảng sửa đổi của mình trong information_schemacơ sở dữ liệu:

SELECT DISTINCT TABLE_NAME 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME LIKE 'field_revision%'
AND TABLE_SCHEMA = 'your_database';

3
Mô-đun Node Revision Delete hiện có một bản phát hành ổn định.
Cấp tiến miễn phí

Kiểm tra điều này, tôi tin rằng điều kiện trên truy vấn node_Vvision nên là WHERE node.vid = node_revision.vid. Lỗi là như vậy. Có lẽ chỉ định các bảng trên truy vấn field_Vvision_body?
chữ số

Thay vào đó, mô đun Xóa sửa đổi được đề cập trong câu trả lời này khuyên bạn nên sử dụng Node Revision Delete, vì chúng ta không cần 5 mô đun làm điều tương tự. Xem câu trả lời được chấp nhận.
mbomb007

2

Trong tình huống tương tự tôi đã sử dụng mã dưới đây:

foreach (node_load_multiple($nids) as $node) {
  // Delete sub revisions.
  foreach (node_revision_list($node) as $vid => $revision) {
    node_revision_delete($vid);
  }
  // Delete archived revisions.
  revisioning_delete_archived_revisions($node);
}

1

Tôi đã thực hiện điều này cho folks VBO (thực thi PHP tùy ý), nó sẽ xóa tất cả các sửa đổi (ngoại trừ hiện tại). Điều này phụ thuộc vào thứ tự sắp xếp được tích hợp node_revision_list(), vì vậy hãy sao lưu DB & kiểm tra của bạn để có kết quả mong muốn trước khi sử dụng dữ liệu trực tiếp .

  krumo($entity);

  $revision_array = node_revision_list($entity);  
  $revision_array_ASC = array_reverse($revision_array, TRUE);
  krumo($revision_array_ASC);
  krumo(count($revision_array_ASC));

  foreach ($revision_array_ASC as $vid => $node) {
    $count = count($revision_array_ASC);
    if ($count > 1) {
          node_revision_delete($vid);
    }
  }

  $revision_array = node_revision_list($entity);  
  krumo($revision_array);

Có vẻ như bạn đang gặp rắc rối lớn để tránh xóa bản sửa đổi hiện tại (sắp xếp, đếm). Nhưng node_Vvision_delete đã ngăn chặn việc sửa đổi hiện tại.
dxvargas

0

Mô-đun Node Revision Delete hiện có một bản phát hành ổn định.

Mô-đun Node Revision Delete cho phép bạn theo dõi và cắt xén các bản sửa đổi cũ của các loại nội dung. Đặc trưng:

  • Xác định số lượng sửa đổi tối đa để giữ cho mỗi loại nội dung.
  • Chạy trên Drush, cron run hoặc vào một khoảng thời gian khác (hàng ngày, hàng tuần, v.v.).
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.