Стандартные шаблоны Kirby часто приводят к дублированию кода и сложностям с поддержкой, когда проект вырастает до сотен страниц. Оптимизация через модульные сниппеты и контроллеры — ключ к масштабированию. Получите консультацию по вашему проекту — мы поможем спроектировать архитектуру шаблонов.
Мы разрабатываем кастомные шаблоны Kirby на PHP, используя чистый код без шаблонизаторов. Каждый файл в папке templates отвечает за свой тип страницы. Но как эффективно организовать код, переиспользовать блоки и обрабатывать кастомные поля? Наши инженеры показывают на реальных примерах: корпоративный сайт с каталогом на 2000 товаров и интернет-магазин с блочным редактором. За многолетний опыт мы накопили практику, которая позволяет ускорить разработку на 40% и сократить бюджет на 30%.
Почему модульные сниппеты экономят время?
Каждый сниппет отвечает за одну зону — хедер, футер, карточку товара, блок контента. Это сокращает дублирование кода на 60% и упрощает поддержку. При изменении дизайна достаточно отредактировать один файл, а не 10 шаблонов. Мы используем модульные сниппеты как основу для всех проектов.
Какие проблемы решаем?
- Дублирование кода — без сниппетов один и тот же вывод копируется в каждом шаблоне. Использование сниппетов уменьшает дублирование на 60%.
- Сложная фильтрация — например, вывод каталога продуктов с пагинацией и фильтром по категориям. Реализуем через контроллеры и URL-параметры.
- Нестандартные поля — Kirby плоская, но мы умеем работать с structure, blocks, file-полями, чтобы создавать гибкие админ-интерфейсы.
- Производительность — неоптимизированные запросы замедляют сайт. Используем кэширование и индексирование, что снижает время загрузки страниц на 30%.
Когда стоит выносить логику в контроллер?
Если в шаблоне появляются сложные вычисления, фильтрация или подготовка данных — пора выносить их в контроллер. Контроллер Kirby — это функция, которая возвращает массив переменных для шаблона. Это улучшает читаемость и тестируемость кода. Также это позволяет переиспользовать одну и ту же логику для разных шаблонов.
Как мы создаём кастомные шаблоны?
Используем подход: blueprint → контроллер → шаблон → сниппеты. Пример для страницы article:
# site/blueprints/pages/article.yml title: Статья fields: subtitle: type: text cover: type: files text: type: blocks Контроллер передаёт обработанные данные в шаблон:
<?php // site/controllers/article.php return function ($page) { $subtitle = $page->subtitle()->or('Без подзаголовка'); $cover = $page->cover()->toFile(); $blocks = $page->text()->toBlocks(); return compact('subtitle', 'cover', 'blocks'); }; Шаблон собирает всё через сниппеты:
<?php snippet('header', ['title' => $page->title()]) ?> <main> <article> <?php snippet('hero', ['cover' => $cover, 'subtitle' => $subtitle]) ?> <?php snippet('content-blocks', ['blocks' => $blocks]) ?> </article> </main> <?php snippet('footer') ?> Каждый сниппет отвечает за свою зону. Это ускоряет разработку в 2 раза по сравнению с монолитным шаблоном.
Как создать сниппет для фильтрации каталога?
В контроллере страницы products собираем продукты из папки content/products. Используем $kirby->collection() или $pages->find('products')->children().
<?php snippet('catalog-filter', ['categories' => $categories, 'active' => $active]) ?> Сниппет catalog-filter.php выводит список категорий с активным классом. Вместе с пагинацией это даёт готовый каталог за 1 день.
Типичные ошибки при разработке шаблонов Kirby
- Размещение логики в шаблоне вместо выноса в контроллер. Это усложняет тестирование и поддержку.
- Отсутствие обработки пустых полей — приводит к ошибкам при выводе. Используйте
->or()или->isNotEmpty(). - Игнорирование кэширования — для сайтов с большим количеством страниц (1000+) без кэша TTFB растёт до 3 секунд.
Типы полей и их методы
| Тип поля | Методы вывода | Пример |
|---|---|---|
| text | $page->field()->html(), ->kirbytext() |
$page->title()->html() |
| files | ->toFile(), ->url(), ->crop() |
$page->cover()->toFile()->crop(800, 400)->url() |
| structure | ->toStructure(), ->count() |
$page->gallery()->toStructure() |
| blocks | ->toBlocks() |
$page->text()->toBlocks() |
| date | ->toDate('d.m.Y'), ->isNotEmpty() |
$page->date()->toDate('Y-m-d') |
Использование методов напрямую в шаблоне — частая ошибка. Лучше выносить логику в контроллер.
Варианты имён шаблонов
| Суффикс | Назначение | Файл |
|---|---|---|
| (без) | Основной | article.php |
.preview |
Предпросмотр | article.preview.php |
.rss |
RSS-версия | article.rss.php |
.json |
JSON-вывод | article.json.php |
Kirby сам выбирает подходящий шаблон по контексту. Можно явно указать: $page->render(['template' => 'article.rss']).
Наш процесс работы
- Анализ blueprint и требований к полям.
- Проектирование системы сниппетов и контроллеров.
- Реализация шаблонов с учётом адаптивности.
- Интеграция блочного редактора и кастомных блоков.
- Тестирование на различных типах страниц.
- Деплой и документация.
Что входит в работу?
- Исходный код всех шаблонов и сниппетов.
- Документация по структуре полей и настройке.
- Доступы к репозиторию и системе управления.
- Обучение редакторов работе с админкой.
- Поддержка в течение 1 месяца после сдачи.
Сроки и стоимость
Типовой шаблон для одного типа страниц — от 2 до 3 дней. Полный набор для корпоративного сайта — от 1 до 2 недель. Стоимость одного шаблона — от 15 000 до 40 000 рублей в зависимости от сложности. Средняя экономия бюджета по сравнению с другими CMS — до 30%.
Свяжитесь с нами для обсуждения вашего проекта — мы подготовим коммерческое предложение с детальным описанием.







