Svgファイルのコードをtwigテンプレートファイルに直接含めることはできますか?
何かのようなもの:
{% include 'my.svg' %}
その結果:
<svg viewbox=".... />
これを行う1つの方法:
{{ source('my.svg') }}
詳細はこちら: https://www.theodo.fr/blog/2017/01/integrating-and-interacting-with-svg-image-files-using-twig/
同様の問題があり、svgの名前を.twigファイルに変更してしまいました。
{% include 'my.svg.twig' %}
新しい変数を設定することにより、Drupal8テーマで実行できます。
function theme_preprocess_page(&$variables) {
$svg = file_get_contents(drupal_get_path('theme', 'socialbase') . '/images/icons.svg');
$variables['svg_Sprite'] = t('svg', array('svg' => $svg));
}
twigファイルでは、次のコマンドで印刷できます。
{{ svg_Sprite }}
私にとっては、うまくいきました:
{% include '/images/my.svg' %}
Drupal 8を使用している場合は、前の回答のコードが機能しなかったため、すぐに更新します。次のように実行しました。
function theme_preprocess_page(&$variables) {
$svg = file_get_contents(drupal_get_path('theme', 'theme_name') . '/images/my.svg');
$variables['some_svg'] = $svg));
}
twigファイルで、次のように出力しました:
{{ some_svg|raw }}
テーマの場合、テーマへのパスを保持する{{ directory }}
変数を使用することをお勧めします。
{{ source(directory ~ '/images/my.svg') }}
twig function source()はDrupalで正常に動作します。source()またはincludeを使用する方が良いかわかりませんが、Symfonyのドキュメントでは、ディレクティブではなくinclude()関数を使用することを推奨しています。 https://twig.symfony.com/doc/3.x/tags/include.html
また、Twigにテンプレートディレクトリを探すように指示するテーマネームスペースを追加すると便利です。
仮定:
{{ source('@theme_name/svg/Sprite.svg') }}
{# or #}
{% include '@theme_name/svg/Sprite.html.twig' %}
{# or #}
{{ include('@theme_name/svg/Sprite.html.twig') }}
これは、テーマテンプレートだけでなくモジュールテンプレートでも機能します。
内容が解析されないため、source()を使用することにはパフォーマンス上の利点があると思いますが、動的なSVGが必要な場合は、include()ルートに移動する必要があります。