如何删除所有节点/字段修订版?


17

我有一个drupal 7个站点,其中保留节点和字段修订。如果错误地保存了一个新的有问题的版本,而我想恢复原状,则我会进行修订。

但是,现在我想清理和优化数据库,以减少硬盘空间。

对于站点的所有节点/字段,删除当前版本以外的所有修订有哪些方法?

Answers:


13

使用“ 节点修订版本删除”模块来删除和管理您的修订。(我是模块的维护者。)

节点修订删除模块允许您根据选择管理节点的修订。它可以帮助您保留节点的特定修订版本数。该模块为您提供了针对特定内容类型应用修订删除并在特定时间运行它的灵活性。您可以从“节点修订删除管理页面”管理设置。


您可以使用“节点修订删除”来删除字段修订吗?我看不到任何与此模块相关的选项
-BlondeSwan

15

目前还没有用于版本删除的稳定版本,但是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
节点修订删除模块现在具有稳定版本。
自由基2014年

经过测试,我认为node_revision查询的条件应为WHERE node.vid = node_revision.vid。错误原样。也许还要在field_revision_body查询中指定表?
digitgopher

此答案中提到的“修订删除”模块建议改用“节点修订删除”,因为我们不需要5个模块来做相同的事情。查看已接受的答案。
mbomb007 '19

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

节点修订删除模块现在具有稳定版本。

节点修订删除模块使您可以跟踪和修剪内容类型的旧修订。特征:

  • 定义每个内容类型保留的最大修订数量。
  • 在Drush,Cron运行或其他时段(每天,每周等)运行。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.