Заглянем за кулисы проекта: как таблицы, ключи, PHP и AJAX работают вместе, создавая устойчивую архитектуру данных.
Невидимая часть, без которой невозможна надёжность
Представьте себе айсберг. На поверхности — привычный интерфейс каталога, кнопка «поиск», фильтрация по категориям. Но под водой — тысячи строк кода, логика взаимодействия таблиц, сессии, PHP-обработчики, AJAX-запросы и система шаблонов Smarty. Это тот самый «невидимый фундамент», который делает проект устойчивым, надёжным и расширяемым.
В рамках проекта IPD.by по медицинской технике была реализована глубоко проработанная структура хранения и работы с категориями, данными каталога и пользовательскими запросами. Простая задача — «добавить новые категории» — превратилась в инженерное приключение, в котором сошлись архитектура баз данных, автоматизация и синхронизация данных.
Как всё устроено: таблицы, ключи, логика

Таблица catalog2025
Содержит более 5800 записей. Среди них — поле category, которое используется для фильтрации и привязки товаров к нужной группе. Каждое значение в этом поле может быть уникальным, и именно с них начинается построение структуры категорий.
Таблица categories
Хранит уже нормализованные категории. Важный момент — наличие внешнего ключа group_id, который ссылается на таблицу main_categories. Это значит, что любые добавления в categories невозможны без соответствующего ID в главной категории.
Автоматизация добавления категорий
Вместо ручного копирования, была реализована автоматическая проверка через SQL:
INSERT INTO categories (group_id, name, url, unit, date_add, date_edit, status)
SELECT
0 AS group_id,
c.category AS name,
LOWER(REPLACE(REPLACE(c.category, ' ', '-'), ',', '')) AS url,
'' AS unit,
NOW(), NOW(), 1
FROM catalog2025 c
LEFT JOIN categories cat ON c.category = cat.name
WHERE cat.id IS NULL AND c.category != ''
GROUP BY c.category;
Но и тут не всё просто: внешний ключ не позволил завершить запрос без предварительного добавления group_id в main_categories.
Сессии: как временное хранилище данных

Для ускорения фильтрации и сохранения состояния выбора пользователя, данные сохраняются в $_SESSION['catalog']. Это позволяет не запрашивать каждый раз базу данных при переключении фильтров.
Smarty AJAX PHP
Когда пользователь ищет категории, AJAX-запрос отправляется в PHP-обработчик, который обращается к сессии и базе, возвращая результат в шаблон Smarty. Такой подход позволяет сократить нагрузку на сервер, ускорить взаимодействие и обеспечить чистую логику разделения данных и отображения.
Структура проекта в фазах
- Месяц 1 — подготовка: аналитика структуры, создание таблиц, проектирование связей.
- Месяц 2 — разработка: написание скриптов, связка с фронтендом, отладка AJAX и Smarty.
- Месяц 3 — тестирование и завершение: интеграции, пограничные кейсы, защита от дубликатов.
Вывод: надёжность рождается из невидимого
Те, кто сталкивался с digital-проектами, знают: чем незаметнее система, тем лучше она работает. Но за простотой — сложность. Эта новость — дань уважения инженерному труду, вложенному в «невидимые» базы данных, скрипты и архитектуру проекта.
Следующим шагом станет создание визуального конструктора фильтрации и более гибкая модель категорий, объединяющая связанные группы в подкатегории.
Хотите узнать больше о внутренней кухне digital-проектов или автоматизировать структуру данных в своём бизнесе? Откройте следующий материал — и погрузитесь глубже.