Помощники шаблонов
Помощник шаблона — небольшая функция, которую вызывают в шаблоне через $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().