2012-04-13 2 views
2

내 나뭇 가지 템플릿이 포함 된 상자의 수가 달라질 수있는 여러 상자에 맞게 내용을 구성하는 이상한 상황이 있습니다. 자식 템플릿에서 n 개의 블록을 정의하는 일반적인 방법을 찾고 있는데 부모는 올바른 번호를 렌더링합니다. 여기 내 아이 템플릿 지금의 모습의 예입니다여러 가지 나뭇 가지 템플릿 블록의 배열 처리

{% extends "layout.participant.html.twig" %} 

{% block box_left_title %}Personal Information{% endblock %} 

{% block box_left_content %} 
content here 
{% endblock %} 

가있을 수 있음을 고려 하나, 둘 또는 잠재적 5이 쌍 제목/내용 섹션. 내가 상상하는 것은 box_left_title을 첫 번째 배열 슬롯으로 정의한 다음 부모 템플릿 (layout.participant.html.twig)을 정의하여 각 블록을 반복하고 필요한만큼 "상자"를 빌드하는 것입니다.

해결 방법 현재 부모 템플릿에 box_left_content_1, box_left_content_2 등의 블록을 정의한 다음 하위 템플릿에 정의 된 블록 만 정의하는 것이 좋습니다. 작동하는 동안 이 잘못되었습니다.

여기에 템플릿 상속을 잘못 사용하고 있습니까? 대신 조건부 포함을 조사해야합니까? 이것에 포인터는 대단히 환영받습니다.

업데이트 : 내 질문에 부모 템플릿에 동적 블록이있을 수 있지만 내 질문은 not be possible으로 나타납니다. 나는 합리적인 상한선을 허용하면서 block1, block2 등을 정의 할 필요가 있다고 믿고 아이들에게 내용으로 블록을 제공 할 필요가있다. 포함하는 것이 바람직한 접근 방식이 아니라고 가정합니다.

답변

2

여러 접근법이 있습니다. 가장 쉬운 방법은 아마도 포함될 것입니다. $ 상자 = 배열 ​​( 배열 ( '제목'=> '첫 타이틀' '내용'하나의 => '내용 :

http://twig.sensiolabs.org/doc/templates.html#including-other-templates

말 상자는 다음과 같습니다 배열입니다), 배열 ( '제목'=> '2 차 제목', '내용'=> '2의 내용', ), );

당신은 나뭇 가지에서 이것을 사용하는 것이 : 상자 vairable이 템플릿에 존재하므로

{% for box in boxes %} 
    {% include "render_box.html" %} 
{% endfor %} 

이제 render_box.html은, 루프 문맥이 내부에서 실행됩니다. render_box.html은 다음과 같이 보일 것입니다 :

<h1>{{ box.title }}</h1> 

<p>{{ box.content }}</p> 
+0

이것은 효과가 있습니다 만, 배열의'content' 부분은 html의로드가 될 것이고, 대부분은 twig 변수와 함수를 사용합니다. –

+0

정확하게 이해한다면 box.content 나뭇 가지 코드를 입력하는 것이 좋습니다. 그 점은 당신 아키텍처의 오류를 지적합니다. 템플릿을 사용하려면 일부 데이터에 템플릿 코드를 넣지 않으려 고합니다. 예를 들어 지나치게 단순화하면 백만 개 필드로 그 패턴을 향상시킬 수 있습니다. –