it-swarm.asia

تحديث جميع العقد بحقل افتراضي بعد إضافة حقل جديد إلى نوع المحتوى

لدي نوع محتوى موجود به عدد من العقد. لقد قمت للتو بإضافة حقل منطقي جديد بقيمة افتراضية "إيقاف".

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

كيف يمكنني تحديث العقد الموجودة ، التي تم إنشاؤها قبل إضافة الحقل ، لتعيين هذا الحقل إلى قيمته الافتراضية؟

15
DanH

للأسف ، لا توجد طريقة بسيطة جدًا للقيام بذلك (إلى جانب 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 ، ولكن أقل أداءً ... (يتطلب تحميل عقدة كاملة وحفظ العملية لكل عقدة!).

10
geerlingguy

أفضل رهان موجود مباشرة في MySQl. ستبدو الجداول كما يلي:

field_data_field_newbooleanfieldname
field_revision_field_newbooleanfieldname

إذا نظرت إليها فهي بسيطة جدًا - هل تريد مني أن أبدأ في كيف سيبدو الاستعلام أم أنك بخير من هنا؟

2
Mike

فقط جرب منطق الخوار. إنه أسرع بكثير ويمر كل تطبيقات الخطاف أيضًا. مزيد من التفاصيل . يمكنك كتابة استعلام 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);
0
nadeesha meththananda

باستخدام 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)
0
Matoeil

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

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

أشير

enter image description here

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

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

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

0
DRUPWAY

لقد وجدت طريقة سهلة لتحديث الحقول في نوع المحتوى باستخدام هذه الوحدة: افتراضيات الحقل

انظر لقطة الشاشة. يمكنك تحديث المحتوى الحالي بالقيمة (القيم) الافتراضية أو الاحتفاظ بالقيم الحالية.

لقد اختبرته على D7 ويعمل.

enter image description here

0
Sébastien Gicquel