“Set” versi field_get_items?


9

Satu dapat mengambil item bidang dari suatu entitas dengan

// Find all terms on $node in field 'field_tags'.
$terms = field_get_items('node', $node, 'field_tags');

Tetapi apakah ada cara yang mudah untuk melakukan kebalikan, Core, atau sebaliknya?

// Attach new term $term to $node in field 'field_tags'.
$term = taxonomy_term_load($tid);
$node = field_set_items('node', $node, 'field_tags', 'taxonomy_term', $term);
node_save($node);

Saya ingin menghindari kerumitan dalam menetapkan istilah $ secara manual, lihat devel seperti apa struktur array dan kemudian bangun array dengan tangan, karena terkadang non-sepele.

Satu-satunya masalah dalam antrian inti yang dapat saya temukan yang tampak agak mirip adalah tentang bahasa bidang api DX .

Jawaban:


6

Tidak, tidak ada fungsi seperti itu.

Lihat komentar saya di Dukungan bahasa untuk bidang entitas .


1
Terima kasih Berdir. Saya berharap Anda akan muncul;) dan saya juga takut Anda mengatakannya. Masalah dengan kode dalam komentar Anda adalah bahwa untuk banyak bidang, 'nilai' mungkin tidak cukup atau hanya salah.
Letharion

field_get_items () tidak membantu Anda dengan itu, ia mengembalikan array item yang mengandung nilai. Atau apa pun jenis bidang yang didefinisikan. Tidak ada cara untuk abstrak itu.
Berdir

Misalnya, field_get_items () mengembalikan array (array ('tid' => 123)). Kode Anda perlu tahu bahwa field_tags adalah rujukan istilah taksonomi dan ia memiliki set kunci tid dan bahwa itu adalah tayangan ke istilah taksonomi.
Berdir

Komentar tidak lagi terlihat di halaman tersebut sesuai tautan yang diberikan.
Junaid

Komentar ada di halaman diskusi sekarang: drupal.org/node/1500308/discuss
Berdir

2

Agar fungsi seperti itu ada, field_set_items()harus dapat mengidentifikasi stdClassobjek sebagai istilah taksonomi, dan juga memetakannya ke fungsi yang dapat memecahkan kode objek dan membuat array bidang dari itu.

Karena tidak ada fungsi inti untuk melakukan itu, saya tidak berpikir ini akan mudah.


Ini sangat menjengkelkan bahwa tidak ada properti $ entity-> entity_type (belum) , tetapi terlepas dari itu, yang dapat dengan mudah ditambahkan ke contoh panggilan balik saya. Saya memperbarui pertanyaan untuk mencerminkan hal ini.
Letharion

1
Kurangnya entity_typetidak benar-benar masalah IMHO ... masalahnya adalah persis apa yang Anda tambahkan ke pertanyaan Anda: "itu kadang-kadang non-sepele". Karena data bersifat non-sepele, agar field_set_itemsdapat berfungsi sesuai keinginan Anda, setiap tipe bidang dalam sistem perlu menerapkan semacam antarmuka yang menjelaskan cara merekayasa-ulang array data dari objek / variabel arbitrer.
Clive

2

Meskipun ini tidak membantu membangun struktur array yang rumit, saya melihat bahwa apa yang saya cari sampai batas tertentu telah diperkenalkan di Drupal 8. Mungkin akan diperluas lebih jauh di masa depan. :)

API sederhana baru tersedia untuk mengakses bidang, properti, dan informasi bahasa .

Contoh penggunaan dari halaman tertaut:

<?php
// Change a field value.
$body = $comment->get('comment_body');
$body[0]['value'] = 'This is actually a perverted tango';
$comment->set('comment_body', $body);
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.