Як завантажити колекцію полів із вузла?


72

У мене вузол, на якому є декілька польових колекцій.

Коли я дивлюся на node_load()вихід, я бачу:

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

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

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

                )

        )

Яку функцію API я можу використати, щоб фактично завантажувати польові дані, що містяться у колекції, яка має сутність_id 6, 7, 8 тощо?

Відповіді:


88

До! Я повинен був заглянути в модуль збору полів:

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

1
Я шукаю подібне рішення. Як ви записуєте вихід і розміщуєте їх у відтвореному масиві? Спасибі
лебідь

Я написав купу спеціальних функцій для складання макета для цих елементів. На жаль, вони повертають HTML, а не масиви, що не передаються. Було б непогано використовувати передавальні масиви, але я не зовсім зрозумілий з цього приводу (я впевнений, що є вагомі причини для цього, я просто не знайшов пояснення, яке резонує).
Джастін

Дякую. Вибір поля дійсно корисний для полегшення форм та виведення, але коли мова заходить про власні запити, мені здається, що я повинен зануритися в вкладені масиви, навіть використовуючи entit_metadata_wrapper.
лебідь

О так, я написав обгортки, які просто перетворюють щільні масиви на те, що мені потрібно.
Джастін

entit_load () повертає набір вузлів, характерних для "сутності", і разом з ними ми отримуємо і визначені користувачем поля. Як ми відрізняємо поля користувачів від полів сутності? Будь-які підказки?
Радж Паван Гумдал

38

Існує також функція обгортки, яка робить той самий трюк:

field_collection_item_load($id, $reset = FALSE)

або за коментарем використовуйте:

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

для завантаження декількох колекцій (наприклад, якщо у вас є кнопки Додати більше ).


5
Відповідно до відповіді @ vasiliy-grotov ви також можете використовувати field_collection_item_load_multiple($ids = array(), $conditions = array(), $reset = FALSE)для завантаження декількох колекцій (наприклад, якщо у вас є btn "Додати більше").
mediaashley

21

field_collection_field_get_entity () слід використовувати для завантаження правильної версії.

Приклад використання:

$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
як отримати поля, визначені в колекції полів? Я використав наступне: $ item = field_collection_field_get_entity ($ itemid); надрукувати $ item-> field_course_starts_on ['und'] [0] ['safe_value']; . Але значення для нього не друкуються.
harikris

Дякую за це Я отримував постійне попередження: array_flip (): Можна перевертати лише значення STRING та INTEGER! з ... item_load (), і це вирішило проблему.
Найдим

11

Ви можете використовувати entity_metadata_wrapperз модуля API Entity :

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

Ви також можете циклічно використовувати всі колекції:

$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);
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.