Получение файловых объектов, связанных с узлами, через поле легко с помощью EntityMetadataWrapper
:
$wrapper = entity_metadata_wrapper('node', $node);
$images = $wrapper->field_images;
Ну и замечательно. Однако я хочу использовать некоторые свойства стандартного файлового объекта, и они недоступны. Когда я смотрю на свойства, доступные при $images[0]->file
использовании приведенного выше кода, я вижу это:
- шлагтов
- название
- мим
- размер
- URL
- отметка времени
- владелец
В частности, uri
отсутствует, и на его месте есть url
свойство, которое является полный внешний URL-адрес файла изображения. Я хочу манипулировать этими изображениями через их URI (создавать большие пальцы и т. Д.), Поэтому мне осталось сделать это:
$fid = $images[0]->file->fid->value();
$uri = file_load($fid)->uri;
Что, кажется, сводит на нет весь смысл использования EntityMetadataWrapper
в первую очередь.
Что мне не хватает? Где находится URI в обернутом файловом объекте? Если это не доступно, ради любви ко всему хорошему и чистому, почему бы и нет ?!
Я знаю, что могу деконструировать URL обратно в URI, но это также кажется очень ненужным.
hook_entity_property_info_alter()
», то это хорошо, просто хотел знатьentity_metadata_system_entity_property_info()
это набор новых свойств$info['file']['properties']
. Я готов поспорить, если бы file_entity был там, в этом массиве уже были бы свойства сущности. Я постараюсь написать ответ позже или завтра, если никто еще не сделал этогоuri
есть с file_entity.Ответы:
Большое спасибо MPD за то, что он указал мне правильное направление. Короче говоря, без модуля File Entity файлы не являются сущностями, поэтому они, естественно, не имеют «свойств», которые я ожидал.
Модуль Entity предоставляет некоторые от их имени, но URI не является одним из них. К счастью, сделать его доступным с
hook_entity_property_info_alter()
помощью обратного вызова настраиваемого свойства очень просто :После этого
$images[0]->file->uri->value()
доступно как положено.источник
Ниже работает без взлома:
источник
Это то, что работает для меня, чтобы получить полный путь одного изображения ...
С другой стороны ...
источник