나뭇 가지 템플릿에서 테마 자산에 대한 경로 가져 오기


22

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().

신화. 테마 :

$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로 잘못 알려져 있습니다 .


"경로가 잘못되었습니다."-그다지 도움이되지 않습니다.

@ user21641 drupal_get_path은 D7입니다 :)
Chapabu

1
그것은을 위해의 8도 ... @Chapabu
클라이브

깃털로 날 날려 버려! 나를 수정 :)
Chapabu

실제로 D8도 마찬가지입니다. 나는 이것을 좋아했습니다 :$themePath = Url::fromUserInput('/' . drupal_get_path('theme', '[themename]')
Vodde

답변:


51

{{ base_path ~ directory }}절대 문제를 해결하고 전처리를 수행 할 필요가없는 것을 사용할 수 있습니다. 이러한 변수는 모두 코어에 포함됩니다.

예를 들어

<img src="{{ base_path ~ directory }}/images/logo.png" alt="My Logo" />

추신. ~나뭇 가지 의 도우미가 연결됩니다.

편집 : 적어도 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();
}

3
솔루션을 공유해 주셔서 감사합니다. 한 가지 간단한 설명 : $ variables [ 'base_path'] = base_path (); html.html.twig 템플릿 파일에서 사용할 수 있도록 THEME_preprocess_html 테마 후크에 추가하십시오.
Marcos Buarque

1
사용에 대한주의 {{ directory }}: 당신이 기본 테마로 사용에 대한 하위 테마를 만들려하는 테마에 나뭇 가지 변수를 drupal.stackexchange.com/questions/277278
제임스 윌슨

1
나뭇 가지 템플릿 제안 모듈이 제공하는 {{ base_bath }}모든 템플릿; 그렇지 않으면 일부 템플릿의 경우 Marcos Buarque가 위의 설명에서했던 것처럼 또는 Matoeil이 drupal.stackexchange.com/a/238535/4195
mlncn

9

{{ directory }}테마 디렉토리를 가리키는 변수를 기본적으로 사용할 수 있습니다. 문제는 추가 한 것과 마찬가지로 절대적이지 않다는 것입니다. 기본 경로를 포함해야하기 때문에 핵심 버그라고 생각하지만 변경하면 물론 기존 사이트를 손상시킬 수 있습니다.

따라서 앞에 /를 추가해야합니다. Drupal이 하위 폴더에 설치되어 있으면이 문제가 발생합니다. 템플릿에서 하드 코딩하거나 base_path()7.x에서와 같이 사용자 정의 변수로 계속 사용할 수 있습니다.


에서 이미지를 사용하는 방법은 /sites/default/files/MyFolder무엇입니까? MyFolder에 이미지 MyImage.jpg가 있습니다. 자, <img src={{ url }} alt={{ text }}>여기 wig 변수를 쓴다면 나뭇 가지 템플릿에서 url 변수에는 /MyFolder/MyImage.jpg 경로가 있지만 작동하지 않습니다.
Jasodeep Chatterjee

2
Berdir이 쓴 것처럼 : <img src="/{{ directory }}/path/to/image"/>절대 경로를 얻기 위해 간단히 사용할 수 있습니다 .
다니엘스

7
<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" />

3
이 답변은 대신 정답으로 표시되어야합니다.
Jignesh Rawal
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.