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()
를 사용 하나를 소개 할 수 없습니다
- 예외 종료됩니다 이렇게하면 슬로우 .
- 당신은 아이 템플릿에 블록의 외부의 코드를 도입 할 수 없다.
질문에 나머지가 있어야합니다 경우 당신이 알고 싶은 정확히 추측 조금 모호로, 질문을 업데이트하십시오.
설명해 주셔서 감사합니다. 나는 블록의 일부분을 얻었지만 아직도 배워야한다고 생각한다. 그래서, 당신의 설명은 우리가 우리 자신의 블록을 만들 수는 없지만 부모 템플릿에서 이미 존재하는 것을 확장한다는 것을 의미합니다. 그래서 form_row를 우리가 게시 한 내용을 모두 확장하면 block ('field'); ?>는 이전 요소를 무시하고 표시됩니까? – DpEN
올바른 경우, 확장하거나 확장하지 않을 때 사용 가능한 블록을 정의 할 때 동일한 템플리트에서 둘 다가 아니라 블록을 대체 할 수 있습니다 (새 내용 넣기 또는 부모의 내용 줄 바꿈). – xtra