Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Помощники шаблонов

Помощник шаблона — небольшая функция, которую вызывают в шаблоне через $this: $this->escapeHtml(), $this->url(). Помощники берут на себя повторяющуюся работу: построить ссылку, подключить стиль, вывести общий кусок разметки. Создавать их не нужно — они входят в пакет laminas-view.

Ссылки: url

Помощник url() строит адрес по имени маршрута:

<!-- module/Blog/view/blog/post/index.phtml -->
<a href="<?= $this->url('blog/add') ?>">Новая статья</a>

На странице появится ссылка на /blog/add. Параметры маршрута передают вторым аргументом, строку запроса — третьим:

<!-- module/Blog/view/blog/post/index.phtml -->
<ul>
    <?php foreach ($this->posts as $post): ?>
        <li>
            <a href="<?= $this->url('blog/view', ['id' => $post['id']]) ?>">
                <?= $this->escapeHtml($post['title']) ?>
            </a>
        </li>
    <?php endforeach; ?>
</ul>
 
<a href="<?= $this->url('blog', [], ['query' => ['page' => 2]]) ?>">Дальше</a>

Заголовки статей стали ссылками вида /blog/1, а последняя ссылка ведёт на /blog?page=2.

Файлы: basePath

Стили, скрипты и картинки лежат в папке public. Помощник basePath() добавляет к пути базовый адрес сайта:

<img src="<?= $this->basePath('img/logo.png') ?>" alt="Логотип">

Файл public/img/logo.png откроется, даже если сайт размещён не в корне домена, а в подпапке.

Части шаблона: partial

Одинаковый кусок разметки выносят в отдельный файл. Создайте module/Blog/view/blog/post/_card.phtml (подчёркивание в имени — принятая пометка «это часть, а не страница»):

<!-- module/Blog/view/blog/post/_card.phtml -->
<article>
    <h2><?= $this->escapeHtml($this->post['title']) ?></h2>
    <a href="<?= $this->url('blog/view', ['id' => $this->post['id']]) ?>">Читать</a>
</article>

Теперь эту часть вызывают из любого шаблона:

<!-- module/Blog/view/blog/post/index.phtml -->
<div class="posts">
    <?php foreach ($this->posts as $post): ?>
        <?= $this->partial('blog/post/_card', ['post' => $post]) ?>
    <?php endforeach; ?>
</div>

Первый аргумент — имя шаблона без расширения, второй — переменные для него. Часть видит только то, что ей передали.

Другие помощники

ПомощникЧто делает
headTitle('Блог')Заголовок окна
headLink()Подключение стилей в head
headScript(), inlineScript()Подключение скриптов
headMeta()Теги meta
partialLoop('имя', $items)Выводит часть для каждого элемента списка
escapeHtml(), escapeHtmlAttr()Экранирование

Частая ошибка

Адрес, написанный вручную — href="/blog/5", — перестанет работать, как только изменится маршрут или сайт переедет в подпапку. Ссылки на страницы всегда стройте через url(), а ссылки на файлы — через basePath().

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.