Навіщо потрібен кастомний плагін для 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 годину.
Замовте розробку плагіна — ми проаналізуємо ваше завдання та запропонуємо оптимальне рішення протягом дня. Зв'яжіться з нами, щоб обговорити деталі.







