• Доработки · OpenCart 4.x

Кастомный модуль: когда готового решения под вашу задачу нет

Разработка кастомного модуля для интернет-магазина нужна тогда, когда в маркете решения под вашу задачу нет – или оно есть, но делает не то. Мы пишем расширение штатными механизмами платформы: событиями и модификаторами, без правки в файлах ядра. Сумма зависит не от описания задачи, а от того, в скольких местах магазина модуль должен вмешаться. Поэтому сначала бесплатный разбор, потом срок и смета.

Посмотреть, как это работает
Стоимость
после бесплатного аудита
Гарантия
30 дней после подписания акта
Срок работ
5–30 рабочих дней в зависимости от количества точек вмешательства
после бесплатного аудита
Стоимость
30
Гарантия

дней после подписания акта

5–30
Срок работ

рабочих дней в зависимости от количества точек вмешательства

ноль - события платформы и модификаторы OCMOD
Правок в ядре
разбор задачи, 2–4 рабочих дня, бесплатно
Перед сметой
передаются вам вместе с документацией
Выходчики
модуль снимается без последствий для магазина
Выключение
Этапы работы

Прозрачные этапы с согласованием на каждом шагу

Общий срок:5–30 дней

  1. Разбор задачи и техническое описание

    1–4 рабочих дня

    Слушаем задачу вашими словами, проверяем, закрывается ли она готовым решением, и раскладываем по точкам вмешательства. На выходе — документ, согласно которому считается смета и принимается работа.

  2. Тестовая площадка и карта вмешательств

    1–2 рабочих дня

    Поднимаем копию боевого сайта с теми же расширениями. Здесь же составляется список мест, куда модуль добавляет свое поведение, и список расширений, которые в этих местах уже работают.

  3. Разработка

    1–15 рабочих дней

    Пишем модуль событиями платформы и модификаторами, кладем в Git. Настройки в админке, обработка ошибок и журнал действий появляются вместе с основной логикой, а не дописываются в конце.

  4. Проверка сценариев и совместимости

    1–6 рабочих дней

    Прогоняем модуль на реальных сценариях магазина и смотрим, как он живет рядом с установленными расширениями. Отдельным пунктом проверяем выключение: магазин должен работать и без модуля.

  5. Установка, документация, передача

    1–3 рабочих дня

    Ставим на боевой сайт в согласованное окно, отдаем выходники, документацию и доступ к репозиторию. Настройка проходит с вашим человеком на живом примере.

Технологии и интеграции

На чём строим и с чем это соединяется

Стек

  • OpenCart 4.x — развивающая ветвь; ставим по умолчанию
  • OpenCart 3.x – когда модуль должен жить рядом с расширениями, сборок которых под 4.x еще нет
  • События платформы вместо правок ядра – модуль переживает обновление; предел: событий хватает не на каждое место, и о таких местах мы говорим до старта
  • Модификаторы OCMOD – меняют разметку без изменения файлов; предел: два модификатора на один шаблон ссорятся, поэтому карта вмешательств составляется в код
  • PHP и MySQL – родная пара платформы, лишних зависимостей не добавляем
  • Git – история перемен и возможность откатиться; репозиторий ваш
  • Тестовая площадка как копия боевой — конфликты видны до запуска
  • Логирование в отдельную таблицу или файл - без журнала разбор сбоя превращается в гадания

Интеграции

  • API платежных провайдеров
  • API перевозчиков
  • 1С/BAS
  • KeyCRM
  • XML-фиды
  • SMTP
  • SMS-шлюзы
  • Telegram
  • Google Tag Manager
  • GA4
Что входит

Полный перечень работ и того, что вы получаете на выходе

  • Техническое описание задачи, согласованное до старта: в нем написано и что модуль делает, и чего он намеренно не делает — именно этот документ затем закрывает спор о границах работы
  • Реализация событиями платформы и модификаторами, без правок в файлах ядра – чтобы магазин можно было обновлять дальше, а не замораживать на версии без поддержки
  • Настройка модуля в админке: поведение меняет ваш менеджер, а не разработчик по отдельному счету
  • Проверка совместимости с уже установленными расширениями на копии боевого сайта — конфликты видны до запуска, а не через месяцы, когда их никто уже не свяжет с модулем
  • Обработка ошибок и понятные сообщения вместо молчаливого сбоя: покупатель видит, что пошло не так, менеджер видит то же в админке
  • Логирование действий модуля в отдельную таблицу или файл — когда что-нибудь случится, разбор начинается с журнала, а не с гадания
  • Код в Git с понятной структурой и комментариями: история перемен остается у вас и дает возможность откатиться
  • Документация: что делает, как настраивается, куда смотреть при проблемах – чтобы модуль мог подхватить другой разработчик
  • Установка на боевой сайт с возможностью отключить модуль без последствий для магазина
  • Передача выходников вам – модуль ваш, а не наш, и лицензии на него мы не продаем
  • Условия: оплата по этапам, гарантийный срок 30 календарных дней на выполненные работы
