모든 노드 / 필드 개정을 어떻게 삭제합니까?


17

노드와 필드 개정을 유지하는 drupal 7 사이트가 있습니다. 실수로 새 결함이있는 버전을 저장 한 경우 되돌리고 싶습니다.

그러나 이제는 데이터베이스를 정리하고 최적화하여 하드 디스크의 공간을 덜 사용하려고합니다.

사이트의 모든 노드 / 필드에 대해 현재 개정판을 제외한 모든 개정판을 삭제하는 방법은 무엇입니까?

답변:


13

사용 노드 개정 삭제 삭제하고 개정을 관리하는 모듈. (나는 모듈의 관리자입니다.)

노드 개정 삭제 모듈을 사용하면 원하는대로 노드 개정을 관리 할 수 ​​있습니다. 노드의 특정 개정 수를 유지하는 데 도움이됩니다. 이 모듈은 특정 컨텐츠 유형에 대해 개정 삭제를 적용하고 특정 시간에 실행할 수있는 유연성을 제공합니다. 노드 개정판 삭제 관리 페이지에서 설정을 관리 할 수 ​​있습니다.


노드 개정 삭제로 필드 개정을 삭제할 수 있습니까? 나는이 모듈 그렇게 모든 옵션을 보이지 않아요
BlondeSwan

15

개정판 삭제에 대한 안정적인 릴리스는 아직 없지만 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';

3
노드 개정 삭제 모듈에 안정 릴리스가 있습니다.
Free Radical

이것을 테스트하면서 node_revision 쿼리의 조건은이어야한다고 생각합니다 WHERE node.vid = node_revision.vid. 있는 그대로의 오류. 아마도 field_revision_body 쿼리에서 테이블을 지정합니까?
digitgopher

이 답변에 언급 된 수정 삭제 모듈은 동일한 작업을 수행하는 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(), 그래서 라이브 데이터를 사용하기 전에 원하는 결과에 대한 귀하의 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는 이미 현재 개정을 삭제하지 못합니다.
dxvargas

0

노드 개정 삭제 모듈에 안정 릴리스가 있습니다.

노드 개정 삭제 모듈을 사용하면 컨텐츠 유형의 이전 개정을 추적하고 제거 할 수 있습니다. 풍모:

  • 컨텐츠 유형마다 유지할 최대 개 정량을 정의하십시오.
  • Drush, cron run 또는 다른 기간 (매일, 매주 등)에서 실행하십시오.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.