フィールドを介してノードに関連するファイルオブジェクトを取得するのは、EntityMetadataWrapper
:
$wrapper = entity_metadata_wrapper('node', $node);
$images = $wrapper->field_images;
それは素晴らしいことです。ただし、標準のファイルオブジェクトの一部のプロパティを使用したいのですが、それらは使用できません。$images[0]->file
上記のコードを使用して利用できるプロパティを見ると、次のことがわかります。
- fid
- 名前
- MIME
- サイズ
- url
- タイムスタンプ
- オーナー
最も注目すべきは、uri
欠落しており、その場所にurl
画像ファイルへの完全な外部URLであるプロパティがあります。これらの画像をURIで操作したい(つまみを作成するなど)ため、このままにしておきます。
$fid = $images[0]->file->fid->value();
$uri = file_load($fid)->uri;
EntityMetadataWrapper
そもそもを使用するという全体のポイントを否定するようです。
私は何が欠けていますか?ラップされたファイルオブジェクトのURIはどこにありますか?それが利用できない場合、すべての良いものと純粋なものへの愛のために、なぜですか?
URLを分解してURIに戻すことができることは承知していますが、それも非常に不必要だと感じています。
hook_entity_property_info_alter()
知りたいだけです
entity_metadata_system_entity_property_info()
、そこではたくさんの新しいプロパティが追加され$info['file']['properties']
ます。file_entityがそこにある場合、その配列には既にエンティティプロパティ自体が含まれている場合、私は喜んで賭けます。答えがまだだれもいない場合は、後でまたは明日書こうと思います
uri
が、file_entityがあります。