Шаблон блочного наследования 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(); ?>

Если есть какие-либо разработчики контако здесь. Пожалуйста, помогите мне. Был бы очень признателен. Thanx. Если вы можете перечислить и другие важные моменты, то это будет полезно. Спасибо.

1

Решение

Пожалуйста, имейте в виду, что наследование шаблонов в 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(), Это приведет к исключению.
  • Вы не можете ввести код вне блока в дочерний шаблон.

Если оставшиеся вопросы должны быть, пожалуйста, обновите ваш вопрос, так как немного неясно догадаться, что именно вы хотите знать.

4

Другие решения

Других решений пока нет …