Помощник ячеек

Помощник ячеек

Зачастую шаблоны в проекте имеют общие элементы, вроде хорошо известных заголовка и футера. Используя этот помощнит, статичный код HTML может быть помещён в файл разметки вместе с "ячейками", которые представляют динамические части, изменяющиеся от страницы к странице. Эти ячейки потом заполняются разными дочерними шаблонами. Другими словами, файл разметки украшает дочерний шаблон.

Отображение ячеек

Ячейки доступны с использованием помощника ячеек ($view['slots']). Используйте output(), чтобы отобразить содержание ячейки в этом месте:

1
2
3
4
5
6
7
8
9
10
11
12
<!-- views/layout.php -->
<!doctype html>
<html>
    <head>
        <title>
            <?php $view['slots']->output('title', 'Default title') ?>
        </title>
    </head>
    <body>
        <?php $view['slots']->output('_content') ?>
    </body>
</html>

Первый аргумент метода - это имя ячейки. Метод имеет необязательный второй аргумент, который является значением по умолчанию, используемым, если ячейка недоступна.

Ячейка _content - это специальный набор ячеек от PhpEngine. Он имеет содержание подшаблона.

Caution

Если вы используете компонент отдельно, убедитесь в том, что вы зарегистрировали SlotsHelper:

1
2
3
4
use Symfony\Component\Templating\Helper\SlotsHelper;

// ...
$templateEngine->set(new SlotsHelper());

Расширение шаблонов

Метод extend() вызывается в подшаблоне, чтобы установить его родительский шаблон. Потом $view['slots']->set() может быть использован, чтобы установить содержание ячейки. Всё содержание, которое не установлено в ячейке ясно, находится в ячейке _content.

1
2
3
4
5
6
7
8
9
10
11
<!-- views/page.php -->
<?php $view->extend('layout.php') ?>

<?php $view['slots']->set('title', $page->title) ?>

<h1>
    <?php echo $page->title ?>
</h1>
<p>
    <?php echo $page->body ?>
</p>

Note

Возможны множественные уровни наследования: разметка может расширять другую разметку.

Для больших ячеек также существует расширенный синтаксис:

1
2
3
<?php $view['slots']->start('title') ?>
    Большое количество HTML
<?php $view['slots']->stop() ?>