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' => "" ));
注:もちろん、提供されたモジュールのハッキングは推奨されません。