モジュールから画像を含めるときにベースパスを取得する適切な方法は?


7

drupal_get_path()だけを使用してモジュールディレクトリの画像を含めると、言語接頭辞を使用すると、存在しないURLが生成されます。

これを処理するためにいくつかのモジュールにbase_path()付加するのを見てきましたが、base_path()のAPIページで、DRUPAL_ROOT定数を使用する必要があるとコメントしています。推奨される方法は何ですか?

回答:


8

Drupalコアはfile_create_url()、このような内部イメージを使用します(たとえば、includes / theme.incのデフォルトのfavicon.ico処理)。

これにより、hook_file_url_alter()CDNモジュールがこれを実行する)が呼び出され、ベースパスが設定され、すべてが適切にエスケープされます。

だから私は

$path = drupal_get_path('module', 'mymodle');
$url = file_create_url($path . '/images/some.jpg');

2
注目に値する、file_create_urlが使用theme_image
David Thomas

1
ええ、実際の<img>要素が必要な場合は、@ DavidThomasの答えが最適です。
mpdonadio

4

あなたは使うことができます

theme_image

例えば:

  $variables = array(
    'path' => drupal_get_path('module', 'my_module').'/images/image.jpg', 
    'alt' => 'My image',
    'title' => 'My image title',
    'attributes' => array('class' => array('my-image')),
  );
  $img = theme('image', $variables);

1

$ base_urldrupal_get_path()とともに使用する必要があります。

global $base_url;
$img_path = $base_url . '/' . drupal_get_path('module', 'YOUR_MODULE') . '/images/your_image.png';

このようにして、画像パスはi18nサイトのURLプレフィックス設定の影響を受けません。



0

url関数でNULL言語を渡す必要がある場合があります。

commerce_paypalの例

機能しないリンク(元のコード)

  return url(drupal_get_path('module', 'commerce_paypal_ec') . '/images/paypal-ec-logo.gif', array('absolute' => TRUE));

ワーキングリンク(ハッキングされたコード)

  return url(drupal_get_path('module', 'commerce_paypal_ec') . '/images/paypal-ec-logo.gif', array('absolute' => TRUE, 'language' => ""  ));

注:もちろん、提供されたモジュールのハッキングは決して推奨されません。

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