回答:
Node Revision Deleteモジュールを使用して、リビジョンを削除および管理します。(私はモジュールのメンテナーです。)
Node Revision Deleteモジュールを使用すると、選択に応じてノードのリビジョンを管理できます。ノードのリビジョンの特定の数を保持するのに役立ちます。このモジュールは、特定のコンテンツタイプにリビジョン削除を適用し、特定の時間に実行する柔軟性を提供します。ノードリビジョンの削除管理ページから設定を管理できます。
リビジョンを削除するための安定したリリースはまだありませんが、D7ポートが準備中です(機能するかどうかはわかりません)。
このスレッドで、誰かがVBOを使用してリビジョンを分離し、削除することを提案しました。
APIに慣れている場合は、すべてのノードでループを作成し、を使用してリビジョンを取得し、を使用node_revision_list()
してそれらを削除しますnode_revision_delete()
。
最後の手段として、もし私が DBをいじるのが好きなら、リビジョンの行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';
WHERE node.vid = node_revision.vid
。そのままのエラー。おそらくfield_revision_bodyクエリでもテーブルを指定しますか?
私はこれをVBO向けに作成し(任意のPHPを実行)、すべてのリビジョンを削除します(現在を除く)。これはに組み込まれたソート順に依存しnode_revision_list()
、その生データを使用する前に、望ましい結果のためにあなたのDB&テストをバックアップ。
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モジュールに安定したリリースが追加されました。
Node Revision Deleteモジュールを使用すると、コンテンツタイプの古いリビジョンを追跡および整理できます。特徴:
- コンテンツタイプごとに保持するリビジョンの最大量を定義します。
- Drush、cron実行、または別の期間(毎日、毎週など)で実行します。