Answers:
$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
。
如果只想更新字段值(不更新有关更新时间,修订的节点元数据),请使用function 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);
}
请注意,我在更新field_fieldname时发现在第4行中使用它
$node->field['field_myfield'][0]['value'] = 'some value';
不工作。