Навіщо потрібен кастомний плагін для Pico CMS
Ми — команда з 7-річним досвідом розробки на PHP, спеціалізуємося на Pico CMS з 2018 року. Реалізували понад 50 проєктів, включаючи професійну розробку плагінів для Pico CMS. Вартість простих плагінів стартує від 3000 грн, складних — від 15000 грн.
Уявіть: вам потрібно додати на всі сторінки Pico CMS кастомну форму зворотного зв'язку, яка надсилає дані в зовнішню CRM. Штатними засобами — тільки Twig-парціали та ручна обробка. Без плагіна доведеться правити ядро, що загрожує конфліктами при оновленні. Правильне рішення — написати ізольований PHP-плагін, який підключається через Composer. Плагін — це єдиний спосіб розширення Pico CMS без зміни ядра. Встановлення через Composer плагін робить оновлення простим. Ми займаємося цим більш ніж у 50 проєктах — від простих редиректів до повноцінних корпоративних порталів.
Редагування ядра Pico безпосередньо — шлях до технічного боргу. При наступному оновленні CMS ваші зміни перезапишуться, а якщо ви забудете, що правили, — сайт зламається. Плагін же живе в окремій директорії, підключається через Composer і не чіпає ядро. Це стандартна практика в сучасній PHP-розробці.
Згідно з офіційною документацією Pico, "плагіни є основним способом розширення функціональності" (https://github.com/picocms/Pico).
Як працює система подій Pico
Кожен плагін Pico — це клас, що наслідує AbstractPicoPlugin. Він підписується на події, які CMS генерує в строгому порядку: від завантаження конфігу до рендерингу Twig-шаблону. Методи-обробники отримують аргументи за посиланням (&$variable), що дозволяє модифікувати дані на льоту.
<?php class MyPlugin extends AbstractPicoPlugin { const API_VERSION = 3; protected $enabled = true; public function onConfigLoaded(array &$config): void { if (!isset($config['my_plugin'])) { $config['my_plugin'] = ['option' => 'default']; } } public function onMetaHeaders(array &$headers): void { $headers['redirect'] = 'Redirect'; $headers['auth_required'] = 'AuthRequired'; } public function onPageRendering(string &$templateName, array &$twigVariables): void { $meta = $twigVariables['meta']; if (!empty($meta['redirect'])) { header('Location: ' . $meta['redirect'], true, 302); exit; } } } Файл кладеться в plugins/MyPlugin/MyPlugin.php. Стандартна структура директорії:
plugins/ └── MyPlugin/ ├── MyPlugin.php ├── config.yml.template └── README.md Які події використовуються найчастіше?
Ось ключові точки входу для Pico 3.x. Ми використовуємо їх у 90% проєктів.
| Подія | Опис | Типове застосування |
|---|---|---|
| onPluginsLoaded | Усі плагіни завантажені | Доступ до інших плагінів |
| onConfigLoaded | Конфіг розібрано | Зміна параметрів |
| onRequestUrl | URL запиту відомий | Редиректи, обмеження |
| onMetaHeaders | Список YAML-заголовків | Додавання метаполів |
| onContentParsed | Markdown → HTML | Вставка шорткодів |
| onPageRendering | Перед Twig-рендерингом | Додавання змінних |
Приклад із практики: плагін авторизації за IP
public function onConfigLoaded(array &$config): void { $this->allowedIps = $config['ip_restrict']['allowed'] ?? []; $this->restrictedPaths = $config['ip_restrict']['paths'] ?? []; } public function onRequestUrl(string &$url): void { $clientIp = $_SERVER['REMOTE_ADDR'] ?? ''; foreach ($this->restrictedPaths as $path) { if (str_starts_with($url, $path)) { if (!in_array($clientIp, $this->allowedIps, true)) { header('HTTP/1.1 403 Forbidden'); echo 'Access denied'; exit; } } } } Такий плагін корисний для закриття адмін-панелі або staging-оточення. Він працює на ранньому етапі — onRequestUrl — і блокує доступ до початку обробки контенту, що економить ресурси.
Шорткоди в Pico: як додати?
Pico не підтримує шорткоди з коробки — їх реалізують через onContentParsed. Ми створюємо кастомні Twig фільтри для форматування даних, а також використовуємо Pico API для інтеграцій.
public function onContentParsed(string &$content): void { $content = preg_replace_callback( '/\[youtube\s+id="([a-zA-Z0-9_-]+)"\]/', static function (array $matches): string { $id = htmlspecialchars($matches[1], ENT_QUOTES); return sprintf( '<div class="video-embed"><iframe src="https://www.youtube.com/embed/%s" ' . 'allowfullscreen loading="lazy" title="YouTube video"></iframe></div>', $id ); }, $content ); } Типи плагінів: що ми вміємо?
| Тип плагіна | Складність | Приклади |
|---|---|---|
| Обробник однієї події | 1-2 дні | Редирект за мета-полями, додавання Google Analytics |
| Кастомні Twig-функції | 2-3 дні | Форма зворотного зв'язку, слайдер на основі YAML |
| Інтеграція із зовнішнім API | 3-5 днів | Імпорт із CRM, WebHook на оновлення контенту |
| Комплексна бізнес-логіка | від 5 днів | Каталог з фільтрацією, управління доступом |
Плагін на Pico розробляється в 3 рази швидше, ніж аналогічне розширення для WordPress, завдяки простій архітектурі подій та мінімалістичному ядру.
Які помилки допускають при розробці плагінів Pico?
- Неправильний порядок подій: наприклад, спроба використати onContentParsed до onPageRendering — контент ще не оброблено.
- Відсутність перевірки на існування масиву:
$config['my_plugin']може не бути — використовуйте??. - Використання глобальних змінних замість переданих за посиланням: це ламає ізоляцію.
- Забутий exit після редиректу: скрипт продовжує виконання, і ви отримаєте помилку заголовків.
- Відсутність тестів: плагін може зламатися при оновленні Pico.
Процес розробки
Ми дотримуємося чіткого регламенту, щоб ви отримали передбачуваний результат:
- Аналіз — ви описуєте завдання, ми уточнюємо деталі та оцінюємо терміни.
- Проєктування — визначаємо список подій, структуру конфігу та Twig-змінні.
- Розробка — пишемо код на PHP 8.1+ з урахуванням PSR-12, покриваємо тестами PHPUnit.
- Інтеграційне тестування — перевіряємо плагін на вашому хостингу або в середовищі, наближеному до продакшену.
- Здача — передаємо вихідний код з ліцензією MIT, документацію, конфіг-шаблон та звіт про тестування.
Що входить у роботу
- Вихідний код плагіна з підтримкою Composer-встановлення
- README з описом встановлення та налаштування
- Приклад конфігу в YAML
- Юніт-тести (PHPUnit) з покриттям не менше 80%
- 30 днів безкоштовної підтримки: виправлення багів, консультації
Гарантії та підтримка
Ми гарантуємо сумісність з останніми версіями Pico та PHP, відсутність конфліктів з іншими плагінами завдяки ізольованій архітектурі. Кожен плагін проходить код-рев'ю та статичний аналіз. Уся Pico CMS розробка ведеться з урахуванням PSR-12. Якщо у вас є нестандартна задача — напишіть нам, обговоримо рішення. Щоб замовити плагін Pico, заповніть форму зворотного зв'язку. Отримайте консультацію по вашому проєкту — визначимо необхідні події та терміни за 1 годину.
Замовте розробку плагіна — ми проаналізуємо ваше завдання та запропонуємо оптимальне рішення протягом дня. Зв'яжіться з нами, щоб обговорити деталі.







