web-dev-qa-db-ja.com

現在のdrupalテーマのパスを取得するにはどうすればよいですか?

Drupal APIには drupal_get_path($type, $name) があり、特定のテーマまたはモジュールのパスを提供します。現在のテーマのパスが必要な場合はどうなりますか?

24
Steven Noble

使用 - path_to_theme 関数。

25
FGM

これは動作するはずです( doc ):

global $theme;
$path = drupal_get_path('theme', $theme);

// there's also a $theme_path global

global $theme_path;
20
Owen

D6では、path_to_theme()は、それをどのように使用しているかによっては、期待どおりに動作しない場合があります。テーマの前処理関数の外で使用している場合は、おそらく必要な機能が得られますが、モジュールのテーマ設定/前処理フック関数のコンテキスト内で呼び出されている場合は、そのモジュールのパスを指します。テーマを宣言しました。

例テーマ「my_theme」と、モジュール「my_module」があり、プリプロセスフックを使用してフォーラムのテーマを上書きしている場合、モジュール内でpath_to_theme()を呼び出します。 my_module_preprocess_forums()...は、「my_theme」ではなく「forums」を返します。

あなたが私に尋ねれば非常にフルーティーです。

10

Drupal 7では、現在のテーマのパスを取得するために、以下を使用できます。 path_to_theme() 関数。

5
Pupil

Drupal 8

global $base_url;
$theme = \Drupal::theme()->getActiveTheme();
$image_url = $base_url.'/'. $theme->getPath() .'/images/image.jpg';
4
Mike

Drupal 8では、管理テーマがアクティブなときにアクティブなテーマパスを取得する必要がある場合、デフォルトのテーマパスを取得できます。

$themeHandler = \Drupal::service('theme_handler');
$themePath = $themeHandler->getTheme($themeHandler->getDefault())->getPath();
1
Arie

Drupal 5では、次のように簡単に使用できます:path_to_theme()

これにより、Drupalのルートから特定のテーマディレクトリへの完全なパスが提供されます。末尾にスラッシュが含まれていないことに注意してください。

Drupal 6では、これは少し異なる動作をします。ページ内から呼び出すと、テーマを実行しているものすべてが呼び出されます...テーマかモジュールか、以下は、APIドキュメントの主な引用です。

アクティブなテーマまたはテーマ別の実装を処理するモジュールを指すことができます。たとえば、テーマ呼び出しのスコープ内で呼び出された場合、テーマ関数が処理される場所によって異なります。モジュールから実装されている場合は、モジュールを指します。アクティブなテーマから実装された場合、アクティブなテーマを指します。テーマ呼び出しの範囲外で呼び出されると、常にアクティブなテーマを指します。

ソース: http://api.drupal.org/api/function/path_to_theme

1
CaseySoftware

D8の場合、前処理関数でテーマフォルダーを使用できます。

function hook_preprocess_page(&$variables) {
  $variables['some_logo_file'] = "/{$variables['theme']['path']}/images/logo.png";
}

page.html.twig:

<img src="{{ logo_src }}">
0
s6712