CMS Catalog - Ecommerce

1784747667640.png1784747748403.png
Добавлена иконка сброса параметров (RotateCcw) в заголовок блока Характеристики:
  • Динамическое отображение: Кнопка сброса параметров появляется в заголовке блока «Характеристики» только когда выбран хотя бы один параметр из характеристик (activeSpecsFiltersCount > 0).
  • Функционал: Нажатие на иконку мгновенно сбрасывает все выбранные фильтры в блоке характеристик.

В модальном окне "Фильтр по характеристикам" , тоже все необходимое реализовано, по сбросу выбранных параметров.

Функционал выбора количества колонок успешно реализован!​

Что было сделано:​

  1. Выбор колонок для десктопа (экран от 640px и выше):
    • Добавлены переключатели 2, 3, 4 и 5 колонок (catalog_cols_desktop).
    • Настройки доступны как прямо в панели управления каталогом, так и в раскрывающемся меню «Настройки».
  2. Выбор колонок для мобильных устройств:
    • На узких экранах автоматически отображается выбор 1 или 2 колонок (catalog_cols_mobile).
  3. Сохранение в браузере (localStorage):
    • Выбор количества колонок как гостем, так и авторизованным пользователем мгновенно сохраняется на устройстве и сохраняется при повторных визитах или обновлении страницы.
  • Выпадающий список выбора колонок:
    • Добавил опцию «Авто (по умолчанию)», которая использует оптимальную адаптивную сетку в зависимости от переключения боковой панели.
    • Оформил аккуратный стильный <select> с плавной фокусной подсветкой и компактными отступами.
    • Уменьшил размер подписи «Колонки:» (text-[9px] sm:text-[10px]).
    • Выбор колонок сохраняется в браузерном хранилище (localStorage).

1784752074887.png

Выполнена интеграция метаданных и функционала продления (Renew) на странице профиля в разделе «Product Listings».​

1784756871313.png

Реализованные изменения:​

  1. Компонент сведений о товаре (ListingItemDetails.tsx):
    • Категория товара: Отображение наименования категории с соответствующим иконка-тегом.
    • Артикул (SKU): Вывод артикула товара (SKU) или отметки N/A.
    • Дата добавления / обновления: Динамический вывод даты создания («Добавлено: [дата]») или даты последнего редактирования («Обновлено: [дата]»).
    • Рейтинг объявления: Расчет и отображение среднего рейтинга на основе проверенных отзывов.
    • Количество отзывов: Отображение суммарного числа отзывов к объявлению.
    • Срок окончания показа: Вывод даты истечения срока размещения с цветовым индицированием статуса («Истекает», «Истёк», «Бессрочно»).
  2. Модальное окно продления объявления (RenewListingModal.tsx):
    • Добавлена интерактивная кнопка «Продлить» (Renew) прямо в блоке срока размещения и в панели действий.
    • Выбор из предустановленных системой вариантов продления: 7 дней, 14 дней, 30 дней, 90 дней и 365 дней (1 год).
    • Предпросмотр текущего срока и мгновенный расчёт нового срока окончания показа.
    • Автоматическая реактивация завершённых/черновиковых объявлений при продлении.
  3. Обновление REST API и серверов:
    • В server/routes/products.ts и public/php_rest_api/controllers/ProductController.php обновлен эндпоинт POST /api/products/:id/renew, обеспечивающий точный расчёт expires_at, сброс флага черновика и обновление updated_at.
  4. Локализация (translations.ts):
    • Зарегистрированы и добавлены фразы для русской и английской локализаций.

Реализовал расширенный функционал стран, городов, координат, приоритетов сортировки и внешних API сервисов для импорта географических данных:​


  • База данных и схема:
    • Таблица стран пополнена эмодзи-флагами (emoji) и порядком сортировки (sort_order).
    • Таблица городов расширена точными географическими координатами (latitude, longitude) и порядком сортировки (sort_order).
    • Обновлён database.sql и скрипты автоматической миграции при старте приложения.
  • Внешние API Сервисы:
    • REST Countries API: Интегрирован эндпоинт /api/locations/external/rest-countries для загрузки реестра стран с официальными кодами ISO и эмодзи-флагами.
    • OpenStreetMap Nominatim & GeoNames: Интегрирован эндпоинт /api/locations/external/import-cities для импорта крупных городов выбранной страны со встроенным геокодингом (широта и долгота).
  • Панель управления (Админка) :
    • Обновлён интерфейс LocationManagement.tsx с удобной навигацией по вкладкам «Страны», «Города» и «Импорт из REST API».
    • Добавлена возможность редактирования флагов эмодзи, порядка сортировки (приоритета), а также кликабельные ссылки координат городов на картах OpenStreetMap.
  • Профиль пользователя:
    • Выбор страны в профиле отображает наглядные эмодзи-флаги рядом с названием.

