Il est facile de mettre la main sur des objets fichier liés aux noeuds via un champ en utilisant EntityMetadataWrapper
:
$wrapper = entity_metadata_wrapper('node', $node);
$images = $wrapper->field_images;
C'est super. Cependant, je veux utiliser certaines des propriétés de l'objet fichier standard, et elles ne sont pas disponibles. Quand je regarde les propriétés disponibles sur l' $images[0]->file
utilisation du code ci-dessus, je vois celles-ci:
- fid
- Nom
- mime
- Taille
- url
- horodatage
- propriétaire
Plus particulièrement, il uri
manque, et à sa place il y a une url
propriété, qui est l'URL externe complète du fichier image. Je veux manipuler ces images via leur URI (créer des pouces, etc.), donc je reste à faire ceci:
$fid = $images[0]->file->fid->value();
$uri = file_load($fid)->uri;
Ce qui semble nier tout l'intérêt d'utiliser un EntityMetadataWrapper
en premier lieu.
Qu'est-ce que je rate? Où est l'URI sur l'objet fichier encapsulé? Si ce n'est pas disponible, pour l'amour de toutes choses bonnes et pures, pourquoi pas?!
Je suis conscient que je pourrais déconstruire l'URL en URI, mais cela semble également très inutile.
hook_entity_property_info_alter()
" alors c'est bien, je voulais juste savoirentity_metadata_system_entity_property_info()
, où un tas de nouvelles propriétés sont clouées$info['file']['properties']
. Je suis prêt à parier que si file_entity était là, ce tableau aurait déjà les propriétés d'entité elles-mêmes. J'essaierai de rédiger une réponse plus tard ou demain si personne ne l'a déjà faituri
est là avec file_entity.Réponses:
Un grand merci à MPD pour m'avoir pointé dans la bonne direction. En bref, sans le module File Entity , les fichiers ne sont pas des entités, ils n'ont donc pas naturellement les «propriétés» que j'attendais.
Le module Entité en fournit en leur nom, mais l'URI n'en fait pas partie. Heureusement, il est très simple de le rendre disponible à l'aide d'
hook_entity_property_info_alter()
un rappel de propriété personnalisé:Après cela,
$images[0]->file->uri->value()
est disponible comme prévu.la source
Ci-dessous fonctionne sans le piratage:
la source
C'est ce qui fonctionne pour moi pour obtenir le chemin complet d'une seule image ...
Alternativement ...
la source