Как получить доступ к элементам в полевой коллекции (Drupal 7)

Я пытаюсь получить доступ к изображениям URI в массиве внутри коллекции полей, но я не знаю, как получить к ним доступ. Если я посмотрю в модуле devel, то увижу, что расположение первого изображения в массиве выглядит так:

['field_text_and_image'][0]['entity']['field_collection_item'][2474]['field_about_accreditation_image'][0]['#item']['uri']

Я озадачен, потому что у меня есть метод ‘field_get_items’ для доступа к коллекции полей, на которую я нацеливаюсь вот так …

$text_and_image_field = field_get_items('node', $node, 'field_text_and_image');

… и если я распечатываю / рендерирую эту переменную, я ожидаю увидеть массив, напечатанный на странице, но вместо этого ничего не будет создано. Однако я создал условие на странице, которое проверяет, существует ли коллекция полей ‘$ text_and_image_field’, и создает ли она элемент, и действительно ли он создает элемент, который показывает, что поле существует. Я просто не могу получить доступ к любому его содержимому.

Итак, почему коллекция полей ничего не печатает и как я могу перебрать массив ‘field_about_accreditation’, чтобы распечатать все изображения URI?

РЕДАКТИРОВАТЬ*

Я сделал еще несколько попыток решить эту проблему и понял, что совершил ошибку, пытаясь отобразить значение ‘$ text_and_image_field’, когда мне следовало использовать print_r, что теперь дает мне это значение массива:

Array ( [0] => Array ( [value] => 2474 [revision_id] => 174439 ) )

Основываясь на более старом коде, к которому осуществляется доступ к коллекциям полей, каждый раз, когда значение присваивается коллекции полей, происходит запись следующих операторов:

$value = field_view_value('node', $node, '$field_text_and_image', $text_and_image_field[$i]);
$field_collection = $value['entity']['field_collection_item'][key($value['entity']['field_collection_item'])];

Однако, когда я пытаюсь распечатать значение $ value (которое, как я ожидаю, будет ‘2474’), ничего не отображается.

1

Решение

Привет коллекции полей хранятся как отдельный объект, поэтому вам нужно будет выполнить загрузку объекта для получения данных.

$text_and_image_field = entity_load('field_collection_item', array($entity_id));

В этом случае похоже, что идентификатор объекта 2474, оттуда вы можете манипулировать массивом, как вам нужно.

Ваш конечный код может быть примерно таким:

$imageuri = entity_load('field_collection_item', array(2474))[2474]->field_about_accreditation_image['und'][0]['uri'];
0

Другие решения

Давайте скажем, что вы загрузили $node и внутри него у вас есть поле для сбора полей field_images, Тогда вы можете получить первый элемент этого как:

$collection_entity_id = $node->field_photo['und'][0]['value'];

Теперь у вас есть идентификатор сущности, и вы должны загрузить полную сущность:

$full_entity = field_collection_item_load($collection_entity_id);

И когда вы загрузили сущность, вы можете получить доступ к полям сущности обычным способом:

$title = $full_box->title;
$image_path =- $full_entity->field_image_path['und'][0]['value'];

И да, я знаю, что это не самый чистый способ получить ценности, пожалуйста, не втирайте это мне в лицо.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector