現在のdrupalテーマのパスを取得するにはどうすればよいですか?
-
08-07-2019 - |
質問
Drupal APIには drupal_get_path($ type、$ name)
は、特定のテーマまたはモジュールのパスを提供します。現在のテーマのパスが必要な場合はどうなりますか?
解決
path_to_theme
関数を使用します。
他のヒント
これは機能するはずです( doc ):
global $theme;
$path = drupal_get_path('theme', $theme);
// there's also a $theme_path global
global $theme_path;
D6では、path_to_theme()は、使用方法によっては期待どおりに動作しない場合があります。テーマの前処理関数の外部で使用している場合、おそらく必要なものが提供されますが、モジュールのテーマ/前処理フック関数のコンテキスト内で呼び出されている場合は、次のモジュールパスを指しますテーマを宣言しました。
例テーマがある場合" my_theme"と私のモジュール" my_module"これは、プリプロセスフックを使用してフォーラムテーマをオーバーライドし、私のモジュール内でpath_to_theme()を呼び出しています。 my_module_preprocess_forums()...は、「my_theme」ではなく「forums」を返します。予想どおり。
私に尋ねるととてもフルーティーです。
Drupal 7では、現在のテーマのパスを取得するために、次を使用できます。 path_to_theme()関数。
Drupal 8で
global $base_url;
$theme = \Drupal::theme()->getActiveTheme();
$image_url = $base_url.'/'. $theme->getPath() .'/images/image.jpg';
Drupal 5では、単にpath_to_theme()
を使用できます。これにより、Drupalのルートから特定のテーマディレクトリへの完全なパスが提供されます。末尾のスラッシュが含まれていないことに注意してください。
Drupal 6では、これは少し異なる動作をします。ページ内から呼び出すと、テーマやモジュールなど、現在テーマを実行しているものがすべて呼び出されます。APIドキュメントからの重要な引用は次のとおりです。
アクティブなテーマを指すか、 テーマを処理するモジュール 実装。たとえば、 テーマの範囲内で呼び出されます 呼び出す場所によって異なります テーマ機能が処理されます。もし モジュールから実装され、それは モジュールを指します。実装されている場合 アクティブなテーマから、それは指す アクティブなテーマに。呼ばれたとき テーマ呼び出しの範囲外 常にアクティブを指します テーマ。
D8の場合、テーマフォルダーはプリプロセス関数で使用できます。
function hook_preprocess_page(&$variables) {
$variables['some_logo_file'] = "/{$variables['theme']['path']}/images/logo.png";
}
page.html.twig:
<img src="{{ logo_src }}">