drupal_get_path()だけを使用してモジュールディレクトリの画像を含めると、言語接頭辞を使用すると、存在しないURLが生成されます。
これを処理するためにいくつかのモジュールにbase_path()を付加するのを見てきましたが、base_path()のAPIページで、DRUPAL_ROOT
定数を使用する必要があるとコメントしています。推奨される方法は何ですか?
drupal_get_path()だけを使用してモジュールディレクトリの画像を含めると、言語接頭辞を使用すると、存在しないURLが生成されます。
これを処理するためにいくつかのモジュールにbase_path()を付加するのを見てきましたが、base_path()のAPIページで、DRUPAL_ROOT
定数を使用する必要があるとコメントしています。推奨される方法は何ですか?
回答:
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');
あなたは使うことができます
例えば:
$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);
$ base_urlはdrupal_get_path()とともに使用する必要があります。
global $base_url;
$img_path = $base_url . '/' . drupal_get_path('module', 'YOUR_MODULE') . '/images/your_image.png';
このようにして、画像パスはi18nサイトのURLプレフィックス設定の影響を受けません。
システムストリームラッパーモジュールを使用します。これは、module://、theme://、profile://ストリームラッパーを提供します。これらのラッパーは(おそらく)D8コアの一部になります。
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' => "" ));
注:もちろん、提供されたモジュールのハッキングは決して推奨されません。
file_create_url
が使用theme_image