부분 템플릿 포함


19

Drupal 8을 사용자 정의 테마로 사용하려고합니다. 요구 사항에 대한 큰 구조 차이로 인해 page.front.twig.html 및 page.twig.html이 있습니다. 일반적인 Symfony2 프로젝트 (예 : footer.html.twig 및 header.html.twig)의 프로젠 주문. 이러한 템플릿은 / parts / 하위 디렉토리에 저장됩니다.

그러나이 템플릿을 정상적으로 호출하면 템플릿 이름의 문자열이 나타납니다.

예를 들면 다음과 같습니다.

{# in page.html.twig or page--front.html.twig #}
{% include 'parts/footer.html.twig' %} 

파일 이름을 문자열로 반환합니다 :

parts/footer.html.twig

Drupal 8로 그렇게 할 수 있습니까?

답변:


33

상대 경로는 수행 할 수 없습니다. 모든 경로는 Drupal 루트 또는 'templates'디렉토리에 대한 네임 스페이스 경로를 기반으로해야합니다 ( https://www.drupal.org/node/2143557) .

"Drupal 루트에서"피하고 적어도 https://www.drupal.org/node/2291449 가 해결 될 때까지 네임 스페이스를 사용합니다 .

{% include '@mytheme/parts/footer.html.twig' %}

편집 : 루프에 대한 추가 인수를 전달하거나 포함 된 twig템플릿에 일부 변수를 확인하려면 다음 과 같이 작성해야합니다.

{% include '@mytheme/includes/form-block.html.twig' with {dog: true} %}

편집 : 이제 https://www.drupal.org/node/2291449 가 커밋되었습니다.

{% include 'footer.html.twig' %}

파일 이름을 유용한 예외 대신 문자열로 보는 이유는 https://www.drupal.org/node/2369981 을 참조 하십시오 .


무엇에 대한 include과 값을 전달? 링크 된 이미지를 피하기 위해 null을 포함 image-formatter하고 전달 한다고 가정 해보십시오 url.
SaidbakR

이 답변에 제공된 예제가 작동하지 않는 것 같습니다.
arnoldbird

3
주의 그 @mytheme의 경로로 확인 mytheme문자열을 + /templates. 즉, @mytheme받는 해결 mytheme/templates디렉토리.
다니엘스

@daniels의 의견을 더 명확하게합니다. 사용자 정의 테마의 이름이 mytheme 이고 'themes / custom / mytheme'에 있는 경우 Twig 네임 스페이스 @mytheme'themes / custom / mytheme / templates'로 해석됩니다 . 에있는 템플릿을 포함 @mytheme/fragments/footer.html.twig그것이로 해결할 수단 '테마 / 사용자 정의 / mytheme / 템플릿 / 조각 / footer.html.twig'
ec0g

15

테마 디렉토리의 전체 경로를 사용하십시오. 네임 스페이스를 사용하는 경우 코드를 다른 사이트 나 테마로 가져 오면 네임 스페이스를 변경해야합니다.

이것은 작동해야합니다 :

{% include directory ~ '/templates/parts/footer.html.twig' %}

이것은 서브 테마를 할 때 매우 편리합니다. 이것을 Parent 테마에서 설정 한 다음, 하위 테마의 템플릿 디렉토리에 버전이 있어야합니다.
Andrew Killen 17 년

이것은 나를 위해 일한 유일한 대답입니다.
arnoldbird

5

파일이 존재하지 않을 때 Twig에서 배열을 사용하여 대체를 만들 수도 있습니다.

예 : footer.html.twig를 사용할 수 없으면 defaultfooter.html.twig가 사용됩니다.

{{ include([
  '@yourthemename/parts/footer.html.twig',
  '@yourthemename/parts/defaultfooter.html.twig'
]) }}
이것을 파일 이름에 변수를 사용하여 결합하면 상황에 따라 다른 파일을 포함시킬 수 있습니다.

Nb : 나는 이것이 최선의 방법인지 아닌지를 여전히 해결하려고 노력하고있다.


5

with키워드 뒤에 변수를 전달할 수 있습니다 .

{# template.html will have access to the variables from the current context and the additional ones provided #}
{% include 'template.html' with {'foo': 'bar'} %}

{% set vars = {'foo': 'bar'} %}
{% include 'template.html' with vars %}

Twig 문서를 참조하십시오 http://twig.sensiolabs.org/doc/tags/include.html



1

드루팔 8

{% include 'FILE_NAME.html.twig' %}Drupal 을 수행 할 때 테마에 나뭇 가지 파일을 포함 시키면 FILE이 현재 테마 디렉토리에있을 것으로 예상합니다. 그냥 거기에 넣으면 작동합니다.

모듈에 잔가지 파일 포함

MODULE에 추가하려면 THEME 함수에서 선언해야합니다. .module 파일에서 다음을 추가하십시오.

<?php function YOUR_MODULE_NAME_theme($existing, $type, $theme, $path) {   
   'FILE_NAME' => [
      'variables' => [
      ],
      'template' => 'FILE_NAME',
    ], ?>

그런 다음 Twig 파일을 YOUR_MODULE / template / FILE_NAME.html.twig에 넣으십시오.


경로에 대한 잘못된 정보입니다. 테마 후크가있는 모듈의 파일을 포함 시키려면 다른 방법이 필요합니다. {{include ( '@ yourModuleName / twigFileName.html.twig', {var1 : var1Val, var2 : var2Val})}} 잊지 마세요. 템플릿 파일은 'yourModuleName / templates /'에 있어야합니다.
Verter
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.