画像フィールドの正しいURLを取得するにはどうすればよいですか?


7

次のコードを使用して画像フィールドのURLを印刷しようとしています。

<img src="<?php echo $field_company_logo['und'][0]['uri']; ?>" alt="<?php echo $company[0]['#markup']; ?>" />

このコードは、sites / default / files / company-logos / image.pngが必要な場合に、public://company-logos/image.pngのようなURIを提供します。

画像パスを印刷するにはどのコードを使用すればよいですか(つまり、sites / default / files / company-logos / image.png)?

回答:


20

あなたは利用したいdrupal_realpath()実際のファイルシステムのパスにURIを変換する機能を。

echo drupal_realpath($field_company_logo['und'][0]['uri']);

ローカルのファイルパスではなく、file_create_url()を使用して画像の実際のURLを取得することもできます。

そして画像をレンダリングする正しい方法はそれを実行することtheme_image()です:

echo theme('image', array(
  'path' => file_create_url($field_company_logo['und'][0]['uri']),
  'alt' => check_plain($company[0]['#markup']),
));

また、フィールドデータへのアクセス方法は、推奨される方法ではありません。field_get_items()と詳細な例については、Drupalフィールドレンダリング(正しい方法)ブログエントリをご覧ください。


2
テーマ関数を使用するための+1。実際にはもうdrupal_realpath()が必要だとは思わないでしょう。テーマ関数は自動的にURIを変換します。
Les Lim

file_create_urlは私にとってうまくいきました、ありがとう!realpathは私に絶対的なURLを与えましたが、それはレンダリングされません。
ジョーテイラー

ストリームパスを直接渡すことができ(public:// ...)、自動的に正しいパスが生成されます。
Eduardo Chongkan

10

文字通りURIを実際のURLに変換したい場合は、file_create_url()関数が必要です。これは次のように使用されます。

$url = file_create_url($uri);

しかし、Yuriy Babenkoが提案するように、テーマ関数を使用する方が簡単な場合があります。

$image_vars = array(
  'path' => $field_company_logo['und'][0]['uri'],
  'alt' => $company[0]['#markup'],
);
echo theme('image', $image_vars);

画像のサイズを変更したい場合は、代わりにtheme_image_style()を使用するようにこれを簡単に調整できます。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.