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.