Частичные представления (partial views) - это файлы шаблонов представлений .phtml, которые могут быть визуализированы другим шаблоном представления. Частичные представления позволяют собирать вашу страницу по частям и повторно использовать детали алгоритма визуализации представления в различных шаблонах представления.
В качестве примера использования частичных представлений, представьте, что нам нужно отобразить таблицу некоторых продуктов. У каждого продукта есть ID, название и цена. Мы можем использовать шаблон частичного представления для отображения одной строки таблицы несколько раз.
Для начала добавим метод partialDemoAction()
контроллеру Index:
// Действие, демонстрирующее использование частичных представлений.
public function partialDemoAction()
{
$products = [
[
'id' => 1,
'name' => 'Digital Camera',
'price' => 99.95,
],
[
'id' => 2,
'name' => 'Tripod',
'price' => 29.95,
],
[
'id' => 3,
'name' => 'Camera Case',
'price' => 2.99,
],
[
'id' => 4,
'name' => 'Batteries',
'price' => 39.99,
],
[
'id' => 5,
'name' => 'Charger',
'price' => 29.99,
],
];
return new ViewModel(['products' => $products]);
}
Этот метод действия просто подготавливает массив продуктов для отображения
и передает его шаблону представления с помощью контейнера для переменных ViewModel
.
Затем добавим файл шаблона partial-demo.phtml:
<?php
$this->headTitle('Partial View Demo');
?>
<h1>Partial View Demo</h1>
<p>
Ниже представлена таблица продуктов. Она была визуализирована с помощью
частичных представлений.
</p>
<table class="table table-striped table-hover">
<tr>
<th>ID</th>
<th>Product</th>
<th>Price</th>
</tr>
<?php
foreach ($this->products as $product) {
echo $this->partial('application/index/table-row', ['product'=>$product]);
}
?>
</table>
В представленном выше шаблоне представления мы определяем разметку таблицы продуктов
(строки 10-22). В строке 18 мы проходим по элементам массива продуктов и отображаем
каждую строку с помощью помощника вида Partial
.
Первый аргумент помощника вида Partial
- это имя файла шаблона частичного
представления ("application/index/table-row").
Второй аргумент - массив аргументов, передаваемых шаблону представления. К ним можно
будет обращаться так же, как если бы вы передавали их с помощью контейнера для
переменных ViewModel
.
Наконец, создадим шаблон представления table-row.phtml, который будет использоваться как шаблон частичного представления:
<tr>
<td> <?= $this->product['id'] ?> </td>
<td> <?= $this->product['name'] ?> </td>
<td> <?= $this->product['price'] ?> </td>
</tr>
В этом шаблоне представления мы визуализируем одну строку таблицы.
Чтобы увидеть получившуюся веб-страницу, наберите URL "http://localhost/application/partial-demo" в адресной строке своего браузера. Вы увидите что-то наподобие рисунка 6.5.