1

我是 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

1 回答 1

4

请记住,由于历史原因,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(). 的模板)中引入新块。这样做将导致抛出异常。
  • 您不能在子模板中的块之外引入代码。

如果还有其他问题,请更新您的问题,因为猜测您到底想知道什么有点模糊。

于 2016-09-07T22:04:21.480 回答