it-swarm.asia

كيفية تحديث قيمة حقل للعقدة؟

أريد تغيير قيمة الحقل للعقدة ، وقد استخدمت الكود التالي:


$node = node_load($nid); // $nid is the function's parameter
$node->field['field_myfield'][$node->language][0]['value'] = 1;
node_save($node);

المشكلة هي $node->language بإرجاع es أثناء وجوده في print_r($node) it's und. لماذا يختلف $node->language عما هو موجود في $ node الصفيف وكيف يمكنني الحصول عليه؟

22
hpn
$node = node_load($nid);
$node_wrapper = entity_metadata_wrapper('node', $node);
$node_wrapper->field_myfield->set(1);
$node_wrapper->save();

يعتبر ملف تعريف بيانات تعريف الكيان طريقة رائعة لتعيين أو قراءة قيم الحقول في العقدة!

42
kyvour

حاول الدالة field_attach_update().

$node = node_load($nid); // $nid is the function's parameter
$node->field['field_myfield'][LANGUAGE_NONE][0]['value'] = 1;
field_attach_update('node', $node);

سيتم تحديث قيمة الحقل وأداءه أفضل من node_save.

10
zaibatsu
$node = node_load($nid); 
$field_language = field_language('node', $node, 'field_myfield');
$node->field['field_myfield'][$field_language][0]['value'] = 1;
node_save($node);
6
lenni

إذا كنت تريد تحديث قيمة الحقل فقط (بدون تحديث بيانات تعريف العقدة حول الوقت المحدث ، المراجعات) استخدم الدالة field_attach_update().

مثال:

$node = node_load($nid);
$field_language = field_language('node', $node, 'field_myfield');
$node->field_fieldname[$field_language][0]['value'] = 'some value';
field_attach_update('node', $node);

بالإضافة إلى ذلك ، قد تحتاج في بعض الأحيان إلى إعادة تعيين ذاكرة التخزين المؤقت الثابتة للعقدة باستخدام resetCache(array($nid)):

entity_get_controller('node')->resetCache(array($node->nid));

المصدر: حفظ حقول العقدة بدون حفظ العقدة نفسها

4
milkovsky

لقد نفذت هذا للتو ووجدت أن هذا الرمز يعمل معي.

$node = node_load($nid); 
if (isset($node)) {
  $field_language = field_language('node', $node, 'field_myfield');
  $node->field_fieldname[$field_language][0]['value'] = 'some value';
  node_save($node);
}

لاحظ أنه عند تحديث اسم الحقل ، اكتشفت أن استخدام هذا في السطر 4

$node->field['field_myfield'][0]['value'] = 'some value';

لم تعمل.

2
Niccolo