أريد تغيير قيمة الحقل للعقدة ، وقد استخدمت الكود التالي:
$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 الصفيف وكيف يمكنني الحصول عليه؟
$node = node_load($nid);
$node_wrapper = entity_metadata_wrapper('node', $node);
$node_wrapper->field_myfield->set(1);
$node_wrapper->save();
يعتبر ملف تعريف بيانات تعريف الكيان طريقة رائعة لتعيين أو قراءة قيم الحقول في العقدة!
حاول الدالة 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
.
$node = node_load($nid);
$field_language = field_language('node', $node, 'field_myfield');
$node->field['field_myfield'][$field_language][0]['value'] = 1;
node_save($node);
إذا كنت تريد تحديث قيمة الحقل فقط (بدون تحديث بيانات تعريف العقدة حول الوقت المحدث ، المراجعات) استخدم الدالة 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));
لقد نفذت هذا للتو ووجدت أن هذا الرمز يعمل معي.
$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';
لم تعمل.