it-swarm.asia

تحديث حقل مجمّع؟

أضفت حقلاً (نصًا) جديدًا إلى نوع محتوى Drupal 7 الذي يحتوي بالفعل على العديد من العقد.

كيف يمكنني ملء الحقل بقيمة افتراضية لجميع هذه العقد؟

34
daphshez

يمكنك استخدام 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 لتشغيل ما سبق: وإلا ، يمكنك إنشاء وحدة مخصصة بسيطة.

37
user7

سأستخدم المشاهدات المجمّعة للعمليات واستخدم "Execute Arbitrary PHP Script" لإجراء العناصر المذكورة أعلاه بشكل أساسي ، ولكن ليس عليك تنفيذ جميع التعليمات البرمجية الإضافية ، مجرد مقتطف صغير يفعل ما تريد (مثل $object->field_foo['und'][0]['value'] = 'some_value')

17
rfay

إذا كنت ترغب فقط في تحديث الحقل ببعض القيمة ، فإن البديل الأكثر فاعلية للإجابة المقبولة هو:

$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 () بأكملها.

9
Mirsoft

في الواقع VBO (عمليات عرض مجمّعة) هو حل جيد. علاوة على ذلك ، مع أحدث الإصدارات ، ستجد خيار "تعديل قيم الكيان" الذي يوفر طريقة سهلة للغاية لتحديث لغة العقد في عملية واحدة.

4
xaa

قم بتثبيت وتمكين Views Bulk Operations الوحدة وإنشاء عرض باستخدام عرض الصفحة.

إضافة => عمليات مجمعة: حقل المحتوى (المحتوى) في العرض.

أشير

enter image description here

حدد الحقول التي تريد تعيين القيمة الافتراضية لها.

في قضيتك عنوانها. في الصورة هي علامات.

احفظ العرض ، وانتقل إلى الصفحة التي أنشأها. إذا كان لديك أكثر من صفحة نتائج ، يمكنك اختيار تحديد كافة العناصر الموجودة في الصفحة الحالية ، أو كافة العناصر الموجودة في جميع الصفحات ، أو يمكنك تحديد خانات الاختيار المطابقة للعقد الفردية يدويًا. يجب تحديد مربع اختيار واحد على الأقل للمتابعة.

الآن قمت بتعيين القيمة الافتراضية وحفظها.

2
DRUPWAY