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]->fileusar el código anterior, veo estas:
- defensor
- nombre
- mímica
- Talla
- url
- marca de tiempo
- propietario
Lo más notable uries que falta, y en su lugar hay una urlpropiedad, 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 EntityMetadataWrapperen 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 saber
entity_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 hecho
uriestá ahí con file_entity.