É 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]->file
uso do código acima, vejo estas:
- fid
- nome
- mímica
- Tamanho
- url
- timestamp
- proprietário
Mais notavelmente, uri
está faltando e, em seu lugar, há uma url
propriedade, 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 EntityMetadataWrapper
em 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 saberentity_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.uri
está lá com file_entity.Respostas:
Muito obrigado ao MPD por me apontar na direção certa. Em resumo, sem o módulo Entidade de arquivo , os arquivos não são entidades, portanto, eles não têm naturalmente as 'propriedades' que eu esperava.
O módulo Entity fornece alguns em seu nome, mas o URI não é um deles. Felizmente, é muito simples disponibilizá-lo usando
hook_entity_property_info_alter()
e um retorno de chamada de propriedade personalizada:Depois disso,
$images[0]->file->uri->value()
está disponível conforme o esperado.fonte
Abaixo funciona sem o hack:
fonte
É isso que funciona para eu obter o caminho completo de uma única imagem ...
Alternativamente...
fonte