Программирование, веб-кодинг

Блоки контента (blocks) в Yii2 - Аналог clips из Yii1

Как передавать переменную в шаблон (layout)

Блоки контента (blocks) в Yii2 - Аналог clips из Yii1

Частенько составляя макет сайта нужно сделать так, чтобы определенная часть 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 с клипами такого не было - можно было не делать такую проверку.

По мотивам – http://developer.uz/blog/block-conent-yii2/