如何在Drupal中获取图像的绝对路径?

6

我在Drupal/sites/default/files/images/文件夹中有一些图片。

如何获取放置在该目录中的abc.jpg图片的绝对路径?

6个回答

13
如果Drupal位于自己的域名下(即,http://example.com),绝对路径将为/sites/default/files/images/abc.jpg
如果Drupal位于子文件夹中(例如http://example.com/drupal),绝对路径将为/drupal/sites/default/files/images/abc.jpg
如我在您删除的同一问题的答案中所解释的那样,如果您尝试以编程方式生成路径(即,您不知道文件目录在哪里),则需要使用file_directory_path()
$image = file_directory_path() . "/images/abc.jpg";

如果文件在以下路径:

  • sites/default/files: $image = "sites/default/files/images/abc.jpg".
  • sites/example.com/files: $image = "sites/example.com/files/images/abc.jpg".

假设您之前的问题仍然是使用情况,您应该在模块中使用l()theme_image()生成链接和图像。这将确保在Drupal环境下生成的路径是正确的。

根据您之前提供的预期输出,解决方案如下:

// Images are in drupalroot/sites/default/files/images
$path = file_directory_path() . '/images/';

$detail_file = 'detail_1.jpg';
$image_file  = '1.jpg';

$img = theme('image', $path . $image_file);

$options = array(
  'attributes' => array(
    'title' => t('Sample title for image 1 lorem ipsum'),
  ),
  'html' => TRUE,
);
$output = l($img, $path . $detail_file, $options);

因此,假设您的网站位于http://example.com/,输出将为:
<a href="/sites/default/files/images/default_1.jpg" title="Sample title for image 1 lorem ipsum">
  <img src="/sites/default/files/images/1.jpg" height="<image height>" width="<image width>" />
</a>

但是如果你的网站在一个子文件夹中(例如 http://example.com/drupal),输出将会是:

<a href="/drupal/sites/default/files/images/default_1.jpg" title="Sample title for image 1 lorem ipsum">
  <img src="/drupal/sites/default/files/images/1.jpg" height="<image height>" width="<image width>" />
</a>

12

适用于 Drupal 7

$relativePath = "blabla/abc.jpg";

$uri = file_build_uri($relativePath);

//show public://blabla/abc.jpg
echo $uri; 

$url = file_create_url($uri);

//show http://www.yoursite.com/sites/default/files/blabla/abc.jpg
echo $url; 

5

只需要使用

$url_image = url('sites/default/files/'.file_uri_target($uri), array('absolute'=>true));

在这种情况下,您将拥有一个路径,例如“http://www.mywebsite.com/sites/default/files/images/image.jpeg”。 $uri是一个内部路径,例如“public://images/image.jpeg”。
这是Drupal 7,请享受它,热爱它。

3

2

public:// 将会给你公共文件夹的绝对路径。

例如:要访问

drupal/sites/default/files/images/

只需放置

public://images/

1
我尝试了Mark的解决方案并发现我的目录是"/sites/default/files/images/a.jpg",但当我将其作为img src写入我的节点时,它没有显示相关图像。除此之外,当我写成"../sites/default/files/images/a.jpg"时,它可以工作 :)。因为在第一种情况下,Drupal试图在“content/sites/default/files/images/a.jpg”中找到文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接