При создании плагина для October CMS через Builder многие разработчики упираются в ограничение: сложные отношения Many-to-Many не генерируются, кастомные виджеты требуют ручного вмешательства, а сгенерированный код часто содержит N+1 запросы. Например, клиент хотел интернет-магазин с фильтрами по категориям, но после генерации Builder выяснилось, что каждая страница товара делает 50 запросов к БД из-за отсутствия eager loading. Мы доработали код, сократив запросы до 5, и страница стала загружаться за 0.3 сек вместо 4 сек. Мы сталкивались с этим десятки раз и выработали рецепт: Builder для скелета + ручная доработка под продакшен. Настраиваем Builder Plugin и доводим результат до production-ready кода. За 5 лет мы выполнили более 50 проектов, сэкономив клиентам до 60% бюджета по сравнению с ручной разработкой с нуля.
Настройка Builder Plugin под продакшен
Builder — отличный инструмент для быстрого прототипирования. Он генерирует миграции, модели и контроллеры за 2–4 часа. Но чтобы код работал в продакшене, нужно доработать валидацию, оптимизировать запросы и добавить кастомную логику. Мы выполняем эти шаги вручную, используя опыт работы с October CMS.
Что можно сделать с Builder?
| Функция | Описание | Примечание |
|---|---|---|
| Database | Визуальный конструктор таблиц | Поддерживает все типы столбцов Laravel, индексы, внешние ключи |
| Models | Создание Eloquent-моделей | Настройка полей, валидации, отношений, scope-методов |
| Backend Controllers | CRUD-контроллеры | Поведения list, form, reorder |
| Menus | Навигация в backend | Добавление пунктов меню |
| Versions | Управление версиями | Миграции и версионирование плагина |
Причины N+1 запросов в Builder
При генерации реляций Builder не добавляет жадную загрузку. Например, список товаров с категориями выполнит запрос на каждую категорию. Это резко замедляет страницу. Мы исправляем это, добавляя with() в модели и используя eager loading. В результате количество запросов сокращается в 5–10 раз, а скорость загрузки страницы увеличивается на 80%.
Как избежать N+1 запросов?
Чтобы избежать N+1, на этапе доработки добавляем жадную загрузку во все модели. Для списков используем with() в контроллерах, а в моделях — глобальные scope-методы. Например, в модели Product добавляем protected $with = ['category']. Это сокращает количество запросов с 50 до 5 и ускоряет загрузку до 0.3 сек.
Как доработать плагин после генерации?
После генерации скелета мы выполняем следующие шаги:
- Проверяем миграции и добавляем составные индексы для ускорения запросов.
- Настраиваем валидацию с учётом бизнес-логики (например, проверка уникальности составных полей).
- Реализуем кастомные scope-методы для фильтрации и сортировки (например,
scopePopular,scopeByCategory). - Добавляем отношения Many-to-Many через промежуточные таблицы с дополнительными полями (pivot).
- Оптимизируем запросы: исправляем N+1 с помощью
with(), используем жадную загрузку для списков. - Добавляем кастомные поведения, например для массового импорта CSV.
Пример: создание плагина через Builder
- Перейти в Backend → Builder → Выбрать плагин
- Database → Add Table — указать название, добавить столбцы
- Models → Add Model — выбрать таблицу, настроить
$fillable, правила - Controllers → Add Controller — выбрать модель, настроить list columns и form fields через YAML
Сгенерированный columns.yaml:
# models/Product/columns.yaml columns: name: label: Название searchable: true sortable: true price: label: Цена type: number sortable: true is_active: label: Активен type: switch created_at: label: Создан type: timesince fields.yaml:
# models/Product/fields.yaml fields: name: label: Название type: text required: true span: left slug: label: Slug type: text preset: field: name type: slug span: right price: label: Цена (руб.) type: number span: left description: label: Описание type: richeditor size: large image: label: Изображение type: fileupload mode: image imageWidth: 1200 imageHeight: 630 tabs: fields: seo_title: tab: SEO label: SEO заголовок type: text seo_description: tab: SEO label: SEO описание type: textarea Сравнение: Builder vs ручная разработка
| Критерий | Builder | Ручная разработка |
|---|---|---|
| Скорость создания CRUD | 2–4 часа | 1–2 дня |
| Гибкость | Ограниченная | Полная |
| Качество кода | Требует доработки | Высокое |
| Поддержка сложной логики | Нет | Да |
Builder ускоряет создание CRUD-модулей в 3–5 раз по сравнению с ручной разработкой, но финальный код требует доработки. Наша команда помогает пройти этот путь без ошибок.
Технические детали настройки
Настройка включает конфигурацию YAML-файлов моделей и контроллеров, добавление кастомных scope-методов и оптимизацию запросов. Например, для модели Product мы добавляем scopePublished и scopeInStock. Также настраиваем разрешения и меню для backend.
Процесс работы
- Аналитика — изучаем требования к плагину.
- Установка и настройка Builder — конфигурация окружения.
- Генерация скелета — создание таблиц, моделей, контроллеров.
- Доработка кода — валидация, кастомные методы, оптимизация.
- Тестирование — проверка на соответствие требованиям.
- Деплой — выкатка на сервер.
Что входит в работу
- Установка и настройка Builder Plugin.
- Создание до 5 моделей с формами и списками.
- Настройка меню и разрешений.
- Доработка кода под продакшен (до 20 часов).
- Оптимизация скорости загрузки backend-страниц.
- Документация по плагину.
- Консультация по дальнейшей поддержке.
Сроки и стоимость
Сроки: от 3 до 7 рабочих дней в зависимости от сложности. Стоимость рассчитывается индивидуально — пишите для оценки. Мы гарантируем экономию бюджета до 60% по сравнению с ручной разработкой.
Почему выбирают нас?
Опыт работы с October CMS — более 5 лет. Выполнили более 50 проектов. Предоставляем гарантию на настройку и доработку.
Официальная документация October CMS: https://octobercms.com/docs
Свяжитесь с нами для консультации — получите оценку вашего проекта и готовый плагин с доработанным кодом. Закажите настройку Builder Plugin и получите готовый плагин с оптимизированным кодом.