Когда эта услуга не подходит

Что не входит в работу — чтобы не было сюрпризов на сдаче

  • Совместимость с будущими обширными версиями платформы — честно обещать ее невозможно
  • Лицензии и поддержка сторонних модулей, с которыми наш взаимодействует
  • Постоянное сопровождение после гарантийного срока – это отдельная услуга с отдельными условиями
  • Задачи, закрываемые штатными настройками: об этом вы услышите на разборе, к счету
  • Хостинг, домен, эквайринг
Кому подходит

Ситуации, в которых эта услуга даёт результат

Сценарий 1 из 4

В маркете пять схожих модулей, и ни один не делает то, что нужно

Вы уже купили два, подгоняли настройками, и каждый закрывает две трети задачи. Дальше развилка: держать оба и мириться с тем, что они ссорятся за одно и то же место в шаблоне, или заказать одно расширение ровно под ваш процесс. Разбор нужен именно для того, чтобы понять, в каком из этих двух состояний вы сейчас.

Разберём вашу ситуацию на бесплатном аудите
Свой модуль против подгонки купленного

Чем этот вариант отличается от альтернативы

Что делаетравно то, что записано в техническом описании
Обновление платформызависит от вас: код у вас, поправить можно в любое время
Лишнее поведениеее нет – писали под один процесс
Разбор сбояжурнал действий и понятные сообщения
Деньгибольшая сумма на старте, ноль дальнейших лицензий

Бесплатный разбор задачи под модуль

Половина запросов на кастомный модуль закрывается существующим решением или настройкой – и честно сказать это к оплате выгоднее обоим. Разбор нужен как раз для того, чтобы отделить эти случаи.

Что мы измеряем

  • Есть ли готовое решениеМы проверяем, закрывается ли задача штатными средствами платформы или расширением. Если да — мы это скажем, даже если это означает, что заказывать у нас нечего.
  • Точки вмешательстваВ скольких местах платформы модуль должен что-то изменить: карточка, каталог, корзина, чекаут, админка, обмен данными. Это главная составляющая сметы.
  • Конфликты с имеющимися модулямиНе пересекается ли задача с тем, что уже стоит. Два расширения, которые правят одно и то же место — источник ошибок, выявляемых за месяцы.
  • Состояние кода вокругСколько поправок в ядре уже сделано. Для ориентира: в измеренном нами оптовом магазине карту сайта генерировал сторонний модуль, который по стандартным адресам отдавал либо пустое тело, либо строку о собственном отключении — рабочая карта лежала на нестандартном адресе и держалась только записью в robots.txt.
  • Кто это будет сопровождатьНужна ли возможность передать модуль другому разработчику. Это влияет на требования к документации и способу реализации.
  • Срок жизни задачиТо ли это разовая потребность, то ли функция, которая будет жить годами. Разовые задачи часто дешевле решить иначе, чем модулем.

Что вы получаете

  • Техническое описание задачи в том виде, в каком ее можно реализовать и проверить.
  • Ответ, готово ли решение и почему оно подходит или не подходит.
  • Оценка разработки с разбивкой по точкам вмешательства.
  • Разговор на 30-40 минут по документу.

Срок: 2–4 рабочих дня

Почему это бесплатно

Потому что самая дорогая ошибка здесь – заказать модуль там, где хватало настройки. Несколько дней разбора дешевле разработки, которая оказалась излишней.

Что дальше

После разбора – сумма и срок, договор, счет, акт. Код и документация передаются вам вместе с работами.

Короткая форма: контакт и адрес сайта

Не нашли свой случай?

Опишите, как это устроено у вас, — ответим, подходит ли «Кастомный модуль под конкретную задачу» и что это значит в вашей ситуации. Без брифа и без звонка: один вопрос, один ответ.

  • Договор, акт и гарантия 30 дней

    На каждый проект письменный договор: объём, сроки, сумма, порядок приёмки. После сдачи — акт и счёт, затем 30 календарных дней гарантии.

  • ФОП и безналичный расчёт

    Исполнитель — зарегистрированный ФОП. Оплата на счёт с закрывающими документами.

  • Права и доступы — ваши

    Код, дизайн и материалы переходят к вам после полной оплаты. Домен, хостинг, репозиторий оформляем на вас.

  • Портал клиента вместо переписки

    Во время работы вы получаете доступ к порталу: договоры, счета, акты и статус проекта в одном месте.

  • Заказчики из Европы

    Среди работ — проекты для Норвегии, Болгарии, Молдовы и Испании.

  • Цифры, которые можно проверить

    Каждый кейс в портфолио — со ссылкой на живой сайт и техническим замером.

  • Сначала аудит, потом сумма

    Прайса на сайте нет намеренно: объём одной и той же работы у двух клиентов отличается кратно.

  • Говорим «нет», когда не уверены

    Если задача не наша или срок нереальный — скажем сразу.

