[СДЕЛАЙ САМ] Модификации товаров с помощью связей MiniShop2
Приветствую, предлагаю вашему вниманию вариант реализации модификаций товара с помощью встроенного в MiniShop механизма связей.
Первое, что нужно сделать это создать связь. Для этого идём в верхнее меню->Пакеты->miniShop2->Настройки

Как видите связь мы создали Один ко многим, т.е. у нас должен быть основной товар для которого мы и будем создавать модификации. При этом основные товары и модификации ОБЯЗАТЕЛЬНО должны иметь разные шаблоны. В моём случае основные товары имеют шаблон с ID = 2, а модификации — пустой шаблон. Это нужно для того, чтобы можно было выводить только основные товары.
После того как модификации созданы, нужно связать их с основным товаром, но перед этим давайте создадим TV типа «Текстовая область» с именем modifications и привяжем его к шаблону основного товара. Оно нужно для того, чтобы можно было легко вывести список опций доступных для модификаций.
Также нам понадобится плагин «savemods», который при сохранении товара или его модификаций, запишет данные о модификациях конкретного товара в созданное ранее TV modifications.
Теперь откроем основной товар на редактирование и создадим связи с модификациями. Должно получится что-то похожее

Следом нужно добавить разметку в шаблон товара. В частности для всего блока информации о товаре нужно добавить атрибут data-msproduct. Для опций, которые влияют на выбор модификации — data-modoptions, а полям, которые нужно обновить после получения данных модификации — data-msfield, где в качестве значения должен быть ключ поля в БД.
Для реализации связанных опций, и чтобы пользователь долго не гадал какие модификации существуют, можно для одной из опций указать в качестве значения атрибута data-modoptions «master», а для остальных «slave».
Ну и наконец напишем JS, который обработает изменение модификации и отправит запрос на сервер для получения данных о ней, а так же создадим файл action.php, обрабатывающий запрос на сервере. Вставка полученных значений происходит в методе success(), который обрабатывает INPUT, IMG и текстовые блоки.
Так же в JS не обрабатываются связанные опции, но в случае, если модификация не существует, кнопка добавления в корзину блокируется.
Код примера есть в репозитории.
Посмотреть как работает можно здесь
Спасибо за внимание!
О том как поблагодарить автора и поддержать сообщество можно узнать тут
Первое, что нужно сделать это создать связь. Для этого идём в верхнее меню->Пакеты->miniShop2->Настройки

Как видите связь мы создали Один ко многим, т.е. у нас должен быть основной товар для которого мы и будем создавать модификации. При этом основные товары и модификации ОБЯЗАТЕЛЬНО должны иметь разные шаблоны. В моём случае основные товары имеют шаблон с ID = 2, а модификации — пустой шаблон. Это нужно для того, чтобы можно было выводить только основные товары.
После того как модификации созданы, нужно связать их с основным товаром, но перед этим давайте создадим TV типа «Текстовая область» с именем modifications и привяжем его к шаблону основного товара. Оно нужно для того, чтобы можно было легко вывести список опций доступных для модификаций.
Также нам понадобится плагин «savemods», который при сохранении товара или его модификаций, запишет данные о модификациях конкретного товара в созданное ранее TV modifications.
Теперь откроем основной товар на редактирование и создадим связи с модификациями. Должно получится что-то похожее

Следом нужно добавить разметку в шаблон товара. В частности для всего блока информации о товаре нужно добавить атрибут data-msproduct. Для опций, которые влияют на выбор модификации — data-modoptions, а полям, которые нужно обновить после получения данных модификации — data-msfield, где в качестве значения должен быть ключ поля в БД.
Для реализации связанных опций, и чтобы пользователь долго не гадал какие модификации существуют, можно для одной из опций указать в качестве значения атрибута data-modoptions «master», а для остальных «slave».
Ну и наконец напишем JS, который обработает изменение модификации и отправит запрос на сервер для получения данных о ней, а так же создадим файл action.php, обрабатывающий запрос на сервере. Вставка полученных значений происходит в методе success(), который обрабатывает INPUT, IMG и текстовые блоки.
Так же в JS не обрабатываются связанные опции, но в случае, если модификация не существует, кнопка добавления в корзину блокируется.
Код примера есть в репозитории.
Посмотреть как работает можно здесь
Спасибо за внимание!
О том как поблагодарить автора и поддержать сообщество можно узнать тут
- ВКонтакте
- Telegram
- Viber
- РЎРєРѕРїРСвЂВВВВВВВВровать ссылку
4
1 296
+9
Поблагодарить автора
Отправить деньги
Комментарии: 7
18 августа 2023, 09:39
В /assets/action.php добавьте старый добрый
if (empty($_SERVER['HTTP_X_REQUESTED_WITH']) || $_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest') die;
18 августа 2023, 11:20
Главное прикрыть запросы извне.
Какие заголовки передаются из js можно посмотреть и добавить нужный при необходимости.
Какие заголовки передаются из js можно посмотреть и добавить нужный при необходимости.
18 августа 2023, 13:40
В общем добавил что-то типа CSRF-токена извне теперь не достучаться.
30 марта 2024, 13:26
что-то здесь modifications.art-sites.ru/ так и не нашел примера работы ( можете подсказать где там это посмотреть?
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Здесь упомянуты:
Компонент | Текущая версия | Закачки |
miniShop2 | 4.4.0-pl от 06.08.2024 | 26 389 |
26 минут назад
Если речь про админку, то мне вообще непонятно, что ты пытаешься сделать и зачем? В админке есть интерфейс работы с заказами и в этом интерфейсе можно...
Вывод перечня заказанных товаров в таблицу с заказами minishop2 (панель менеджера) 10
Вчера в 21:11
Здравствуйте
Есть желание использовать компонент polylang для автоматизации перевода с наименьшими усилиями, но есть пару вопросов, которые хотелось ...
Polylang 143
Вчера в 16:30
Добрый день.
Удалите плагин vpSystem от пакета.
[VirtualPage] - Виртуальные страницы. 183
Вчера в 08:40
Хочестя в тикеты при сохранении комментария добавить кнопку «проверить на ошибки» и при нажатии на нее проверить комментарий на ошибки в нейросети сох...
pbStudio: Создаём сайт с PageBlocks – настройка и главная страница 6
Вчера в 08:36
Нет, через апи идет запрос в ChatGPT, который формирует необходимые данные о блоке, а дальше PageBlocks их разбирает и создает все нужные элементы.
PageBlocks 2.6.0. Настройка меню MODX и гибкое управление страницей пользователя 12
Вчера в 00:03
Не работает парсинг с vk.com, vkvideo.ru
[videoGallery] 1.4.0 Поддержка VK Video и ещё пара фишек 9
17 апреля 2025, 23:01
Можете тоже подсказать как победить данную ошибку?
msGallerySearch - загрузка изображений в галерею minishop2 по ссылке и Google поиск картинок 44
17 апреля 2025, 17:49
Очевидно ты используешь источник файлов, поэтому в админке путь прописан от источника, хочешь полный путь, откажись от источника файлов.
Не открываются загруженные файлы пишет страница не найдена 2
17 апреля 2025, 15:08
Привет, Henk. Спасибо за ответ! В посте по ссылке меня больше всего заинтересовала фраза «мы интегрировали AI в медиа-менеджер, чтобы значительно упро...
MODX/AI Hackathon Part 2 (27 марта) 4
17 апреля 2025, 13:17
в preg_match проверка проходит, и туда 100% приходит url
Здравствуйте! Первый раз такое вижу, у слеша, не 1 символ в строке, а 9!! Как это делает MODX 2