Przechwytywanie obiektów plików związanych z węzłami przez pole jest łatwe przy użyciu EntityMetadataWrapper
:
$wrapper = entity_metadata_wrapper('node', $node);
$images = $wrapper->field_images;
To wspaniale. Chcę jednak użyć niektórych właściwości standardowego obiektu pliku i nie są one dostępne. Kiedy patrzę na właściwości dostępne przy $images[0]->file
użyciu powyższego kodu, widzę te:
- fid
- imię
- mim
- rozmiar
- adres URL
- znak czasu
- właściciel
Co najważniejsze, uri
brakuje, a na jego miejscu znajduje się url
właściwość, która jest pełnym zewnętrznym adresem URL pliku obrazu. Chcę manipulować tymi obrazami za pomocą ich identyfikatora URI (twórz kciuki itp.), Więc zostawiam to:
$fid = $images[0]->file->fid->value();
$uri = file_load($fid)->uri;
Co wydaje się negować cały sens używania EntityMetadataWrapper
na pierwszym miejscu.
czego mi brakuje? Gdzie jest URI na zawiniętym obiekcie pliku? Jeśli nie jest dostępny, z miłości do wszystkich rzeczy dobrych i czystych, dlaczego nie ?!
Wiem, że mogę zdekonstruować adres URL z powrotem do identyfikatora URI, ale to również wydaje się bardzo niepotrzebne.
hook_entity_property_info_alter()
”, to w porządku, chciałem tylko wiedziećentity_metadata_system_entity_property_info()
, w którym wkracza szereg nowych właściwości$info['file']['properties']
. Jestem gotów się założyć, że jeśli plik_entity tam był, to tablica miałaby już same właściwości encji. Postaram się napisać odpowiedź później lub jutro, jeśli nikt już tego nie zrobiłuri
jest tam z file_entity.Odpowiedzi:
Ogromne podziękowania dla MPD za skierowanie mnie we właściwym kierunku. Krótko mówiąc, bez modułu File Entity pliki nie są bytami, więc nie mają naturalnie „właściwości”, których się spodziewałem.
Moduł Entity udostępnia niektóre w ich imieniu, ale URI nie jest jednym z nich. Na szczęście udostępnienie go za pomocą
hook_entity_property_info_alter()
i wywołanie zwrotne właściwości niestandardowej jest bardzo proste :Następnie
$images[0]->file->uri->value()
jest dostępny zgodnie z oczekiwaniami.źródło
Poniżej działa bez włamania:
źródło
To właśnie działa dla mnie, aby uzyskać pełną ścieżkę pojedynczego obrazu ...
Alternatywnie...
źródło