Стандартні шаблони Kirby часто призводять до дублювання коду та складнощів з підтримкою, коли проект виростає до сотень сторінок. Оптимізація через модульні сніпети та контролери — ключ до масштабування. Отримайте консультацію по вашому проекту — ми допоможемо спроектувати архітектуру шаблонів.
Ми розробляємо кастомні шаблони Kirby на PHP, використовуючи чистий код без шаблонізаторів. Кожен файл у папці templates відповідає за свій тип сторінки. Але як ефективно організувати код, перевикористовувати блоки та обробляти кастомні поля? Наші інженери показують на реальних прикладах: корпоративний сайт з каталогом на 2000 товарів та інтернет-магазин з блочним редактором. За багаторічний досвід ми накопичили практику, яка дозволяє прискорити розробку на 40% і скоротити бюджет на 30%.
Проблеми та рішення в розробці шаблонів Kirby
Чому модульні сніпети економлять час?
Кожен сніпет відповідає за одну зону — хедер, футер, картку товару, блок контенту. Це скорочує дублювання коду на 60% і спрощує підтримку. При зміні дизайну достатньо відредагувати один файл, а не 10 шаблонів. Модульні сніпети кращі за монолітні шаблони в 2 рази за швидкістю розробки. Вони також забезпечують кращу читаність завдяки чіткому розподілу відповідальності.
Які проблеми вирішуємо
- Дублювання коду — без сніпетів один і той самий висновок копіюється в кожному шаблоні. Використання сніпетів зменшує дублювання на 60%.
- Складна фільтрація — наприклад, висновок каталогу продуктів з пагінацією та фільтром за категоріями. Реалізуємо через контролери та URL-параметри.
- Нестандартні поля — Kirby плоска, але ми вміємо працювати з structure, blocks, file-полями, щоб створювати гнучкі адмін-інтерфейси.
- Продуктивність — неоптимізовані запити уповільнюють сайт. Використовуємо кешування опкодів та індексування, що знижує час завантаження сторінок на 30%.
Коли варто виносити логіку в контролер?
Якщо в шаблоні з'являються складні обчислення, фільтрація або підготовка даних — пора виносити їх у контролер. Контролер Kirby — це функція, яка повертає масив змінних для шаблону. Це покращує читаність і тестованість коду. Контролери кращі за монолітні шаблони в 3 рази за читаністю. Також це дозволяє перевикористовувати одну й ту саму логіку для різних шаблонів. Згідно з офіційною документацією 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 день.
Типові помилки та найкращі практики
Які помилки найчастіші?
- Розміщення логіки в шаблоні замість виносу в контролер. Це ускладнює тестування та підтримку.
- Відсутність обробки порожніх полів — призводить до помилок при висновку. Використовуйте
->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']). Також використовуйте Kirby API для роботи з даними, наприклад kirby()->collection('products').
Наш процес та умови співпраці
Етапи роботи та що входить
- Аналіз blueprint та вимог до полів.
- Проектування системи сніпетів і контролерів.
- Реалізація шаблонів з урахуванням адаптивності.
- Інтеграція блочного редактора та кастомних блоків.
- Тестування на різних типах сторінок.
- Деплой та документація.
У вартість входить: вихідний код всіх шаблонів і сніпетів, документація по структурі полів, доступ до репозиторію, навчання редакторів, підтримка 1 місяць. Ми гарантуємо якість коду та використовуємо PSR-4 автозавантаження та об'єктно-орієнтований підхід.
Терміни та вартість
Типовий шаблон для одного типу сторінок — від 2 до 3 днів. Повний набір для корпоративного сайту — від 1 до 2 тижнів. Вартість одного шаблону — від 10 000 до 30 000 грн залежно від складності. Середня економія бюджету порівняно з іншими CMS — до 30%. Зв'яжіться з нами для обговорення вашого проекту — ми підготуємо комерційну пропозицію з детальним описом.







