لدي drupal 7 مواقع ، حيث تحتفظ بمراجعات العقدة والحقل. أحتفظ بمراجعات للحالة حيث يتم حفظ نسخة خاطئة جديدة عن طريق الخطأ وأريد العودة مرة أخرى.
ولكن ، الآن أريد تنظيف قاعدة البيانات وتحسينها حتى تأخذ مساحة أقل في القرص الصلب.
ما هي بعض طرق حذف جميع المراجعات ماعدا المراجعات الحالية لجميع العقد/حقول الموقع؟
استخدم حذف العقدة الوحدة لحذف وإدارة المراجعات الخاصة بك. (أنا المشرف على الوحدة).
تتيح لك وحدة Node Revision Delete إدارة المراجعات من Node وفقًا لاختيارك. وهي تساعدك في الاحتفاظ بعدد معين من المراجعات للعقدة . توفر لك هذه الوحدة المرونة لتطبيق حذف المراجعة لنوع المحتوى المحدد وتشغيله في وقت محدد. يمكنك إدارة إعداداتك من Node Revision Delete Administration Page.
لا يوجد بعد إصدار مستقر لـ حذف المراجعة لكن منفذ D7 في طريقه (لست متأكدًا مما إذا كان يعمل على الإطلاق).
في هذا الموضوع اقترح شخص ما استخدام VBO لعزل المراجعات وحذفها.
إذا كنت تشعر بالراحة مع واجهة برمجة التطبيقات ، فقم بإجراء حلقة عبر جميع عقدك ، واسترجع المراجعات باستخدام 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';
في نفس الحالة استخدمت الرمز أدناه:
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);
}
لقد أجريت هذا لأصحاب 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 الوحدة الآن لديها إصدار مستقر.
تتيح لك وحدة Node Revision Delete تتبع وتعقب المراجعات القديمة لأنواع المحتوى.
- حدد الحد الأقصى لعدد المراجعات التي يجب الاحتفاظ بها لكل نوع محتوى.
- تشغيل على Drush ، أو تشغيل cron أو في فترة مختلفة (يوميًا ، أسبوعيًا ، إلخ).