请记住,由于历史原因,Contao 3 中的模板继承非常简单,不能与另一个引擎即 twig(我们在 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()
. 的模板)中引入新块。这样做将导致抛出异常。
- 您不能在子模板中的块之外引入代码。
如果还有其他问题,请更新您的问题,因为猜测您到底想知道什么有点模糊。