2016-09-07 19 views
1

Я новичок в разработке contao. То, что я пытаюсь сделать, это расширить пользовательские блоки в моих шаблонах. Итак, мои вопросы:Template Block Inheritence 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 разработчики здесь. Пожалуйста, помогите мне. Было бы очень приятно. Thanx. Если вы можете перечислить другие важные моменты, тогда это было бы полезно. Спасибо.

ответ

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