模板块继承内容

Template Block Inheritence Contao

我是接触开发的新手。我想做的是在我的模板中扩展自定义块。所以,我的问题是:

Is it possible to create custom blocks in templates?

在文档 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开发者。请帮帮我。真的很感激。谢谢。如果您还可以列出其他要点,那将会很有帮助。谢谢。

请记住,由于历史原因,Contao 3 中的模板继承非常简单,不能与另一个引擎即 twig(我们将在 Contao 4 中移动到)的灵活性进行比较。

回答你的问题: 您可以在模板中定义自己的块,然后可以在子模板中覆盖这些块。 事实上,每个块在其名称的 "root" 模板中都是 "created" 然后被覆盖,要查看此操作请参考表单元素模板,例如参见 [​​=16=] 的代码:

 // ... 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() 的模板)中引入新块。这样做将导致抛出异常。
  • 不能在子模板的块外引入代码。

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