2017-01-20 14 views
1

Я пытаюсь получить доступ к изображениям uri в массиве в коллекции полей, но я не знаю, как получить к ним доступ. Если посмотреть в модуле развейте, я могу видеть местоположение первого URI изображения в массиве выглядит следующим образом:Как получить доступ к элементам в коллекции полей (Drupal 7)

['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?

EDIT *

Я взял несколько больше уколов на этой проблеме и понял, что я сделал ошибку, пытаясь оказать значение «$ 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'])]; 

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

ответ

0

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

$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

Вы также можете использовать представление с контекстным фильтром? – GHaddon

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']; 

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