之前透過 node_save() 的方式來儲存新的 NODE 內容,在 Drupal 7 中同樣可以使用,不過如果要更新,方法稍有不同:
$node2 = node_load($nid); // 如果更新 TITLE,需要提供 Node 的 vid $node2->title = 'new title'; $node2= node_submit($node2); node_save($node2);
如果不是更新標題,可以用以下方法,但會有很多 PHP NOTICE 錯誤:
$node3 = new stdClass(); $node3->nid = $nid; $node3->type = "article"; $node3->body[LANGUAGE_NONE][0]['value'] = 'new value'; node_object_prepare($node3); $node3 = node_submit($node3); node_save($node3);
這個排除了 PHP 錯誤提示:
$node4 = node_load($nid); $node4->body[LANGUAGE_NONE][0]['value'] = 'new value'; node_object_prepare($node4); $node4 = node_submit($node4); node_save($node4);
不過在 Drupal 7 中,幾乎都是欄位 (Fields),我們可以考慮使用 Field Attach API:
$node5 = new stdClass();
$node5->nid = $nid;
$node5->type = 'article';
// $node5->status = 1;
$node5->body[LANGUAGE_NONE][0]['value'] = 'new value';
field_attach_presave('node', $node5);
field_attach_update('node', $node5);
兩者分別:
- node_save() 除了你要更新的欄位外,還有一堆其他更新,例如:NODE 的時間
- 效能、效能:以執行 1000 次算,Field Attach API 約快兩倍以上

寫下您的回覆