Obtener archivos de objetos relacionados con nodos a través de un campo es fácil usando EntityMetadataWrapper
:
$wrapper = entity_metadata_wrapper('node', $node);
$images = $wrapper->field_images;
Entonces eso es genial. Sin embargo, quiero usar algunas de las propiedades del objeto de archivo estándar, y no están disponibles. Cuando miro las propiedades disponibles al $images[0]->file
usar el código anterior, veo estas:
- defensor
- nombre
- mímica
- Talla
- url
- marca de tiempo
- propietario
Lo más notable uri
es que falta, y en su lugar hay una url
propiedad, que es la URL externa completa del archivo de imagen. Quiero manipular estas imágenes a través de su URI (crear pulgares, etc.), así que me quedo haciendo esto:
$fid = $images[0]->file->fid->value();
$uri = file_load($fid)->uri;
Lo que parece negar todo el punto de usar un EntityMetadataWrapper
en primer lugar.
¿Qué me estoy perdiendo? ¿Dónde está el URI en el objeto de archivo envuelto? Si no está disponible, por amor a todas las cosas buenas y puras, ¿por qué no?
Soy consciente de que podría deconstruir la URL a un URI, pero eso también se siente muy innecesario.
hook_entity_property_info_alter()
", entonces está bien, solo quería saberentity_metadata_system_entity_property_info()
donde se agregan un montón de nuevas propiedades$info['file']['properties']
. Estoy dispuesto a apostar si file_entity estaba allí, esa matriz ya tendría las propiedades de la entidad. Intentaré escribir una respuesta más tarde o mañana si nadie ya lo ha hechouri
está ahí con file_entity.Respuestas:
Muchas gracias a MPD por señalarme en la dirección correcta. En resumen, sin el módulo de entidad de archivo , los archivos no son entidades, por lo que, naturalmente, no tienen las 'propiedades' que esperaba.
El módulo de entidad proporciona algunos en su nombre, pero URI no es uno de ellos. Afortunadamente, es muy simple hacerlo disponible mediante
hook_entity_property_info_alter()
una devolución de llamada de propiedad personalizada:Después de eso,
$images[0]->file->uri->value()
está disponible como se esperaba.fuente
A continuación funciona sin el truco:
fuente
Esto es lo que funciona para mí para obtener el camino completo de una sola imagen ...
Alternativamente...
fuente