É fácil obter objetos de arquivo relacionados a nós por meio de um campo EntityMetadataWrapper:
$wrapper = entity_metadata_wrapper('node', $node);
$images = $wrapper->field_images;
Então isso é ótimo. No entanto, quero usar algumas das propriedades do objeto de arquivo padrão e elas não estão disponíveis. Quando olho para as propriedades disponíveis no $images[0]->fileuso do código acima, vejo estas:
- fid
- nome
- mímica
- Tamanho
- url
- timestamp
- proprietário
Mais notavelmente, uriestá faltando e, em seu lugar, há uma urlpropriedade, que é a URL externa completa para o arquivo de imagem. Eu quero manipular essas imagens via URI (criar thumbs, etc), por isso estou fazendo isso:
$fid = $images[0]->file->fid->value();
$uri = file_load($fid)->uri;
O que parece negar todo o sentido de usar um EntityMetadataWrapperem primeiro lugar.
o que estou perdendo? Onde está o URI no objeto de arquivo agrupado? Se não está disponível, pelo amor de todas as coisas boas e puras, por que não ?!
Estou ciente de que poderia desconstruir o URL de volta para um URI, mas isso também parece muito desnecessário.
hook_entity_property_info_alter()", tudo bem, só queria saber
entity_metadata_system_entity_property_info()onde várias novas propriedades são adornadas $info['file']['properties']. Estou disposto a apostar se file_entity estava lá nessa matriz já teria as propriedades da entidade lá. Vou tentar escrever uma resposta mais tarde ou amanhã, se ninguém já tiver feito isso.
uriestá lá com file_entity.