أضفت حقلاً (نصًا) جديدًا إلى نوع محتوى Drupal 7 الذي يحتوي بالفعل على العديد من العقد.
كيف يمكنني ملء الحقل بقيمة افتراضية لجميع هذه العقد؟
يمكنك استخدام EntityFieldQuery
لاسترداد قائمة العقد ، ثم تحديث حقول العقدة بـ node_save()
:
$lang = LANGUAGE_NONE; // Replace with ISO639-2 code if localizing
$node_type = 'page'; // Machine name of the content type
$query = new EntityFieldQuery;
$result = $query
->entityCondition('entity_type', 'node')
->propertyCondition('type', $node_type)
->execute();
if (!empty($result['node'])) {
$nodes = entity_load('node', array_keys($result['node']));
foreach($nodes as $node) {
// Replace field_foo with the machine name of the field to update.
// - 0 refers to specific value within the field array, for when the field contains
// multiple values. If the field only has one value, it should be 0.
$node->field_foo[$lang][0]['value'] = 'New Value';
node_save($node);
}
}
إذا كانت هذه عملية لمرة واحدة ، يمكنك استخدام Devel الوحدة النمطية تنفيذ وظيفة PHP لتشغيل ما سبق: وإلا ، يمكنك إنشاء وحدة مخصصة بسيطة.
سأستخدم المشاهدات المجمّعة للعمليات واستخدم "Execute Arbitrary PHP Script" لإجراء العناصر المذكورة أعلاه بشكل أساسي ، ولكن ليس عليك تنفيذ جميع التعليمات البرمجية الإضافية ، مجرد مقتطف صغير يفعل ما تريد (مثل $object->field_foo['und'][0]['value'] = 'some_value'
)
إذا كنت ترغب فقط في تحديث الحقل ببعض القيمة ، فإن البديل الأكثر فاعلية للإجابة المقبولة هو:
$lang = LANGUAGE_NONE; // Replace with ISO639-2 code if localizing
$node_type = 'page'; // Machine name of the content type
$query = new EntityFieldQuery;
$result = $query
->entityCondition('entity_type', 'node')
->propertyCondition('type', $node_type)
->execute();
if (!empty($result['node'])) {
$nodes = entity_load('node', array_keys($result['node']));
foreach($nodes as $node) {
// Replace field_foo with the machine name of the field to update.
// - 0 refers to specific within the field array, for when the field contains
// multiple values. If the field only has one value, it should be 0.
$node->field_foo[$lang][0]['value'] = 'New Value';
field_attach_presave('node', $node);
field_attach_update('node', $node);
}
}
الفرق في الاستخدام المباشر field_attach_presave
و field_attach_update
_ الوظائف التي تقوم بتحديث حقل العقدة بشكل صحيح وتتخطى بقية عملية حفظ العقدة. هذا له تأثير على أنه لن يتم استدعاء أي خطاف محفوظ/محفوظ للعقدة ، لن يتم تحديث تاريخ "التغيير" إلى التاريخ الحالي وما إلى ذلك. وفقًا لحالة الاستخدام الخاصة بك ، قد يكون من الأفضل استخدام عملية node_save () بأكملها.
في الواقع VBO (عمليات عرض مجمّعة) هو حل جيد. علاوة على ذلك ، مع أحدث الإصدارات ، ستجد خيار "تعديل قيم الكيان" الذي يوفر طريقة سهلة للغاية لتحديث لغة العقد في عملية واحدة.
قم بتثبيت وتمكين Views Bulk Operations الوحدة وإنشاء عرض باستخدام عرض الصفحة.
إضافة => عمليات مجمعة: حقل المحتوى (المحتوى) في العرض.
أشير
حدد الحقول التي تريد تعيين القيمة الافتراضية لها.
في قضيتك عنوانها. في الصورة هي علامات.
احفظ العرض ، وانتقل إلى الصفحة التي أنشأها. إذا كان لديك أكثر من صفحة نتائج ، يمكنك اختيار تحديد كافة العناصر الموجودة في الصفحة الحالية ، أو كافة العناصر الموجودة في جميع الصفحات ، أو يمكنك تحديد خانات الاختيار المطابقة للعقد الفردية يدويًا. يجب تحديد مربع اختيار واحد على الأقل للمتابعة.
الآن قمت بتعيين القيمة الافتراضية وحفظها.