Twigテンプレートの画像へのパスを取得することについて質問があります。画像はフィールドや何かに割り当てられていません。 "MYTHEME/image/icon /my-icon.png "。
Drupal 7の場合、次のコードでnode.templateのパスを取得します。
_<img src="<?php print base_path() . path_to_theme(); ?>/image/icons">/my-icon.png
_
Drupal 8ではどのように機能しますか?template_preprocess_node()
で変数を渡そうとしました。
MYTHEME.theme:
_$variables['images_path'] = \Drupal::theme()->getActiveTheme()->getPath() . '/image/';
_
小枝テンプレート:
_<img src="{{ images_path ~ 'icons/' ~ 'my-icon.png' }}">
_
動作しません。 PHPエラーはありませんが、パスは誤って http://localhost/node/themes/template/image/icons/my-icon.png)と言われています =。
絶対的な問題を修正する{{ base_path ~ directory }}
を使用できます。前処理を行う必要はありません。これらの変数は両方ともコアに含まれています。
例えば
<img src="{{ base_path ~ directory }}/images/logo.png" alt="My Logo" />
PS。twigの~
ヘルパーは連結されます。
編集:少なくともpage * .html.twigテンプレートにbase_path変数が含まれています。おそらく他のテンプレートの前処理を行う必要があります。変数が存在するかどうかは{{ dump() }}
で簡単に確認できます
// File: THEMENAME.theme in your theme's root directory
function THEMENAME_preprocess(&$variables, $hook)
{
$variables['base_path'] = base_path();
}
デフォルトでは、テーマディレクトリを指す_{{ directory }}
_変数を使用できます。問題は、あなたが追加したのと同じように、絶対的なものではないということです。ベースパスが含まれている必要があるため、コアのバグだと思いますが、変更すると、もちろんそれを使用している既存のサイトが機能しなくなります。
したがって、その前に/を追加する必要があります。 Drupalがサブフォルダにインストールされている場合、これは壊れます。テンプレートでハードコードするか、または7.xでカスタム変数で行ったようにbase_path()
を使い続けることができます。
<img src="/{{ directory }}/images/logo.png"/>
ときに私のために働いた
<img src="{{ base_path ~ directory }}/images/logo.png" alt="My Logo" />
しませんでした
コンテンツテンプレートの場合、.moduleで使用する必要がありました
function hook_preprocess(&$variables, $hook) {
$module_handler = Drupal::service('module_handler');
$path = $module_handler->getModule('myModuleName')->getPath();
if(isset($variables['region']) && $variables['region'] == 'content'){
$variables['module_path'] = $path;
$variables['http_Host'] = $_SERVER['HTTP_Host'];
そして
<img src="{{ module_path }}/images/error404.png" />
<img src="//{{ http_Host }}/{{ module_path }}/images/error403.png" />