Стандартних плагінів Craft CMS часто не вистачає для складних проєктів. Кастомний плагін вирішує цю проблему. Ми розробляємо плагіни, що розширюють функціональність CMS під конкретні завдання — від кастомних типів полів до повноцінних модулів з власними розділами в панелі управління. Наш досвід: понад 5 років роботи з Craft CMS, понад 50 реалізованих плагінів для версій 3, 4 та 5. Використовуємо актуальний стек: PHP 8.3+, Yii2 (у складі Craft), MySQL/PostgreSQL, Redis, Docker для ізоляції.
Коли без кастомного плагіна не обійтися?
Стандартні можливості Craft CMS покривають типові сценарії, але під специфічні завдання — наприклад, кастомний каталог товарів з унікальними полями, інтеграція з CRM через REST API або складна система сповіщень — потрібне розширення. Кастомний плагін дає повний контроль: ви задаєте структуру даних, логіку відображення та взаємодії. Плагін легко переноситься між проєктами: достатньо виконати composer require в новому проєкті. Економія на ліцензіях при використанні власного плагіна замість покупки готового рішення може бути значною на одному проєкті.
Плагін чи модуль: що обрати?
Модулі прив'язані до проєкту — їх не можна перевикористовувати або опублікувати. Плагіни, на відміну від них, пакуються як пакети Composer і можуть бути встановлені в будь-який проєкт Craft CMS однією командою. Крім того, плагіни мають власну версійність, міграції та можуть бути опубліковані в Plugin Store. Плагін економить до 60% часу при переході на новий проєкт порівняно з модулем, оскільки не вимагає повторної реалізації. Розробка плагіна обходиться дешевше в довгостроковій перспективі: типовий плагін з часом окупається завдяки повторному використанню.
| Критерій | Модуль | Плагін |
|---|---|---|
| Перевикористання | тільки в проєкті | в будь-якому проєкті через Composer |
| Публікація | ні | Plugin Store |
| Версіонування | вручну | автоматичні міграції |
| Ліцензування | ні | можна продавати |
Як ми розробляємо плагіни: стек і підхід
Ми слідуємо офіційній документації Craft CMS і використовуємо всі можливості API: події, сервіси, моделі, записи (ActiveRecord), міграції, контролери та шаблонізатор Twig. Кожен плагін проходить етапи:
- Аналіз вимог — обговорюємо, яку задачу вирішує плагін, які типи елементів потрібні, чи потрібна CP-секція та REST API.
- Проектування архітектури — визначаємо структуру таблиць, сервіси, хуки та події. Використовуємо Repository-паттерн для роботи з даними, N+1 query уникаємо через Eager Loading.
- Розробка — пишемо код на PHP 8.3+, використовуємо типізовані властивості, enum, match. Для фронту — Vue.js або React, якщо потрібен rich-інтерфейс. Усі плагіни покриваються unit- та integration-тестами на Pest.
- Тестування — перевіряємо сумісність з Craft CMS 4.x та 5.x, міграції бази даних, продуктивність. Використовуємо GitHub Actions для CI.
- Публікація — готуємо документацію, CHANGELOG, іконку, і, якщо потрібно, публікуємо в Plugin Store.
Як уникнути N+1 запитів у плагіні?
При розробці кастомних елементів часто виникає проблема N+1 запиту: при виведенні списку елементів кожен елемент підвантажує пов'язані дані окремим запитом. У плагінах ми використовуємо Eager Loading через Craft::$app->elements->createElementQuery() з методом with() для підвантаження всіх зв'язків одним запитом. Додатково застосовуємо кешування Redis для частих запитів.
Склад робіт при розробці плагіна
- Повний код плагіна з composer.json, автозавантаженням PSR-4, міграціями.
- Документація українською або англійською мовою (README, inline-коментарі).
- Доступ до приватного репозиторію Git (GitHub/GitLab).
- Навчання команди роботі з плагіном (1–2 години онлайн).
- 30 днів гарантійної підтримки після здачі.
- Допомога з публікацією в Plugin Store (якщо потрібно).
Скільки часу займає розробка?
| Тип плагіна | Терміни |
|---|---|
| Просте поле (FieldType) | 2–3 дні |
| Сервіс + CP секція | 3–5 днів |
| Кастомний тип елемента | 5–10 днів |
| Повноцінний плагін (елемент + CP + API) | 2–4 тижні |
| Публікація в Plugin Store | +1–2 дні |
Вартість кожного проєкту розраховується індивідуально після аналізу вимог. При замовленні комплексного плагіна надається знижка на подальшу підтримку. Зв'яжіться з нами для отримання попередньої оцінки.
Приклад структури типового плагіна
Типова структура папок:
craft-myplugin/ ├── composer.json ├── CHANGELOG.md ├── src/ │ ├── Plugin.php │ ├── models/ │ ├── services/ │ ├── fields/ │ ├── elements/ │ ├── records/ │ ├── migrations/ │ ├── controllers/ │ ├── templates/ │ ├── web/ │ └── translations/ └── icon.svg composer.json
{ "name": "myvendor/craft-myplugin", "description": "My custom Craft CMS plugin", "type": "craft-plugin", "require": { "craftcms/cms": "^4.0.0" }, "autoload": { "psr-4": { "myvendor\\myplugin\\": "src/" } }, "extra": { "handle": "myplugin", "class": "myvendor\\myplugin\\Plugin" } } Головний клас та приклади елементів
namespace myvendor\myplugin; use Craft; use craft\base\Plugin as BasePlugin; class Plugin extends BasePlugin { public function init(): void { parent::init(); // регистрация компонентов, событий, виджетов } } namespace myvendor\myplugin\fields; use craft\base\Field; class ColorSwatchField extends Field { public static function displayName(): string { return \Craft::t('myplugin', 'Color Swatch'); } public function getInputHtml($value, $element): string { return \Craft::$app->view->renderTemplate('myplugin/_fields/color-swatch-input', [ 'name' => $this->handle, 'value' => $value, ]); } } namespace myvendor\myplugin\elements; use craft\base\Element; class ProductElement extends Element { public static function displayName(): string { return 'Product'; } public function afterSave(bool $isNew): void { // сохранение дополнительных данных } } Повний цикл: від ідеї до публікації
Ми супроводжуємо проєкт на всіх етапах. Якщо ви ще не впевнені, чи потрібен плагін або модуль, — отримайте безкоштовну консультацію. Зв'яжіться з нами, і ми проаналізуємо вашу задачу, запропонуємо архітектуру та оцінимо терміни й бюджет. Розробимо плагін під ключ з гарантією якості.
Чому обирають нас
- Досвід: понад 5 років роботи з Craft CMS, включаючи міграції між версіями.
- Якість: усі плагіни покриті тестами (Pest), код відповідає PSR-12.
- Прозорість: доступ до репозиторію та CHANGELOG, кожен етап фіксується.
- Підтримка: гарантія 30 днів та можливість довгострокового супроводу.
Замовте розробку кастомного плагіна Craft CMS — ми запропонуємо оптимальне рішення для вашої задачі.







