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?

Justin
sumber

Jawaban:

88

Doh! Saya seharusnya melihat dalam modul koleksi lapangan:

entity_load('field_collection_item', array($item_id))
Justin
sumber
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 ).

Vasiliy Grotov
sumber
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.
}
jonhattan
sumber
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);
}
milkovsky
sumber