Что влияет на стоимость

Почему две одинаковые на вид задачи считаются по-разному

  • Количество точек вмешательстваГлавная составляющая сметы. Добавить поле в карту – одно место. Считать доставку по собственной формуле – карточка, корзина, чекаут, админка, печатные формы и обмен с перевозчиком. Трудоемкость разнится на порядок.
  • Касается ли модуль денегРасширение, изменяющее цену, скидку или сумму заказа, требует проверки сценариев: гость и зарегистрированный, купон поверх скидки, возврат, частичная оплата. Большая часть времени идет на проверку, а не на написание кода.
  • Обмен с внешней системойЕсли модуль ходит в чужой API, к работе прилагается все, что делается на случай молчания другой стороны: очередь, повторы, журнал, поведение магазина, когда ответа нет вообще. Документация внешней системы нужна на старте – без нее оценка будет выдумкой.
  • Состояние кода вокругМагазин, в котором ядро ​​уже правили руками, дороже: каждую точку вмешательства сначала проверяем на то, что там уже изменено. Это видно на разборе и попадает в смету отдельной строкой, а не всплывает посреди работ.
  • Сколько вынести в админкуКаждая настройка, которую вы сможете менять сами, – это форма, валидация и проверка. Дороже на старте, дешевле в эксплуатации. Выносить все подряд – тоже ошибка.
  • Версия платформыВ четверке OpenCart переписали систему событий и код под 3.x туда не переезжает дословно. Планируете обновление версии – учесть это нужно до разработки, а не после.
Кейсы

Задачи и результат в цифрах — все показатели сняты нашим замером

оптовый магазин нижнего белья, каталог более 13 тыс. позиций

Задача
Проверить техническое состояние большого оптового каталога — прежде всего, как ведут себя посторонние расширения, отвечающие за карту сайта и разметку.
Решение
Обход стандартных адресов карты сайта и robots.txt, замер отклика и вес документа, разбор структурированных данных и сверка количества страниц.
Результат
13 428 страниц товаров и 161 категория - 13 590 адресов в карте сайта, из них только 1 дубликат. TTFB 289 мс, полная загрузка 455,1 мс: третий быстрый отзыв среди 16 измеренных сайтов. Способы оплаты вынесены в структурированные данные отдельным полем acceptedPaymentMethod – для этой платформы редкость. Дефект найден измерением: стандартный адрес карты сайта отдает 200 с пустым телом, второй стандартный адрес возвращает текстовую строку об выключенном генераторе, а рабочая карта лежит на нестандартном адресе и держится только записью в robots.txt.

магазин систем автоматического полива с мелкой технической номенклатурой

Задача
Собрать каталог, в котором колени, муфты и тройники различаются только диаметром и типом резьбы: без глубокой вложенности и фильтра покупатель нужную деталь не находит.
Решение
Каталог развернули на 4 уровня вложенности, чтобы фитинги делились по типу соединения и резьбой; в категориях работает модуль фасетного фильтра. Добавили быстрый просмотр карты, заказы в один клик, отзывы, обратный звонок и виджеты мессенджеров.
Результат
300 товаров в 40 категориях на 4 уровнях вложенности цифру подтвердили двумя независимыми методами, расхождение 0%. TTFB главной 235 мс (медиана из 5 замеров), полный HTML 262 мс; вес главного 143,6 КБ без сжатия и 22,5 КБ в brotli. В чекате 6 способов доставки от 2 перевозчиков и 3 способа оплаты. То же измерение показало, что ни одного счетчика аналитики на сайте нет — то есть эффект любой наработки здесь пока нечем измерить.
Что нужно от вас

Без этого не начнём — лучше подготовить заранее

  1. Описание задачи своими словами, с примерами того, как оно должно работать и что вы будете считать правильным результатом.
  2. Доступы: админка, файлы, база, тестовая площадка или разрешение поднять его нам.
  3. Перечень уже установленных расширений, включая те, которые когда-то поставили и забыли выключить.
  4. Документацию внешних систем, с которыми модуль будет обмениваться данными, и ключи к тестовому контуру.
  5. Одного человека с вашей стороны с правом согласовать техническое описание и принять работу.

Если чего-то из этого нет — скажите, подскажем, как собрать или сделаем сами отдельной задачей.

Частые вопросы

Что спрашивают чаще всего — с конкретными ответами

Может, в маркете уже есть готовый модуль?

