2016-09-07 4 views
1

나는 contao 개발에서 새로운입니다. 내가 뭘 하려는지 내 템플릿에서 사용자 지정 블록을 확장합니다. 그래서 내 질문 :템플릿 블록 상속 Contao

템플릿에 맞춤 블록을 만들 수 있습니까? 문서 https://docs.contao.org/books/manual/3.5/en/04-managing-content/templates.html에서

는이 템플릿 상속을 작성하고 우리가 예를 들어 사용자 정의 블록을 상속받을 수 있음을 언급하는 섹션이 있습니다 :

<?php $this->block('name_of_the_block'); ?> 

    // Block content 

<?php $this->endblock(); ?> 

여기에 어떤 contao 개발자가있는 경우. 제발 도와주세요. 정말 고맙겠습니다. 고맙습니다. 다른 중요한 사항을 나열 할 수 있다면 도움이 될 것입니다. 고맙습니다.

답변

4

Contao 3의 템플리트 상속은 역사적인 이유로 인해 매우 단순하고 다른 엔진 즉 나뭇 가지 (Contao 4로 이동하는)의 유연성과 비교되지 않습니다.

질문에 대답하십시오 : 템플릿에 자체 블록을 정의 할 수 있습니다. 그러면 하위 템플릿에서 재정의 할 수 있습니다. 사실, 모든 블록이 그것의 이름의 "루트"템플릿에서 "창조"하고 무시되고, form_row.html5의 코드를 볼 행동에서 볼 예를 들어 폼 요소 템플릿을 참조하십시오 :

// ... code omitted, refer to linked file. 
<div class="<?= $this->prefix ?><?php if ($this->class) echo ' ' . $this->class; ?>"> 
    <?php $this->block('label'); ?> 
    <?php $this->endblock(); ?> 

    <?php $this->block('field'); ?> 
    <?php $this->endblock(); ?> 
</div> 
// ... code omitted, refer to linked file. 

블록은 form_radio.html5 여기에 소개 대체됩니다 : 당신이 볼 수 있듯이

<?php $this->extend('form_row'); ?> 

<?php $this->block('field'); ?> 
// ... code omitted, refer to linked file. 
<?php $this->endblock(); ?> 

는, 블록 field은 무시하고 label은 아니다되고있다. 이제 다른 템플릿의이 블록을 다시 정의하거나 form_radio.html5을 확장하는 다른 템플릿의 레이블을 무시할 수 있습니다. 위에서 언급 한 바와 같이

,주의해야 할 몇 가지 제한이 있습니다. 당신은 아이 템플릿의 새로운 블록 ($this->extend()를 사용 하나를 소개 할 수 없습니다

  • 예외 종료됩니다 이렇게하면 슬로우 .
  • 당신은 아이 템플릿에 블록의 외부의 코드를 도입 할 수 없다.

질문에 나머지가 있어야합니다 경우 당신이 알고 싶은 정확히 추측 조금 모호로, 질문을 업데이트하십시오.

+0

설명해 주셔서 감사합니다. 나는 블록의 일부분을 얻었지만 아직도 배워야한다고 생각한다. 그래서, 당신의 설명은 우리가 우리 자신의 블록을 만들 수는 없지만 부모 템플릿에서 이미 존재하는 것을 확장한다는 것을 의미합니다. 그래서 form_row를 우리가 게시 한 내용을 모두 확장하면 block ('field'); ?>는 이전 요소를 무시하고 표시됩니까? – DpEN

+0

올바른 경우, 확장하거나 확장하지 않을 때 사용 가능한 블록을 정의 할 때 동일한 템플리트에서 둘 다가 아니라 블록을 대체 할 수 있습니다 (새 내용 넣기 또는 부모의 내용 줄 바꿈). – xtra