Việc nắm giữ các đối tượng tệp liên quan đến các nút thông qua một trường rất dễ dàng bằng cách sử dụng EntityMetadataWrapper
:
$wrapper = entity_metadata_wrapper('node', $node);
$images = $wrapper->field_images;
Thật tuyệt vời Tuy nhiên, tôi muốn sử dụng một số thuộc tính của đối tượng tệp tiêu chuẩn và chúng không có sẵn. Khi tôi nhìn vào các thuộc tính có sẵn khi $images[0]->file
sử dụng đoạn mã trên, tôi thấy những điều sau:
- fid
- Tên
- kịch câm
- kích thước
- url
- dấu thời gian
- chủ nhân
Đáng chú ý nhất uri
là thiếu, và ở vị trí của nó có một thuộc url
tính, đó là URL bên ngoài đầy đủ cho tệp hình ảnh. Tôi muốn thao tác với những hình ảnh này thông qua URI của chúng (tạo ngón tay cái, v.v.), vì vậy tôi sẽ làm điều này:
$fid = $images[0]->file->fid->value();
$uri = file_load($fid)->uri;
Mà dường như phủ nhận toàn bộ quan điểm của việc sử dụng một EntityMetadataWrapper
ở nơi đầu tiên.
Tôi đang thiếu gì? URI trên đối tượng tập tin được bọc ở đâu? Nếu nó không có sẵn, vì tình yêu của tất cả những điều tốt đẹp và tinh khiết, tại sao không?!
Tôi biết rằng tôi có thể giải cấu trúc URL trở lại URI, nhưng điều đó cũng cảm thấy rất không cần thiết.
hook_entity_property_info_alter()
" thì tốt thôi, chỉ muốn biết
entity_metadata_system_entity_property_info()
nơi mà một loạt các tài sản mới được xử lý $info['file']['properties']
. Tôi sẵn sàng đặt cược nếu file_entity ở đó mảng đó sẽ có các thuộc tính thực thể trong đó. Tôi sẽ cố gắng viết câu trả lời sau hoặc ngày mai nếu chưa có ai thực hiện nó
uri
có ở đó với file_entity.