web-dev-qa-db-ja.com

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

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

これに対処するためにいくつかのモジュールが先頭に追加された base_path() を見てきましたが、base_path()のAPIページで、誰かがDRUPAL_ROOT 絶え間ない。推奨される方法は何ですか?

7
arjan

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');
8
mpdonadio

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

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);
4
David Thomas

$ base_urldrupal_get_path() を併用する必要があります。

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

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

1
Jack-PL

システムストリームラッパー モジュールを使用します。これは、module://、theme://、profile://ストリームラッパーを提供します。これらのラッパーは(おそらく)D8コアの一部になります。

0
fietserwin

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' => ""  ));

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

0
augusto