Часто есть, и проверяем мы это первым шагом к любым деньгам. Если задача закрывается существующим расширением или штатной настройкой, так и скажем — даже если это означает, что заказывать у нас нечего. Своя разработка оправдана в трех случаях: готовое делает не то, делает лишнее или влечет зависимость от автора, которого вы не хотите.

Почему сумма зависит не от описания задачи?

Ибо «добавить поле в карточку» и «считать доставку по собственной формуле» занимают одинаковые полленты описания, а работы у них разная на порядок. В первом случае место вмешательства одно. Во втором — карточка, корзина, чекаут, админка, печатные формы и обмен с перевозчиком, и в каждом из этих мест нужно проверить, что ничего не сломалось. На разборе мы раскладываем задачу по таким местам, и именно эта раскладка становится сметой.

Вы будете править файлы платформы?

Нет, это условие, от которого мы не отступаем. Модуль реализуется событиями платформы и модификаторами. Правки в ядре выглядят дешевле при разработке и дорожают при каждом последующем обновлении – именно из-за них магазины годами сидят на версиях без поддержки. Если задачу невозможно решить без смены ядра, вы услышите это до начала работ, а не в момент сдачи.

Что будет, когда модуль сломается?

Ломаться он должен предсказуемо. Обработка ошибок, понятное сообщение вместо белого экрана, журнал действий – чтобы можно было посмотреть, что произошло. Отдельное требование, которое мы предъявляем сами: модуль должен выключаться без последствий для магазина. Расширение, после отключения которого падает корзина, сделано плохо, сколько бы оно ни стоило.

Чужое расширение на сайте работает странно – это тоже ваша задача?

Да, и начинаем мы с замера. Пример с работы: в оптовом магазине белья карту сайта генерировало стороннее расширение, и по двум стандартным адресам, куда первыми идут краулеры и аудит-тулы, оно отдавало либо пустое тело, либо строку о собственном отключении. Рабочая карта лежала на нестандартном адресе и держалась исключительно записью в robots.txt. Внешне сайт выглядел здоровым.

Хочу модулем добавить фильтры в каталог — это всегда к лучшему?

Не всегда и о границе надо сказать сразу. Фильтры помогают дойти до позиции в большом ассортименте, но спроса на товар они не добавляют, а на каталоге в несколько позиций сильнее работает понятная структура категорий. Есть и техническая сторона: фильтры рождают комбинаторное количество адресов, и если не закрыть их каноникалами и robots, вы получите в индексе тысячи почти одинаковых страниц. Это ухудшение, а не улучшение, и закладывать работу с ним нужно в ту же смету.

Модуль может починить поиск по каталогу?

Может, но поможет он только тому покупателю, уже знающему название или артикул. Тому, кто еще выбирает, нужны категории и фильтры – это разные пути к товару. И отдельно: хороший поиск требует чистоплотных данных в карточках. Если названия товаров заполнены спустя рукава, ни один поисковый двигатель этого не исправит, и честнее сначала привести в порядок названия.

Как я увижу, что модуль работает?

С двух сторон. Технический журнал действий модуля: видно, что он делал, когда и с каким результатом. Бизнес – события в аналитике, если она у вас стоит. Здесь нужна оговорка: счетчик сам ничего не улучшает, он только дает возможность увидеть, а блокировщики, режим согласия и ограничения браузеров на cookie делают из GA4 показатель тенденции, а не бухгалтерскую истину. В магазине полива, который мы мерили, аналитики не было вообще — там перед любой доработкой нужно ставить измерения.

Код будет мой?

Да. Выходцы передаются вам вместе с работами, вместе с документацией: что делает, как настраивается, куда смотреть при проблемах. Модуль, который может сопровождать только его автор, это зависимость, а не решение, и продавать такое мы не хотим. Репозиторий остается у вас, поэтому передать работу другому разработчику можно никогда.

Сколько работает?

5–30 рабочих дней. Простое расширение с одной точкой вмешательства примерно неделю вместе с проверкой. Модуль, изменяющий логику расчетов и обменивающийся данными с внешней системой, идет к верхней границе, и большая часть этого времени — проверка сценариев, а не написание кода. Срок называем после разбора задачи и фиксируем вместе с суммой.

Опишите задачу своими словами – даже если формулировка еще сырая.

В ответ – техническое описание, раскладка по точкам вмешательства, срок и сумма. Если задача закрывается готовым расширением или настройкой, вы услышите это первым письмом.

Из измеренных кейсов13 428 страниц товаров и 161 категория - 13 590 адресов в карте сайта, из них только 1 дубликат

Смотреть кейсы
  • Ответ в течение 2 часов
  • Без обязательств
  • Работаем по договору

Прайса на сайте нет намеренно: объём той же работы у двух клиентов отличается в разы, и цифра «от» в этом случае ничего не объясняет. Сначала бесплатный аудит — считаем ваши страницы, дубли и скорость, — потом называем сумму и срок и фиксируем их в договоре.