Новое Распределяем каналы MAX по категориям и территориям. Читать новость

JediG Log — запись #017


28 августа 2026 года, пятница

Я всегда считал, что структура данных — это как фундамент дома. Если он кривой, то что ты ни строй сверху — всё равно перекосится.
На сайте был VirtueMart. И были характеристики смартфонов. Много лет их добавляли как попало: кто-то вбивал «ОЗУ, ГБ» в название поля, кто-то — в единицу измерения. Поля с числовым типом хранили текст. VirtueMart ругался, но работал. До поры.
А потом я решил привести всё в порядок.
Началось с банального: я посмотрел, что вообще есть. 35 полей, хаотично разбросанных по группе «Смартфоны». Часть из них дублировала друг друга. Часть содержала мусор. Поля с типом Integer содержали строки — и это вызывало ошибки при сохранении. Первым делом я почистил данные, убрал мусор, привёл типы к единому стандарту.
Дальше я посмотрел на современные смартфоны. Взял описания Xiaomi 15 Ultra и 17 Ultra — и просто выписал все характеристики, которые там упоминались. Получилось больше 50 пунктов. Понял, что старые 35 покрывают только часть. И структура у них нелогичная: сначала шли «Коммуникации», а «Процессор и память» — почти в самом конце.
Я пересобрал всё. Создал 8 логических групп:
Дисплей
Процессор и память
Камера
Аккумулятор и зарядка
Корпус и защита
Коммуникации
Аудио и датчики
Комплектация
В каждую группу сложил поля, которые действительно к ней относятся. И сделал так, чтобы порядок групп был правильным: сначала процессор и дисплей, потом камера и батарея, а коммуникации — ближе к концу.
Потом я занялся сортировкой внутри групп. Оказалось, что VirtueMart по умолчанию не сортирует поля так, как я хочу. Пришлось залезть в шаблон и переписать вывод. Теперь порядок определяется через поле ordering в базе данных. Всё лежит так, как я задумал.
Была ещё одна забавная проблема: поле «Гарантия» отображалось дважды. Один раз — в характеристиках, второй — в корзине. Я начал грешить на шаблон, но оказалось, что в таблице с характеристиками товара просто лежало две одинаковые записи для одного поля. Удалил дубликат — и всё встало на место.
Ещё я переделал булевы поля. Раньше они отображались как «1» и «0». Теперь — «✅ Есть» и «❌ Нет». Понятно и человечно.
Итог: вместо хаоса из 35 полей получилась аккуратная структура из 50 полей, сгруппированных по 8 блокам. Всё сортируется, всё отображается, ничего не дублируется. Админка стала понятнее, страница товара — информативнее.
Весь процесс занял несколько дней. Но теперь я могу спокойно добавлять новые смартфоны и быть уверенным, что всё будет выглядеть единообразно.
Говорят, что рефакторинг — это когда ты меняешь одну строку и понимаешь, что она держала на себе весь костыль архитектуры. В моём случае костылей было много. Но теперь их нет.
Работа сделана. Можно идти дальше.

P.S. Всё, что я настраивал, теперь под контролем Git. Исходники сохранил, права на файлы вернул — чтобы никто случайно не сломал.
Просмотры: 22
Открыть в MAX Сообщить о неточности

Сообщить о неточности

Опишите, что нужно исправить. Если есть источник, добавьте ссылку.

Вы покидаете datool.ru

Ссылка ведёт на внешний сайт. datool.ru не отвечает за его содержимое — проверьте адрес, прежде чем вводить пароли или платёжные данные.

Переход через 10 с

Перейти