ฉันจะลบการแก้ไขโหนด / ฟิลด์ทั้งหมดได้อย่างไร


17

ฉันมีเว็บไซต์ drupal 7 ซึ่งมันช่วยแก้ไขโหนดและฟิลด์ ฉันทำการแก้ไขในกรณีที่มีการบันทึกเวอร์ชันที่ผิดพลาดใหม่โดยไม่ได้ตั้งใจและฉันต้องการเปลี่ยนกลับ

แต่ตอนนี้ฉันต้องการล้างและปรับแต่งฐานข้อมูลเพื่อให้มีพื้นที่น้อยลงในฮาร์ดดิสก์

มีวิธีใดบ้างในการลบการแก้ไขทั้งหมดยกเว้นวิธีปัจจุบันสำหรับโหนด / ฟิลด์ทั้งหมดของไซต์

คำตอบ:


13

ใช้โมดูลNode Revision Deleteเพื่อลบและจัดการการแก้ไขของคุณ (ฉันเป็นผู้ดูแลโมดูล)

โมดูล Node Revision Delete ช่วยให้คุณจัดการการแก้ไขของโหนดตามที่คุณเลือก ช่วยให้คุณรักษาจำนวนการแก้ไขเฉพาะสำหรับโหนด โมดูลนี้ให้ความยืดหยุ่นในการใช้การลบการแก้ไขสำหรับประเภทเนื้อหาที่เฉพาะเจาะจงและเรียกใช้ในเวลาที่กำหนด คุณสามารถจัดการการตั้งค่าของคุณได้จากหน้าการดูแลระบบลบการแก้ไขโหนด


คุณสามารถลบการแก้ไขฟิลด์ด้วยการแก้ไขการแก้ไขโหนดหรือไม่ ฉันไม่เห็นตัวเลือกใด ๆ ให้ทำกับโมดูลนี้
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
โมดูลลบการแก้ไขโหนดแก้ไขตอนนี้มีรีลีสที่เสถียร
ฟรี Radical

การทดสอบนี้ผมเชื่อว่าสภาพแบบสอบถาม node_revision WHERE node.vid = node_revision.vidที่ควรจะเป็น ข้อผิดพลาดตามที่เป็นอยู่ อาจระบุตารางในแบบสอบถาม field_revision_body ด้วยหรือไม่
ตัวเลขหลัก

โมดูลการลบการแก้ไขที่กล่าวถึงในคำตอบนี้แนะนำให้ใช้การลบการแก้ไขโหนดแทนเนื่องจากเราไม่ต้องการ 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 folks (เรียกใช้ 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 run หรือในช่วงเวลาอื่น (รายวันรายสัปดาห์และอื่น ๆ )
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.