Bagaimana cara memuat kumpulan bidang dari sebuah simpul?


72

Saya punya simpul yang memiliki beberapa koleksi bidang di atasnya.

Ketika saya melihat node_load()output, saya melihat:

[field_rich_text_group] => Array
        (
            [und] => Array
                (
                    [0] => Array
                        (
                            [value] => 6
                        )

                    [1] => Array
                        (
                            [value] => 7
                        )

                    [2] => Array
                        (
                            [value] => 8
                        )

                )

        )

Apa fungsi API yang dapat saya gunakan untuk benar-benar memuat data lapangan yang terkandung dalam koleksi yang memiliki entitas_id 6, 7, 8, dll?

Jawaban:


88

Doh! Saya seharusnya melihat dalam modul koleksi lapangan:

entity_load('field_collection_item', array($item_id))

1
Saya mencari solusi serupa. Bagaimana Anda menulis output dan menempatkannya ke dalam array yang diberikan? Terima kasih
— angsa

Saya menulis banyak fungsi khusus untuk membangun tata letak untuk item-item ini. Sayangnya mereka mengembalikan HTML, bukan array yang dapat di-render. Akan menyenangkan untuk menggunakan array yang dapat diulang, tapi saya tidak sepenuhnya jelas tentang hal itu (saya yakin ada alasan bagus untuk melakukannya, saya hanya belum menemukan penjelasan yang beresonansi).
— Justin

Terima kasih. Koleksi bidang memang berguna untuk memudahkan formulir, dan output, tetapi ketika datang ke permintaan khusus, saya tampaknya harus menyelam ke dalam array bersarang, bahkan menggunakan entitas_metadata_wrapper.
— angsa

Oh ya, saya menulis pembungkus yang hanya mengubah array padat menjadi apa yang saya butuhkan.
— Justin

entity_load () mengembalikan seperangkat node yang khusus untuk "entitas" dan bersama dengan itu kita juga mendapatkan bidang yang ditentukan pengguna. Bagaimana kami membedakan bidang pengguna dari bidang entitas? Ada petunjuk?
— Raj Pawan Gumdal

38

Ada juga fungsi pembungkus yang melakukan trik yang sama:

field_collection_item_load($id, $reset = FALSE)

atau sesuai komentar, gunakan:

field_collection_item_load_multiple($ids = array(), $conditions = array(), $reset = FALSE)

untuk memuat beberapa koleksi (misalnya jika Anda memiliki tombol Tambah lainnya ).


5
Seperti jawaban per @ vasiliy-grotov di atas Anda juga dapat menggunakan field_collection_item_load_multiple($ids = array(), $conditions = array(), $reset = FALSE), untuk memuat beberapa koleksi (misalnya jika Anda memiliki "Tambah lebih banyak" btn).
— mediaashley

21

field_collection_field_get_entity () harus digunakan untuk memuat revisi yang benar.

Contoh penggunaan:

$node = node_load(1);
$items = field_get_items('node', $node, 'field_fc');
foreach ($items as $item) {
 $fc = field_collection_field_get_entity($item);
 // Do something.
}

1
bagaimana cara mendapatkan bidang tanggal yang ditetapkan dalam koleksi bidang? Saya menggunakan hal-hal berikut. $ Item = field_collection_field_get_entity ($ itemid); cetak $ item-> field_course_starts_on ['und'] [0] ['safe_value']; .Tapi tidak ada nilai yang mencetak untuk itu.
— harikris

Terima kasih untuk ini. Saya mendapatkan konstan Peringatan: array_flip (): Hanya dapat membalik nilai STRING dan INTEGER! dengan ... item_load () dan ini menyelesaikan masalah.
— Naidim

11

Anda dapat menggunakan entity_metadata_wrapperdari modul API Entitas :

$node_wrapper = entity_metadata_wrapper('node', $node);
$field_collection = $node_wrapper->field_rich_text_group[0]->value();
dpm($field_collection);

Anda juga dapat mengulang semua koleksi:

$node_wrapper = entity_metadata_wrapper('node', $node);
foreach ($node_wrapper->field_rich_text_group as $field_collection_wrapper) {
  $field_collection = $field_collection_wrapper->value();
  dpm($field_collection);
}
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.