Реализована поддержка выбора режима и объёма импорта городов для любой выбранной страны с гарантированной защитой от дубликатов:​


  • Переключатель режима импорта в интерфейсе:
    • Все города и населенные пункты (Полный импорт) — опрашивает гео-базы GeoNames и OpenStreetMap Nominatim с расширенным лимитом (до 250–300+ населенных пунктов за раз, включая города, крупные поселки и муниципалитеты).
    • Только топовые / крупные города — загружает выборку ключевых областных центров и мегаполисов.
    • Поисковый запрос — опциональный фильтр для подгрузки конкретных регионов или городов.
  • Интеллектуальное исключение дубликатов: перед вставкой в базу данных сервис сверяет названия городов на русском и английском языках с уже существующими записями для этой страны в MySQL, добавляя только уникальные новые локации.
 
Последнее редактирование:
я бы купил бы такой CMS тыс эдак за 5к руб
Спасибо большое за ваш интерес, за предложение и оценку :rolleyes:
На данный момент проект еще делаю, нужно максимально закрыть все баг репорты.
Пока что лучше примите участие в тестировании проекта. Буду очень благодарен.

Что нового было добавлено и улучшено:​

  1. Пошаговое и плавное увеличение (Zoom):
    • Кнопка «+» (Увеличить) для постепенного масштабирования (100% → 125% → 150% → 200% → 300% → 400% → 600% → 800%).
    • Кнопка «-» (Уменьшить) для пошагового отдаления.
    • Индикатор текущего масштаба в процентах.
  2. Просмотр в 1:1 оригинальном разрешении:
    • Специальная кнопка «1:1 Оригинал» (автоматически рассчитывает реальное пиксельное разрешение снимка и отображает его пиксель-в-пиксель без сжатия).
    • Кнопка «Сбросить масштаб» (вписывает изображение обратно в экран).
  3. Интерактивное управление и перемещение (Pan & Drag):
    • Перетаскивание зажатой мышью / пальцем: при приближении можно перетаскивать картинку в любую сторону.
    • Колесико мыши: скролл вверх приближает, скролл вниз отдаляет.
    • Двойной клик: переключает масштаб между обычным и оригинальным размером.
  4. Удобная галерея и навигация:
    • Нижняя карусель миниатюр для быстрого переключения фото.
    • Кнопки навигации «Вперед» / «Назад» и клавиатурные хоткеи (←, →, +, -, 0, Esc).

1784833193412.png

1784833288569.png



Проблема с кнопкой «Удалить» на странице товара была исправлена.

Причина возникновения проблемы​

В предварительном просмотре приложения, встроенном через iframe, вызовы браузерного Диалога window.confirm() блокируются политиками безопасности браузеров (Chrome/Webkit). Из-за этого window.confirm() мгновенно возвращал false без вывода окна, и запрос на удаление товара на сервер не отправлялся.


Что было сделано для исправления:​

  • Кастомное модальное окно подтверждения:
    • Заменен вызов window.confirm() на встроенный модальный диалог React в MainLayout.tsx.
    • При нажатии на кнопку «Удалить» на странице любого товара открывается интерактивное модальное окно с предупреждением и подтверждением действия («Вы уверены, что хотите удалить товар?»).
  • Надежная обработка запроса на сервере:
    • Обновлен роут DELETE /api/products/:id в server/routes/products.ts, с поддержкой передачи заголовка идентификации пользователя x-user-id.
    • Сервер каскадно удаляет все связанные записи (избранное, сравнения, отзывы, товар из подборок, корзин и историю) и удаляет сам товар из БД.
  • Обновление состояния и навигация:
    • При успешном удалении товара пользователь автоматически перенаправляется на главную страницу каталога (/), обнуляется выбранный товар, обновляются данные с сервера и выводится уведомление: «Товар успешно удален!».

1784835245424.png

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

1. Связи и таблицы, которые автоматически очищаются​

  • Избранное (favorites): удаляются все записи у всех пользователей, которые добавили этот товар в свои «Закладки».
  • Сравнение товаров (comparisons): товар полностью удаляется из панелей сравнения.
  • Отзывы и рейтинги (reviews): удаляются все оценки, текстовые отзывы покупателей и ответы продавцов/администратора к данному товару.
  • Пользовательские коллекции (collection_products): товар удаляется из всех папок и подборок пользователей.
  • Корзина покупателей (cart_items): товар очищается из корзин текущих пользователей и гостей.
  • Значения характеристик (product_custom_values): удаляются значения всех настраиваемых полей и спецификаций данного товара.
  • История изменения цен (product_price_history): очищается график и хронология изменения цен товара.
  • История просмотров (viewing_history): удаляются записи из списков «Недавно просмотренные».
  • Системные уведомления (notifications): очищается привязка товара из оповещений пользователей.
  • Файловая система (/uploads/products/{id}/): с сервера удаляется отдельная папка со всеми загруженными изображениями и медиафайлами товара.
 
Последнее редактирование:
Назад
Сверху