Категории: дерево любой глубины, умные правила, сопутствующие
Категория в AIERP — это древовидная структура любой глубины. У каждой категории своё имя, короткое имя, адрес для интернет-магазина (уникальный), описание, набор SEO-полей (заголовок, описание, ключевые слова), три типа изображений (большая картинка для страницы категории, маленькая иконка для бокового меню, бейдж для специальных блоков), ответственный менеджер, порядок отображения, целевая оборачиваемость в днях, флаг видимости. Дерево любой вложенности — без жёсткого лимита уровней. На странице категории показываются товары всей ветки сразу, включая все подкатегории. Умные категории сами собирают подходящие товары по правилам — указали «холодильники Bosch объёмом от 500 литров» и любая новая модель с такими характеристиками автоматически попадает в категорию. Связи «к этому подходит» описывают сопутствующие: к холодильникам — магниты и фильтры, к телефонам — чехлы и стёкла. Копии деревьев под маркетплейсы и B2B-каналы — один товар физически в одной категории, а логически живёт в нескольких деревьях.
Что получает бизнес от модуля
Дерево любой глубины
Категории вложены друг в друга без жёсткого лимита уровней. Может быть три уровня, может быть десять. На странице категории показываются товары всей ветки целиком — открыли «Бытовую технику», видите и холодильники, и стиральные машины, и мелкую технику, со всеми подкатегориями. Дерево обходится защищённо от случайных циклов.
Умные категории
Категория наполняется сама по правилам. Указали «холодильники Bosch объёмом от 500 литров» — все товары, попадающие под критерии, автоматически в этой категории. Новый холодильник 580 литров завели — он сразу там. Не нужно вручную привязывать тысячи позиций. Один товар может попадать в несколько умных категорий через разные правила.
Сопутствующие категории
Связи «к этой категории сопутствуют те» — для блока «с этим часто покупают», для подсказок кассиру «не забудьте предложить», для блока в карточке заказа. Тип связи различает аксессуары, расходники, сервисные услуги, запчасти. К холодильникам сопутствуют магниты (аксессуар), фильтры воды (расходник), доставка крупногабарита (услуга).
Копии дерева
Одно дерево для сайта, копия — для маркетплейса (адаптированная под его категории), ещё копия — для B2B-каталога с упрощённой логикой. Каждая категория-копия помнит свой оригинал. Один и тот же товар физически лежит в одной категории, а логически живёт в нескольких деревьях — без дублирования.
Менеджер на категории
У каждой категории — свой ответственный менеджер. Он видит её в своих фильтрах, получает уведомления о низких остатках в ветке, KPI считается по выручке и марже его веток. Через фильтр «мои категории» один сотрудник работает только со своими направлениями. Категории «без ответственного» подсвечены — для перераспределения.
Счётчик товаров всей ветки
На странице категории показывается «1 240 товаров» — это включает все подкатегории. Счётчик считается по всей ветке и кэшируется, обновляется автоматически при изменениях. Менеджер сразу видит реальный масштаб ветки, не открывая каждую подкатегорию отдельно.
Три типа изображений
У категории три картинки разного назначения. Большая — для самой страницы категории. Маленькая иконка — для бокового меню каталога. Бейдж — для блоков «специальные категории», «акции», «новинки». Это даёт дизайнеру разные ресурсы под разные места без масштабирования одной картинки.
Переименование пачки
Переставить порядок одной категории в дереве — одна операция. Перенести всю ветку к другому родителю или другому менеджеру — тоже одна операция. Применить изменения к пачке категорий (например, сделать неактивными на зиму, поменять менеджера, обновить SEO-поля по шаблону) — за один заход без перебора по одной.
Кэш и мягкое удаление
Списки категорий и остатков по веткам кэшируются — каталог открывается мгновенно даже на больших деревьях. Удалённая категория мягко скрывается, но остаётся в базе — восстановление возможно. Товары удалённой категории не теряются: у них просто исчезает категория, сами карточки остаются.
Что входит в Категории
- 01
Поля категории
Имя, короткое имя, адрес для интернет-магазина (уникальный), описание, SEO-заголовок, SEO-описание, ключевые слова, три типа изображений (большая, маленькая иконка, бейдж), флаг «умная категория» (наполняется по правилам), родитель (для древовидной структуры), оригинал (для категории-копии), ответственный менеджер, порядок отображения, флаг видимости, целевая оборачиваемость в днях, даты создания и изменения, мягкое удаление. Семь индексов на ключевых полях — фильтры и сортировка работают мгновенно даже на больших деревьях.
- 02
Обход дерева вглубь
Главная операция с деревом — собрать «всю ветку» от выбранной категории и ниже. Это нужно, чтобы на странице категории показать товары всей ветки сразу: открыли «Бытовую технику» — видите и холодильники, и стиральные машины, и мелкую технику со всеми подкатегориями. Обход построен пошагово, без рекурсии, поэтому работает на деревьях любой глубины без рисков. Защита от случайных циклов: если в базе вдруг появится петля (дочерняя категория указана родителем своего родителя), обход не зациклится.
- 03
Счётчик правил ценообразования
На каждой категории видно, сколько правил ценообразования сейчас на неё распространяется. Это полезно при разборе «почему здесь такая цена»: открываете категорию, видите «к ней применяется 4 правила», переходите к ним. Счётчик считается мгновенно, без перебора всех правил подряд.
- 04
10 фильтров для категорий
Идентификатор, имя, адрес, родитель (с фильтром «корневые»), ответственный менеджер (с фильтром «без ответственного»), активность, флаг «умная категория», поиск по тексту (по имени, адресу, описанию, имени менеджера), флаг «есть родитель» (для разделения корневых и подкатегорий), максимальная глубина. Поиск с релевантностью: точное совпадение в названии — наверх, совпадение в начале — в середину, остальное — внизу.
- 05
Счётчик товаров по всей ветке
Для каждой категории считается общее количество товаров во всей ветке (включая все подкатегории). На странице категории сразу видно «1 240 товаров» — это полный объём ветки. Счётчик кэшируется и обновляется автоматически при изменениях каталога. Без него менеджеру пришлось бы вручную складывать товары всех подкатегорий, чтобы оценить размер направления.
- 06
Остатки по веткам каталога
По каждой ветке каталога — сводка остатков. Можно фильтровать по организации, складу, статусу товара. Результат: «в категории Холодильники сейчас на остатке 124 единицы». Это данные для дашборда закупок и принятия решений «где провисает категория, надо подвезти». Результат кэшируется отдельно для каждой комбинации фильтров.
- 07
Ленивая подгрузка детей
Когда дерево большое (тысячи категорий), грузить всё разом нецелесообразно. Поэтому интерфейс грузит только корневые категории, а детей подгружает по запросу — раскрыли узел, подгрузились его прямые дети. Можно заранее указать, на сколько уровней вглубь подгрузить (один, два, три), чтобы открытие узла шло мгновенно.
- 08
Перенос товаров пачкой
Все товары одной категории переносятся в другую категорию одной операцией. Сценарий: «вся ветка переходит к другому менеджеру», «сливаем дубликаты веток после реорганизации каталога», «переименовали ветку и переносим товары». Возвращается количество перемещённых товаров. После операции кэш категорий и товаров автоматически сбрасывается.
- 09
Переставить категорию в дереве
Переставить категорию в новую позицию в списке (выше или ниже соседей) или перевесить её к другому родителю — одна операция. Все нужные пересчёты порядка происходят атомарно. Перетаскивание категории мышкой в админке работает именно через эту операцию: отпустили — сразу записалось.
- 10
Три типа изображений
У категории три картинки разных назначений. Большая — для главной страницы категории и для карточки в списках. Маленькая иконка — для бокового меню каталога. Бейдж — для специальных блоков на сайте («акции», «новинки», «специальные категории»). Загрузка с защитой от перегрузки сервера. При замене старая картинка автоматически удаляется, чтобы хранилище не разрасталось.
- 11
Удаление картинки
Картинку можно удалить отдельной операцией: файл уходит из хранилища, поле в категории очищается. Без этого пришлось бы загружать пустую картинку (что нелогично) или править поле напрямую (что оставило бы файл-сирота на диске).
- 12
Массовые операции с категориями
Выделили несколько категорий, выбрали действие — сделать активными, сделать неактивными, поменять менеджера, перевесить к другому родителю, обновить SEO-поля по шаблону — система применит ко всем сразу. Возвращается количество затронутых записей. После — автоматический сброс кэша.
- 13
Умные категории по правилам
Категория наполняется сама. Правило задаёт сочетание: тип товара, характеристика, сравнение (равно, больше, меньше, входит в список и так далее), значение. Например, «холодильники с объёмом 500 литров и больше попадают в категорию „Большие холодильники"». Один товар может попасть в несколько умных категорий через разные правила. Один и тот же справочник характеристик используется в правилах разных категорий.
- 14
Связи сопутствующих категорий
Категория «Холодильники» связана с категориями «Магниты» (тип связи — аксессуар), «Фильтры воды» (расходник), «Доставка крупногабарита» (услуга). Один интерфейс управляет всеми связями. Эти связи используются для блока «с этим часто покупают» на сайте, подсказки кассиру в карточке заказа, рекомендаций при оформлении.
- 15
Разделение разрезов для категорий и складов
У типа товара (например, «Тостеры») может быть одна категория для отчётов и каталога («Мелкая бытовая техника») и другая для физического распределения на складе («Кухонная утварь»). Разделение разрезов без дублирования дерева — отчёты строятся по одному разрезу, складская логистика — по другому.
- 16
Целевая оборачиваемость и менеджер
У каждой категории задаётся целевая оборачиваемость в днях (для бытовой техники — 60, для электроники — 30, для канцелярии — 90). Аналитика сверяет фактическую оборачиваемость с этим значением и подсвечивает категории, выпадающие из норматива. Ответственный менеджер видит её в своих фильтрах, получает уведомления, KPI считается по выручке и марже ветки.
- 17
Умная против просто активной
Два независимых флага. «Умная» — категория наполняется автоматически по правилам, ручная привязка не нужна. «Активная» — категория видна в каталоге или скрыта (для B2B-веток, временных, технических категорий). Можно иметь активную обычную категорию и неактивную умную, и наоборот.
- 18
Поиск с правильной релевантностью
Поиск по категориям ищет в имени, коротком имени, адресе, описании, плюс по имени ответственного менеджера. Сортировка по релевантности: точное совпадение в имени — на самый верх, имя начинается на запрос — в середину, остальное — внизу. Это даёт правильный порядок результатов без сложной настройки.
- 19
Раздельные права
Просмотр категорий — у всех, кому каталог нужен в работе (включая менеджеров продаж). Создание и редактирование — у тех, кто отвечает за справочник каталога. Удаление — у руководителей. Отдельные права для категорий контрагентов и финансовых категорий — это другие справочники со своими наборами прав.
Как это выглядит в системе
Частые вопросы
Сколько уровней вложенности поддерживается?
Не ограничено. Дерево любой глубины. Обход построен пошагово, без рекурсии, поэтому работает даже на очень глубоких деревьях. Защита от случайных циклов встроена: если в базе вдруг появится петля (категория указана родителем своего родителя), обход не зациклится. На практике редко встречаются деревья глубже 6–8 уровней — этого хватает для любого каталога.
Что значит «вся ветка категории»?
Это сама категория и все её потомки рекурсивно. На странице категории показываются товары всей ветки: открыли «Бытовую технику» — видите и холодильники, и стиральные машины, и мелкую технику со всеми их подкатегориями. Это удобно для покупателя — он не вынужден лазать по подкатегориям, чтобы посмотреть весь ассортимент направления.
Как работает счётчик товаров по всей ветке?
Для каждой категории считается общее количество товаров во всей ветке, включая все подкатегории. На странице категории сразу видно «1 240 товаров» — это полный объём ветки. Счётчик кэшируется и обновляется автоматически при добавлении или удалении товаров. Без него менеджеру пришлось бы вручную складывать товары всех подкатегорий, чтобы оценить размер направления.
Что такое умная категория?
Категория, которая наполняется автоматически по правилам. Правило задаёт сочетание: тип товара, характеристика, сравнение, значение. Пример: «холодильники с объёмом 500 литров и больше попадают в категорию „Большие холодильники"». Любой холодильник с подходящим объёмом автоматически в этой категории, без ручной привязки. Новый холодильник 580 литров завели — он сразу там.
Может ли товар быть в нескольких категориях?
Прямая привязка товара — одна категория. Но через умные категории товар попадает во все, чьим правилам он удовлетворяет. Плюс на странице категории показываются товары всей ветки целиком, поэтому товар категории «Холодильники» автоматически виден и на странице «Бытовая техника». Итог: товар физически в одной категории, логически — во многих.
Что такое копия дерева?
Используется, когда нужно несколько деревьев каталога — одно для основного сайта, копия для маркетплейса (адаптированная под его категории), ещё копия для B2B-каталога с упрощённой логикой. Каждая категория-копия помнит свой оригинал. Один и тот же товар физически в одной категории, логически живёт в нескольких деревьях. Полезно для региональных, маркетплейсовых и B2B-вариантов одного каталога.
Сколько типов изображений у категории?
Три. Большая картинка — для главной страницы категории и для карточки в списках. Маленькая иконка — для бокового меню каталога (там много категорий, нужны компактные значки). Бейдж — для специальных блоков на сайте («акции», «новинки», «специальные категории»). Это даёт дизайнеру разные ресурсы под разные места без масштабирования одной картинки.
Как загружаются картинки категорий?
Через стандартную форму. При загрузке файл сохраняется в защищённое хранилище, путь записывается в карточку категории. При замене старый файл автоматически удаляется — хранилище не разрастается «сиротами». Есть защита от перегрузки сервера — массовая загрузка не положит систему.
Что такое переставить категорию?
Переставить категорию в новую позицию в списке (выше или ниже соседей) или перевесить её к другому родителю — одна операция. Все нужные пересчёты порядка происходят атомарно. Перетаскивание категории мышкой в админке работает именно так: отпустили — сразу записалось, без отдельной кнопки «сохранить».
Что делает перенос товаров?
Все товары одной категории переносятся в другую категорию одной операцией. Сценарий: «вся ветка переходит к другому менеджеру», «сливаем дубликаты веток после реорганизации», «переименовали ветку и переносим товары». Возвращается количество перемещённых. После операции кэш категорий и товаров автоматически сбрасывается.
Что в массовом обновлении?
Выделили несколько категорий, выбрали действие — сделать активными или неактивными, поменять менеджера, перевесить к другому родителю, обновить SEO-поля по шаблону — система применит ко всем сразу. Возвращается количество затронутых записей. Полезно для сезонных переключений целой ветки или передачи нескольких категорий новому менеджеру.
Как работает поиск?
Поиск ищет в имени, коротком имени, адресе, описании, плюс по имени ответственного менеджера. Сортировка по релевантности: точное совпадение в имени — на самый верх, имя начинается на запрос — в середину, остальное — внизу. Для категорий не нужен полнотекстовый поиск с морфологией: объём небольшой (десятки или сотни записей против миллионов товаров), классический поиск работает мгновенно.
Что такое фильтр «есть родитель»?
Логический фильтр для разделения корневых и подкатегорий. Значение «да» — показать только подкатегории, «нет» — только корневые. Используется в интерфейсе для «дерева верхнего уровня» (рисуем только корни) и для «детей конкретной ветки» (передаём родителя отдельно).
Что хранит целевая оборачиваемость?
Норматив оборачиваемости категории в днях. Если у бытовой техники норма 60 дней, у электроники 30, у канцелярии 90 — это вводится в этом поле. Аналитика сверяет фактическую оборачиваемость с этим значением и подсвечивает категории, выпадающие из норматива. Менеджер сразу видит, где направление работает медленнее, чем ожидалось.
Зачем менеджер на категории?
Менеджер отвечает за развитие ветки. Видит её в своих фильтрах («мои категории»), получает уведомления о низких остатках в ветке, KPI считается по выручке и марже его веток. Через фильтр «без ответственного» руководитель видит категории, за которые никто не отвечает — для перераспределения.
Что такое сопутствующие категории?
Связи «эта категория связана с той по такому-то типу». К «Холодильникам» — «Магниты» (тип связи — аксессуар), «Фильтры воды» (расходник), «Доставка крупногабарита» (услуга). На сайте — блок «с этим часто покупают», в карточке заказа — подсказка «не забудьте предложить», в мобильном приложении кассира — push при добавлении основного товара.
Чем сопутствующие отличаются от комплектов?
Комплект — это «состав» товара (например, набор «Стол + 2 стула» физически содержит стол и стулья как компоненты). При продаже комплекта компоненты списываются с остатков. Сопутствующие категории — это связь категорий без жёсткого товарного состава: «к холодильникам обычно берут фильтры», но какие конкретно — не указано. Подсказки на сайте и в карточке заказа строятся из обоих механизмов.
Можно ли держать две иерархии каталога?
Да, через копии деревьев. Основное дерево для сайта, копия для маркетплейса, ещё копия для B2B. На сайте показывается одно дерево, на маркетплейсе — другое, B2B-клиент видит третье. Один товар физически в одной категории, но логически через копии присутствует в нескольких деревьях. Контент-команда работает с одним источником истины, изменения отражаются во всех каналах.
Зачем разделять категории для отчётов и складского распределения?
У типа товара может быть одна категория для отчётов и каталога и другая для физического распределения на складе. Реальный пример: тостеры в отчётах относятся к «Мелкой бытовой технике», но на складе хранятся в зоне «Кухонная утварь». Это разделение разрезов без дублирования дерева — отчёты строятся по одному разрезу, складская логистика — по другому.
Как организован кэш?
Списки категорий, прямых детей, рекурсивных счётчиков товаров и остатков по веткам кэшируются — каталог открывается мгновенно даже на больших деревьях. При изменении категории кэш автоматически сбрасывается, чтобы свежие данные сразу попали к пользователям. Остатки по веткам кэшируются с двойным учётом — инвалидируются и при изменении категории, и при изменении остатков на складе.
Удаляются ли категории физически?
Нет. Удалённая категория мягко скрыта, но остаётся в базе — восстановление возможно. У товаров такой категории просто исчезает категория, сами карточки остаются — товар не теряется. Подкатегории удаляются вместе с родителем, но тоже мягко: целое дерево можно вернуть, если случайно убрали.
Что такое счётчик правил ценообразования?
На каждой категории видно, сколько правил ценообразования сейчас на неё распространяется. Это полезно при разборе «почему здесь такая цена»: открываете категорию, видите «к ней применяется 4 правила», переходите к ним по ссылке. Счётчик считается мгновенно, без перебора всех правил подряд.
Какие права на категории?
Просмотр категорий — у всех, кому каталог нужен в работе (включая менеджеров продаж). Создание и редактирование — у тех, кто отвечает за справочник каталога. Удаление — у руководителей. Отдельные права для категорий контрагентов и финансовых категорий — это другие справочники со своими наборами прав, чтобы случайно не пересекались.
Что меняется на реальной сети
- Было
- Каталог в старой системе был плоским: 18 000 товаров — 60 категорий первого уровня. Найти что-то на сайте было нереально, фильтры по характеристикам работали так себе, менеджеры закидывали новые товары в случайные категории. Аналитика по веткам не работала.
- Сделали
- Перевели на дерево категорий. Сделали шесть уровней: «Бытовая техника» → «Холодильники» → «Большие (от 500 литров)» / «Двухкамерные» / «Side-by-Side». На странице категории показываются товары всей ветки. Для специфичных подкатегорий (например, «Большие холодильники» по объёму) использовали умные правила: тип = холодильники, характеристика = объём, сравнение = больше или равно, значение = 500.
- Стало
- Клиенты находят товар на три клика быстрее. Конверсия из каталога в карточку выросла на 28%. Менеджеры завели правила, новые товары сами ложатся в нужные ветки при загрузке. Умные категории работают в реальном времени: добавили новый холодильник 580 литров — автоматически попал в «Большие».
- Было
- Дерево категорий было удобно для сайта, но не подходило под Wildberries (нужны их категории) и под B2B-каталог (другая логика разделения). Раньше дублировали товары через копирование — один товар три-четыре раза в базе. При обновлении приходилось править везде.
- Сделали
- Подключили копии деревьев. Основное дерево — для сайта. Создали категории-копии под маркетплейсы и B2B с привязкой к оригиналам. Логически разные деревья, но товар физически один. Связи сопутствующих категорий тоже наследуются (или переопределяются на копии при необходимости).
- Стало
- Один товар — одна запись. Дерево на маркетплейсе адаптировано под его требования. На сайте — родное. В B2B — упрощённое. Обновление цены и описания идёт в одном месте, отображается во всех каналах. Контент-команда сократилась с четырёх человек до одного.
- Было
- Три менеджера развивали разные направления (электроинструмент, ручной, расходники), но в системе не было «принадлежности» категории к менеджеру. Каждый делал что мог, дублировались закупки, KPI не считалось по ветке.
- Сделали
- Назначили ответственного менеджера каждой корневой категории. Фильтр «мои категории» даёт менеджеру список его веток, фильтр «без ответственного» — категории, за которые никто не отвечает (для перераспределения). Аналитика по веткам считается с разрезом по менеджеру. KPI: выручка, маржа, оборачиваемость ветки против нормы.
- Стало
- Каждый менеджер видит только свои ветки. Стало ясно, кто отвечает за низкие остатки в «Шуруповёртах» и за зависшие розетки в «Расходниках». KPI стало предметным — больше не «всё общее». Дубли закупок ушли — каждый менеджер знает свою территорию.
- Было
- Подсказки сопутствующих товаров не работали. К телефонам никто не предлагал чехлы и стёкла. К ноутбукам — мышки и сумки. Менеджер должен был помнить вручную, к чему что предложить. Конверсия в дополнительные продажи была низкой.
- Сделали
- Подключили связи сопутствующих категорий. Для каждой основной категории завели аксессуарные связи с типом: к «Телефонам» — «Чехлы» (аксессуар), «Защитные стёкла» (аксессуар), «Кабели» (расходник), «Установка стекла» (услуга). На сайте появился блок «с этим часто покупают», в карточке заказа — подсказка «не забудьте добавить». Кассир на кассе видит подсказку.
- Стало
- Конверсия в дополнительные продажи выросла в 2,3 раза. Средний чек — плюс 18%. Менеджеры не помнят сами — система помнит за них. Бренд-менеджеры правят связи централизованно, изменения подхватываются всеми каналами одновременно.
- Было
- Категория «Постельное бельё» имела заголовок «Постельное бельё», SEO-заголовок тоже «Постельное бельё», описание пустое — на сайте отображалось одинаково в шапке и в SEO-метатеге. SEO-аудит давал минимальные оценки. Контент-менеджер заполнял SEO раз в год, к моменту окончания цикла структура устаревала.
- Сделали
- Подключили отдельные SEO-поля прямо на категории: SEO-заголовок, SEO-описание, ключевые слова. Контент-менеджер заполняет три поля в карточке категории. Через массовое обновление можно пачкой пройти по веткам и расставить SEO-шаблоны.
- Стало
- SEO-аудит вырос с 38 до 84. Органический трафик плюс 47% за полгода. Контент-обновления делаются точечно через массовые операции — за день можно проработать целую ветку. На странице категории клиент видит заголовок «Постельное бельё», поисковик — длинный SEO-заголовок с регионом и предложением.
- Было
- Категория «Газонокосилки» зимой нерабочая. Раньше менеджер не выключал её — занимала место в меню, ловила трафик из поисковиков на пустую страницу. Также были «технические» категории (например, «Возвраты со складов»), которые не должны были светиться на сайте, но иногда «протекали».
- Сделали
- Подключили флаг видимости. Сезонная категория зимой переводится в неактивные — на сайте скрыта, данные остаются. Технические и B2B-категории всегда неактивны — никогда не светятся. У витрины — жёсткий фильтр по флагу, у админки — переключатель «показать неактивные».
- Стало
- Зимой не «течёт» трафик на «Газонокосилки». Весной — один клик, и категория снова работает с накопленным SEO. B2B-каталог окончательно отделён от розничного — кросс-доступа нет. Скрытые технические категории не светятся клиенту.
Как модуль помогает розничной сети
Дерево категорий через родителя и через копии
Категория в AIERP — это запись со ссылкой на родительскую категорию (для древовидной структуры) и опциональной ссылкой на оригинал (для категории-копии). Первая связь даёт обычную иерархию «потомок → родитель». Вторая — особую «копия → оригинал». Это позволяет иметь разные деревья для разных каналов продаж с одним источником истины.
Базовые поля категории: имя, короткое имя, адрес для интернет-магазина (уникальный), описание, SEO-заголовок, SEO-описание, ключевые слова, три типа изображений, флаг «умная категория» (наполняется по правилам), ответственный менеджер, порядок отображения, флаг видимости, целевая оборачиваемость в днях, даты создания и изменения, мягкое удаление. Семь индексов на ключевых полях обеспечивают мгновенные фильтры и сортировку даже на больших деревьях.
Связи категории: родительская категория, дочерние категории, оригинал и копии, ответственный менеджер, типы товаров для отчётов и для складского распределения (раздельно), связи сопутствующих категорий, товары категории. Эти связи дают полный граф «что внутри», «что вокруг», «кто отвечает».
Обход дерева вглубь без рекурсии
Главная операция с деревом — собрать «всю ветку» от выбранной категории и ниже. Это нужно для страницы категории (показать товары всей ветки), для фильтров и счётчиков, для аналитики. Наивная реализация через рекурсию — это много запросов по числу уровней и риск переполнения стека на глубоких деревьях.
AIERP реализует это иначе — пошагово через расширяющийся фронт. На каждом шаге система берёт всех прямых детей текущего «слоя» одним запросом, добавляет в общий список, делает их новым «слоем» и повторяет, пока есть кого добавлять. Защита от случайных циклов: если в базе появится петля (категория указана родителем своего родителя), обход не зациклится — система отслеживает уже посещённых.
Это обход в ширину с управляемым фронтом — на каждом уровне один запрос, даже если на уровне сотни категорий. Работает на деревьях любой глубины без рисков. На практике даже на очень больших каталогах сбор всей ветки занимает миллисекунды.
Использование на витрине: получили категорию, собрали всю ветку, передали в фильтр товаров — получили все товары всей ветки одним запросом. Никакого ленивого «загрузим детей, потом для каждого ребёнка ещё детей».
Кэш, счётчики, картинки
Все главные операции с категориями кэшируются: списки, прямые дети, рекурсивные счётчики товаров, остатки по веткам. Это даёт мгновенный отклик каталога даже на больших деревьях и под высокой нагрузкой. При изменении категории кэш автоматически сбрасывается, чтобы свежие данные сразу попали к пользователям.
Счётчик товаров по всей ветке считается отдельно и хранится в кэше. На странице категории сразу видно «1 240 товаров» — это полный объём ветки, включая все подкатегории. Без кэша на каждое открытие категории пришлось бы пересчитывать всё дерево заново.
Остатки по веткам каталога — отдельная операция с поддержкой фильтров (организация, склад, статус товара). Результат: «в категории Холодильники сейчас на остатке 124 единицы». Кэш с двойным учётом — сбрасывается и при изменении категории, и при изменении остатков на складе. Это данные для дашборда закупок и принятия решений «где провисает категория».
Ленивая подгрузка детей: интерфейс грузит только корневые категории, дети подгружаются по запросу при раскрытии узла. Можно заранее указать глубину подгрузки (один, два, три уровня), чтобы открытие узла шло мгновенно. На больших деревьях с тысячами категорий это критично для отзывчивости.
Три типа изображений: большая, иконка, бейдж
У категории три типа картинок с разными назначениями. Большая — для главной страницы категории и для карточки в списках. Маленькая иконка — для бокового меню каталога (там много категорий, нужны компактные значки). Бейдж — для специальных блоков на сайте («акции», «новинки», «специальные категории»). Это даёт дизайнеру разные ресурсы под разные места без масштабирования одной картинки.
Загрузка через стандартную форму. При загрузке файл сохраняется в защищённое хранилище, путь записывается в карточку категории. Защита от перегрузки сервера встроена — массовая загрузка не положит систему. При замене старая картинка автоматически удаляется, чтобы хранилище не разрасталось «сиротами».
Удаление картинки — отдельная операция. Файл уходит из хранилища, поле в категории очищается. Без этого пришлось бы загружать пустую картинку (что нелогично) или править поле напрямую (что оставило бы файл-сирота на диске).
Умные категории: правила автонаполнения
Прямая привязка товара к категории — это «жёсткая» связь, которую менеджер ставит вручную. Для глубокого дерева это утомительно: «Холодильник Bosch на 580 литров» нужно вручную положить и в «Холодильники», и в «Большие (от 500 литров)», и в «Холодильники Bosch», и в «Холодильники до 100 000 ₽». Каждое изменение цены, объёма или бренда — перекладывание категорий.
Умные категории решают это правилами. Правило задаёт сочетание: тип товара, характеристика, сравнение (равно, не равно, больше, меньше, входит в список и так далее), значение. Например: «Большие холодильники — тип = холодильники И характеристика „объём" больше или равно 500». Товар, удовлетворяющий правилу, попадает в категорию автоматически.
Один товар может попасть в несколько умных категорий через несколько правил. Одна и та же характеристика может использоваться в правилах разных категорий. Изменилась характеристика товара (например, поправили объём) — переоценка происходит автоматически.
Полный набор операций над правилами доступен в админке. Флаг «умная» на категории даёт фильтр в интерфейсе, чтобы не путать с обычными категориями, наполняемыми вручную.
Связи сопутствующих категорий
Подсказки сопутствующих товаров — критичная механика розницы и интернет-магазина. К телефонам предлагают чехлы. К холодильникам — фильтры воды. К ноутбукам — мышки и сумки. Запоминать связи вручную невозможно — на большом каталоге это десятки тысяч пар. AIERP моделирует это через связи сопутствующих категорий.
Каждая связь — пара категорий с типом: основная категория, сопутствующая, характер связи (аксессуар, расходник, услуга, запчасть, дополнение). К «Телефонам» — «Чехлы» (аксессуар), «Защитные стёкла» (аксессуар), «Кабели» (расходник), «Установка стекла» (услуга). К «Стиральным машинам» — «Соль для воды» (расходник), «Доставка крупногабарита» (услуга).
Использование в интерфейсе: на сайте — блок «с этим часто покупают», подгружается одной выборкой связей для категории текущего товара. В карточке заказа — подсказка кассиру «не забудьте предложить». В мобильном приложении кассира — уведомление при добавлении основного товара. Полный набор операций над связями доступен в админке.
Разница с комплектами товаров. Комплект — это «состав» товара: набор «Стол + 2 стула» физически содержит компоненты, при продаже их списывает с остатков. Связи сопутствующих категорий — это «связь категорий» без жёстких товарных привязок: «к холодильникам обычно берут фильтры», а какие конкретно — решается на уровне товаров в обеих категориях. Подсказки строятся из обоих механизмов: комплекты показывают «состав», связи — «что вместе».
Перенос, реорганизация, массовые операции
Перенос товаров между категориями — отдельная операция. Все товары одной категории переносятся в другую категорию одной командой. Возвращается количество перемещённых. После операции автоматически сбрасывается кэш и категорий, и товаров. Бизнес-сценарий: «вся ветка переходит к другому менеджеру», «сливаем дубликаты веток после реорганизации», «переименовали ветку и переносим».
Переставить категорию в дереве — переместить её в новую позицию в списке (выше или ниже соседей) или перевесить к другому родителю. Одна операция, все нужные пересчёты порядка происходят атомарно. Перетаскивание категории мышкой в админке работает именно так: отпустили — сразу записалось, без отдельной кнопки «сохранить».
Массовое обновление: выделили несколько категорий, выбрали действие — сделать активными, сделать неактивными, поменять менеджера, перевесить к другому родителю, обновить SEO-поля по шаблону — система применит ко всем сразу. Возвращается количество затронутых записей. Сценарий: «сделать всю ветку неактивной на зиму», «передать пять категорий новому менеджеру», «применить SEO-шаблон к десяти подкатегориям».
Поиск и фильтры. Десять параметров: идентификатор, имя, адрес, родитель (с фильтром «корневые»), ответственный менеджер (с фильтром «без ответственного»), активность, флаг «умная», поиск по тексту, флаг «есть родитель» (для разделения корневых и подкатегорий), максимальная глубина. Поиск с правильной релевантностью: точное совпадение в имени — на самый верх, имя начинается на запрос — в середину, остальное — внизу.
Готовы автоматизировать?
Покажем модуль на ваших данных и подключим за 1–2 недели.
