
Частенько составляя макет сайта нужно сделать так, чтобы определенная часть layouts была динамической и могла меняться в зависимости от контента вида. Но делать целый отдельный макет или его часть не нужно, а нужно в макете обращаться к переменной как это делаем в виде. Например, как у нас здесь, в хедере есть развёрнутый подзаголовок. Переменная основного заголовка title передаётся и доступна в макете, а вот другие наши переменные из модели, будучи доступными в виде, оказываются недоступны в макете. Для передачи таких переменных или даже целых кусков php-кода в Yii1 был механизм «клипов» (clips).
В layouts писали вызов клипа:
<?php echo $this->clips['userinfo']; ?>
Дальше в представлениях (view) можно писать любой код отображения для клипа:
Этот код помещаем во view
$this->beginClip('userinfo'); //любой код, который будет выведен в место echo $this->clips['userinfo'] в layouts $this->endClip();
В Yii2 подобный функционал теперь доступен через блоки контента (blocks). Клипы более не доступны. Блоки контента в Yii2 создаются по тому же принципу, только вместо clips пишем blocks, и beginClip, endClip -> beginBlock и endBlock.
Объявляем содержимое блока контента, это можно сделать как в виде, так и в layouts
$this->beginBlock('subtitle'); if($model->subtitle) echo $model->subtitle; $this->endBlock();
И вызываем блок там, где хотим вывести этот контент. Здесь также видно, что title мы используем сразу, так как к этой переменной имеем доступ из макета.
<h1><?= $this->title ?></h1> <?= (isset($this->blocks['subtitle'])) ? '<h2 class="subheading backed"><span>'.$this->blocks['subtitle'].'</span></h2>' : "Вдохновляя..." ?>
Перед вызовом блока контента в Yii2 нужно проверять его на существование, иначе вызов несуществующего блока выдаст ошибку. В Yii1 с клипами такого не было - можно было не делать такую проверку.
5 августа 2016, Программирование, веб-кодинг / Метки: блоки контента clips blocks
По мотивам – http://developer.uz/blog/block-conent-yii2/

