Як я можу видалити всі версії вузла / поля?


17

У мене є drupal 7 сайтів, де він зберігає версії вузлів і полей. Я зберігаю поправки у випадку, коли помилково зберігається нова несправна версія, і я хочу повернути її назад.

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

Які існують деякі способи видалення всіх версій, крім поточної, для всіх вузлів / полів сайту?

Відповіді:


13

Використовуйте модуль « Видалення версії вузла», щоб видалити та керувати своїми версіями. (Я підтримую модуль.)

Модуль видалення версії вузла дозволяє керувати редакціями вузла відповідно до вашого вибору. Це допомагає вам зберегти конкретну кількість версій для вузла. Цей модуль надає вам можливість застосувати редакційне видалення для конкретного типу вмісту та запустити його у визначений час. Ви можете керувати своїми налаштуваннями зі сторінки адміністрування видалення версії вузла.


Чи можете ви видалити версії поля за допомогою редакції Node Delete? Я не бачу жодних варіантів зробити це за допомогою цього модуля
BlondeSwan

15

Існує ще не стабільний випуск для видалення Revision, але порт D7 вже на шляху (не впевнений, чи функціональний він взагалі).

У цій темі хтось запропонував використовувати VBO для ізоляції ревізій та видалення їх.

Якщо ви відчуваєте себе комфортно з API, зробіть цикл через усі ваші вузли, витягніть версії за допомогою node_revision_list()та видаліть їх за допомогою node_revision_delete().

В крайньому випадку, і якщо вам подобається возитися з БД ( як я ), ви можете видалити рядки редагувань field_revision_*і node_revisionтаблиці. Спробуйте це:

УВАГА: не перевірена взагалі!

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

Ви можете знайти повний перелік таблиць своїх змін у information_schemaбазі даних:

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

3
Модуль видалення вузла тепер має стабільний випуск.
Безкоштовний радикал

Перевіряючи це, я вважаю, що умовою для запиту node_revision має бути WHERE node.vid = node_revision.vid. Помилки як є. Можливо, вкажіть таблиці також на запит field_revision_body?
Digiggopher

Модуль видалення редакції, згаданий у цій відповіді, рекомендує замість цього скористатися Node Revision Delete, оскільки нам не потрібно 5 модулів, які роблять те саме. Дивіться прийняту відповідь.
mbomb007

2

У тій же ситуації я використав код нижче:

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

Я зробив це для людей VBO (виконайте довільну PHP), вона видалить усі ревізії (крім поточної). Це спирається на впорядкований порядок сортування node_revision_list(), тому перед використанням живих даних створіть резервні копії БД та тесту на бажані результати .

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

Здається, у вас виникають великі проблеми, щоб уникнути видалення поточної редакції (сортування, кількість). Але node_revision_delete вже перешкоджає видаленню поточної версії.
dxvargas

0

Модуль видалення вузла тепер має стабільний випуск.

Модуль Видалення редакції вузла дозволяє відстежувати та обрізати старі версії типів вмісту. Особливості:

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