Saya pasti akan melakukannya field_attach_update
.
Idenya sederhana. Cukup muat simpul dan simpan menggunakan field_attach_update.
Ex:
$node = node_load($nid);
$node->field_name[LANGUAGE_NONE][0]['value'] = 'New value';
field_attach_presave('node', $node);
field_attach_update('node', $node);
// Clear the static loading cache.
entity_get_controller('node')->resetCache(array($node->nid));
Ini tidak akan mengubah stempel waktu atau kait apa pun yang biasanya dipanggil node_save. Memuat node juga akan meminta beberapa kait jadi mungkin itu tidak efisien.
Jika Anda memiliki nid dan jika struktur simpul mati sederhana, Anda dapat melakukannya seperti ini juga:
$node = new stdClass();
$node->nid = $nid; // Enter the nid taken. Make sure it exists.
$node->type = 'article';
$node->field_name[LANGUAGE_NONE][0]['value'] = 'New value';
field_attach_presave('node', $node);
field_attach_update('node', $node);
// Clear the static loading cache.
entity_get_controller('node')->resetCache(array($node->nid));
Bagaimanapun, jika Anda mencoba memperbarui apa pun selain bidang, ini tidak akan berfungsi (status komentar, status yang dipublikasikan, dll). Jika Anda menggunakan node_save, cache untuk node tertentu akan dihapus secara otomatis untuk metode yang berbeda, kami perlu menghapusnya dengan 'entitas_get_controller'.
Pembaruan:
Tampaknya Anda juga harus menelepon field_attach_presave()
untuk membiarkan modul lain memproses input bidang dengan benar. Modul file, misalnya, menggunakannya untuk mengatur status file ke permanen menggunakan kait ini. Saya telah memperbarui 2 contoh saya di atas.
field_attach_update
?