2016-09-07 138 views
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

请记住,由于历史原因,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时,无论我们发布到块('field'); ?>会显示以前的元素? – DpEN

+0

正确的是,您可以在扩展时覆盖块(放入新内容或包装来自父级的内容)或在不扩展时定义可用块,而不是在同一模板中。 – xtra