لدي نوع محتوى موجود به عدد من العقد. لقد قمت للتو بإضافة حقل منطقي جديد بقيمة افتراضية "إيقاف".
ومع ذلك ، حتى أعيد حفظ كل عقدة ، لا يتم تعيين القيمة الافتراضية ، لذلك فإن العرض الذي يجب أن يظهر فقط تلك العقد حيث يستخدم الحقل الجديد القيمة الافتراضية فارغ حاليًا.
كيف يمكنني تحديث العقد الموجودة ، التي تم إنشاؤها قبل إضافة الحقل ، لتعيين هذا الحقل إلى قيمته الافتراضية؟
للأسف ، لا توجد طريقة بسيطة جدًا للقيام بذلك (إلى جانب VBO/القواعد) ، ولكن إليك الرمز الذي أستخدمه في وظائف التحديث في ملفات تثبيت الوحدة النمطية المخصصة الخاصة بي عندما أحتاج إلى تعبئة قيم الحقل مسبقًا لنوع عقدة معين بعد إضافة حقل جديد ( في هذه الحالة ، عُقد "الصفحة"):
<?php
// Get all nodes of 'page' type, populate the field with a value of '1'.
$pages = db_query("SELECT nid, vid FROM {node} WHERE type = 'page'")->fetchAllAssoc('nid');
foreach ($pages as $nid => $values) {
$fields = array(
'entity_type' => 'node',
'bundle' => 'page',
'deleted' => 0,
'entity_id' => $values->nid,
'revision_id' => $values->vid,
'language' => LANGUAGE_NONE,
'delta' => 0,
'field_page_new_field_value' => 1,
);
db_insert('field_data_field_page_new_field')
->fields($fields)
->execute();
db_insert('field_revision_field_page_new_field')
->fields($fields)
->execute();
}
?>
طريقة يدوية أخرى مذكورة في هذه الإجابة تستخدم EntityFieldQuery وتحمل/تحفظ كل عقدة. المزيد من دروبال- y ، ولكن أقل أداءً ... (يتطلب تحميل عقدة كاملة وحفظ العملية لكل عقدة!).
أفضل رهان موجود مباشرة في MySQl. ستبدو الجداول كما يلي:
field_data_field_newbooleanfieldname
field_revision_field_newbooleanfieldname
إذا نظرت إليها فهي بسيطة جدًا - هل تريد مني أن أبدأ في كيف سيبدو الاستعلام أم أنك بخير من هنا؟
فقط جرب منطق الخوار. إنه أسرع بكثير ويمر كل تطبيقات الخطاف أيضًا. مزيد من التفاصيل . يمكنك كتابة استعلام db_select بسيط ومباشر للحصول على جميع الأرقام وتكرارها باستخدام نموذج التعليمات البرمجية هذا.
$node = new stdClass();
$node->nid = $val;
$node->type = 'NODETYPE';
$node-field_whatever[LANGUAGE_NONE][0]['value'] = 'VALUE';
field_attach_presave('node', $node);
field_attach_update('node', $node);
باستخدام sql ، مع الأخذ في الاعتبار أن العقد التي لم يتم تعيين قيمة الحقل هي
SELECT nid,vid
from node where type='procedure' and nid not in (select entity_id from field_data_field_pr_choix_du_document)
field_data_field_pr_choix_du_document هو الجدول المطابق لمجالي ويحتوي على قيمة اسمية إدخال واحدة مع معرف كيان يشير إلى العقدة
فعلت باستخدام إدراج SQL ... حدد بناء الجملة
https://dev.mysql.com/doc/refman/5.5/en/insert-select.html
INSERT INTO `field_data_field_pr_choix_du_document` (`entity_type`, `bundle`, `deleted`, `entity_id`, `revision_id`, `language`, `delta`, `field_pr_choix_du_document_value`)
SELECT 'node','procedure',0,nid,vid,'und',0,'Importer un document'
from node where type='procedure' and nid not in (select entity_id from field_data_field_pr_choix_du_document)
قم بتثبيت وتمكين Views Bulk Operations الوحدة وإنشاء عرض باستخدام عرض الصفحة.
إضافة => عمليات مجمعة: حقل المحتوى (المحتوى) في العرض.
أشير
حدد الحقول التي تريد تعيين القيمة الافتراضية لها.
احفظ العرض ، وانتقل إلى الصفحة التي أنشأها. إذا كان لديك أكثر من صفحة نتائج ، يمكنك اختيار تحديد كافة العناصر الموجودة في الصفحة الحالية ، أو كافة العناصر الموجودة في جميع الصفحات ، أو يمكنك تحديد خانات الاختيار المطابقة للعقد الفردية يدويًا. يجب تحديد مربع اختيار واحد على الأقل للمتابعة.
الآن قمت بتعيين القيمة الافتراضية وحفظها.
لقد وجدت طريقة سهلة لتحديث الحقول في نوع المحتوى باستخدام هذه الوحدة: افتراضيات الحقل
انظر لقطة الشاشة. يمكنك تحديث المحتوى الحالي بالقيمة (القيم) الافتراضية أو الاحتفاظ بالقيم الحالية.
لقد اختبرته على D7 ويعمل.