如何获得图像字段的正确URL?


7

我正在尝试使用以下代码打印图像字段的URL。

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

当我需要site / default / files / company-logos / image.png时,代码为我提供了一个类似于public://company-logos/image.png的URI。

我应该使用什么代码来打印图像路径(即,sites / default / files / company-logos / image.png)?

Answers:


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()


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.