Drupal Fields: field_attach_update() 更新欄位資料

之前透過 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 約快兩倍以上

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *