Pembungkus metadata entitas
API entitas menyediakan beberapa kelas wrapper yang dapat Anda gunakan untuk menangani entitas dengan mudah dan untuk meningkatkan modul informasi properti entitas yang disediakan. Dengan bantuan pembungkus Anda dapat mengakses informasi properti, mengulangi properti yang diketahui, atau hanya mendapatkan / mengatur nilai data yang dijelaskan, dll.
Ini adalah beberapa contoh penggunaan sederhana seperti yang ditemukan dalam README:
Untuk memanfaatkan informasi ini (metadata) modul menyediakan beberapa kelas pembungkus yang memudahkan untuk mendapatkan dan menetapkan nilai. Wrapper mendukung penggunaan berantai untuk mengambil pembungkus properti entitas, misalnya untuk mendapatkan alamat email pembuat simpul yang bisa digunakan:
$wrapper = entity_metadata_wrapper('node', $node);
$wrapper->author->mail->value();
Untuk memperbarui alamat email pengguna, seseorang dapat menggunakan
$wrapper->author->mail->set('[email protected]');
atau
$wrapper->author->mail = '[email protected]';
Pembungkus selalu mengembalikan data seperti yang dijelaskan dalam informasi properti, yang dapat diambil langsung melalui entity_get_property_info () atau dari pembungkus:
$mail_info = $wrapper->author->mail->info();
Untuk memaksa mendapatkan nilai tekstual yang disanitasi untuk output yang dapat digunakan, misalnya
$wrapper->title->value(array('sanitize' => TRUE));
untuk mendapatkan judul simpul yang disanitasi. Ketika sebuah properti sudah kembali disterilkan secara default, seperti badan simpul, seseorang mungkin ingin mendapatkan data yang tidak dibersihkan seperti yang akan muncul di browser untuk kasus penggunaan lainnya. Untuk melakukannya, seseorang dapat mengaktifkan opsi 'decode', yang memastikan untuk setiap data yang disanitasi, tag-tag dilucuti dan entitas HTML di-decode sebelum properti dikembalikan:
$wrapper->body->value->value(array('decode' => TRUE));
Dengan begitu orang selalu mendapatkan data seperti yang ditunjukkan kepada pengguna. Namun, jika Anda benar-benar ingin mendapatkan nilai mentah, tidak diproses, bahkan untuk data tekstual yang sudah disanitasi, Anda dapat melakukannya melalui:
$wrapper->body->value->raw();
Lebih banyak contoh:
$wrapper->body->set(array('value' => "content"));
$wrapper->field_text[0] = 'the text';
$wrapper->field_text[0]->set(array('value' => "content"));
$wrapper->field_text2->summary = 'the summary';
$wrapper->field_text2->value = 'the text';
$wrapper->save();
$wrapper->delete();
Lebih banyak dokumen : http://drupal.org/node/1021556
Memanggil
field_attach_update('node', $node)
di akhirhook_node_update
bekerja untuk saya. Saya berasumsi bahwafield_attach_insert('node', $node)
pada akhirnyahook_node_insert
akan berhasil juga. Jadi, fungsi sampel akan terlihat seperti ini:Tidak perlu menelepon
node_load
node_save
atau mengembalikan apa pun.Saya pikir alasan untuk ini adalah bahwa
node_save
, dari manahook_node_update
danhook_node_insert
dipanggil, membungkus semua permintaan basis data dalam suatu transaksi. (Perhatikan baris pertamanode_save
:.$transaction = db_transaction()
) Kueri ini tidak dipanggil hingganode_save
selesai. Kueri terakhir yangnode_save
menambah transaksi dipanggil darifield_attach_update
, yang menggunakan objek $ node seperti sebelumnyahook_node_update
disebut. Jadi, Anda perlu mengantri permintaan lain dengan meneleponfield_attach_update
lagi. Setidaknya, itulah pemahaman saya tentang apa yang terjadi.Jika Anda kesulitan mengubah atribut non-bidang dari simpul (mis.,
$node->log
), Coba panggil_node_save_revision($node, $user->uid, 'vid');
juga. Ini tidak akan membuat revisi baru.sumber
Ini adalah bagaimana Anda mengubah nilai pada sebuah node:
sumber
und
tidak benar-benar sesuai di sini, OP telah menyatakan dalam kode yang mereka gunakan$node->language
untuk kode bahasaPeningkatan solusi Lance di atas, menghindari penghematan seluruh node ketika hanya beberapa nilai bidang yang dimodifikasi:
Ini juga bisa bermanfaat untuk menghindari efek samping
node_save()
.Sumber: Menyimpan bidang simpul tanpa menyimpan simpul itu sendiri
https://www.urbaninsight.com/2011/10/24/saving-nodes-fields-without-saving-node-itself
sumber