Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 模板块继承Contao_Php_Inheritance_Contao - Fatal编程技术网

Php 模板块继承Contao

Php 模板块继承Contao,php,inheritance,contao,Php,Inheritance,Contao,我是康托发展的新手。我试图做的是扩展模板中的自定义块。因此,我的问题是: 是否可以在模板中创建自定义块 在文档中,有一节写了模板继承,并说明我们可以继承自定义块,例如: <?php $this->block('name_of_the_block'); ?> // Block content <?php $this->endblock(); ?> 如果这里有contao开发者的话。请帮帮我。我会非常感激的。塔克斯。如果你能列出其他重要的观点,那将是很有

我是康托发展的新手。我试图做的是扩展模板中的自定义块。因此,我的问题是:

是否可以在模板中创建自定义块

在文档中,有一节写了模板继承,并说明我们可以继承自定义块,例如:

<?php $this->block('name_of_the_block'); ?>

  // Block content

<?php $this->endblock(); ?>

如果这里有contao开发者的话。请帮帮我。我会非常感激的。塔克斯。如果你能列出其他重要的观点,那将是很有帮助的。谢谢。

请记住,由于历史原因,Contao 3中的模板继承非常简单,不能与我们在Contao 4中移动到的另一个引擎(即细枝)相比

回答你的问题: 您可以在模板中定义自己的块,然后可以在子模板中覆盖这些块。 事实上,每个块都是在其名称的根模板中创建的,然后被覆盖,要查看此操作,请参阅表单元素模板,例如,请参阅以下代码:

这些块在此处介绍,并在中覆盖:

如您所见,块字段正在被覆盖,而标签未被覆盖。 现在,我们可以在另一个模板中再次覆盖此块,或者在另一个扩展表单_radio.html5的模板中覆盖标签

如上所述,有一些限制需要注意:

不允许在使用$this->extend的子模板中引入新块。这样做将导致抛出异常。 不能在子模板的块之外引入代码。
如果还有问题,,请更新您的问题,因为猜测您到底想知道什么有点模糊。

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

回答你的问题: 您可以在模板中定义自己的块,然后可以在子模板中覆盖这些块。 事实上,每个块都是在其名称的根模板中创建的,然后被覆盖,要查看此操作,请参阅表单元素模板,例如,请参阅以下代码:

这些块在此处介绍,并在中覆盖:

如您所见,块字段正在被覆盖,而标签未被覆盖。 现在,我们可以在另一个模板中再次覆盖此块,或者在另一个扩展表单_radio.html5的模板中覆盖标签

如上所述,有一些限制需要注意:

不允许在使用$this->extend的子模板中引入新块。这样做将导致抛出异常。 不能在子模板的块之外引入代码。
如果还有其他问题,请更新您的问题,因为猜测您到底想知道什么有点模糊。

谢谢您的解释。我想我已经有了一部分,但还需要学习。所以,您的解释意味着我们不能创建自己的块,而只能扩展父模板中已经存在的块,对吗?因此,当扩展表单行时,我们发布到的任何内容都将显示在前面元素的上方?正确,您可以在扩展时覆盖块放置新内容或从父级包装内容,或者在不扩展时定义可用块,而不是在同一模板中。感谢您的解释。我想我已经有了一部分,但还需要学习。所以,您的解释意味着我们不能创建自己的块,而只能扩展父模板中已经存在的块,对吗?因此,当扩展form_行时,我们发布到其中的任何内容都将显示在前面元素的上方?正确,您可以在扩展时覆盖块放置新内容或从父级包装内容,或者在不扩展时定义可用块,而不是在同一模板中。
 // ... 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.
 <?php $this->extend('form_row'); ?>

 <?php $this->block('field'); ?>
 // ... code omitted, refer to linked file.
 <?php $this->endblock(); ?>