Drupal 7 theme_image src来自绝对uri的绝对路径

时间:2018-12-12 18:16:52

标签: drupal-7 hook relative-path absolute-path

当前使用以下图像渲染图像:

$desktop_img = theme('image', array(
      'path' => drupal_get_path('module', 'my_awesome_module') . '/images/desktop.png',
      'width' => 20,
      'height' => 20,
      'alt' => t('View pc version'),
    ));

哪个呈现为:

<img src="http://myawesome.site/sites/all/modules/custom/my_awesome_module/images/desktop.png" width="20" height="20" alt="View pc version" />

但是我想要的是:

<img src="/sites/all/modules/custom/my_awesome_module/images/desktop.png" width="20" height="20" alt="View pc version" />

现在我们有一个解决方案可供使用:

function another_awesome_module_file_url_alter(&$uri) {
  // Get outta here if there's an absolute link
  if (strpos($uri, '://') !== FALSE) {
    return;
  }

  // If the path includes references a gif/jpg/png images elsewhere
  if (strpos($uri, conf_path()) !== FALSE ||
      preg_match('/\.(jpg|gif|png)/i', $uri)) {
    $uri = $GLOBALS['base_path'] . ltrim($uri, '/');
  }
}

返回所有文件的绝对路径。所以我的问题是,是否可以在theme_image中仅针对手边的图像执行彻底的操作,而不是更改所有文件的路径?

2 个答案:

答案 0 :(得分:1)

使用base_path()函数获取正确的路径,然后为主题函数提供绝对路径。

$desktop_img = theme('image', array(
  'path' => base_path() . drupal_get_path('module', 'my_awesome_module') . 
            '/images/desktop.png',
  'width' => 20,
  'height' => 20,
  'alt' => t('View pc version'),
));

问题不是drupal_get_path,而是图像主题中的相对路径。

答案 1 :(得分:0)

您可以简单地添加一个斜杠以开始'path'值:

$desktop_img = theme('image', array(
      'path' => '/'.drupal_get_path('module', 'my_awesome_module') . '/images/desktop.png',
      'width' => 20,
      'height' => 20,
      'alt' => t('View pc version'),
    ));