Как вывести похожие товары по списку опций?
Подскажите пожалуйста, как реализовать вывод похожих товаров Minishop2 в карточке товара, у которых отмечены такие же опции, как и у товара в текущей карточке? Опции в админке выведены чекбоксами.
Вероятно опции нужно перечислить в WHERE через pdoPage, но пока ничего не выходит.
Вероятно опции нужно перечислить в WHERE через pdoPage, но пока ничего не выходит.
Комментарии: 13
Как-то так
SELECT * FROM `modx_ms2_products` Data
LEFT JOIN `modx_site_content` Resource ON Data.id = Resource.id
LEFT JOIN `modx_ms2_product_options` Size ON Data.id = Size.product_id AND Size.key = 'size'
WHERE Size.value = '5010х2800'
у вас в примере Data это к примеру article, а Size это название опции. правильно? Но как перечислить все опции? Просто их около 20, а отмечены у каждого товара по 1-4 опции.
И как получить значения для WHERE, в котором тоже могут быть несколько опций?
И как получить значения для WHERE, в котором тоже могут быть несколько опций?
Слишком общий вопрос, нет волшебных решений.
Что значит у нас много опций, 20 штук? Как вы по ним хотите похожие товары искать?
Вот я к примеру делал так: мне в разделе «Стабилизатор напряжения» в карточке товара нужно вывести 12 похожих товаров, критерии такие:
1. Соответствуют количеству фаз
2. Близкая мощность, плюс минус 20%
3. Близкая цена, плюс минус 30%
Когда я определился с критериями — я написал соответствующий запрос и получил выборку. Для другой категории будет другая выборка, правда же? Ведь спортивные кроссовки по этим критериям уже не подобрать? Там Похожесть это, например, цвет, наличие или отсутствие шнурков.
Что значит у нас много опций, 20 штук? Как вы по ним хотите похожие товары искать?
Вот я к примеру делал так: мне в разделе «Стабилизатор напряжения» в карточке товара нужно вывести 12 похожих товаров, критерии такие:
1. Соответствуют количеству фаз
2. Близкая мощность, плюс минус 20%
3. Близкая цена, плюс минус 30%
Когда я определился с критериями — я написал соответствующий запрос и получил выборку. Для другой категории будет другая выборка, правда же? Ведь спортивные кроссовки по этим критериям уже не подобрать? Там Похожесть это, например, цвет, наличие или отсутствие шнурков.
Пока думал и читал понял, что нужна другая логика.
На странице каталога в фильтре выбираю например «Антиоксиданты» и «Аминокислоты». Появляется список подходящих товаров.
Дальше, переходя в товар надо передать из GET запроса выбранные опции.
Внизу товара отобразить 10-12 товаров, в которых эти опции тоже отмечены.
На странице каталога в фильтре выбираю например «Антиоксиданты» и «Аминокислоты». Появляется список подходящих товаров.
Дальше, переходя в товар надо передать из GET запроса выбранные опции.
Внизу товара отобразить 10-12 товаров, в которых эти опции тоже отмечены.
Я бы тогда забирал параметры из url и записывал бы в куки. А на страницы товара выводил похожие так
{'!msProducts' | snippet: [
'parents' => 0,
'optionFilters' => $.cookie.optionFilters
'tpl' => 'myTpl',
'limit' => 12
]}
Спасибо! попробую.
не прокатит. ведь запрос ?memory=1&vitamin=1 в строке появляется (mFilter2) без перезагрузки страницы и не попадает в GET массив.
параметры из url и записывал бы в кукиПонятное дело, магии не существует. Надо JS написать который возьмёт параметры из url закодирует в JSON и запишет в куки с ключом optionFilters
Я с JS весьма поверхностно дружу. У кого есть возможность помочь за вознаграждение?
Решение от ИИ
$(document).on('mse2_load', function (e, data) {
// Получаем все GET-параметры из текущего URL
var params = new URLSearchParams(window.location.search);
// Преобразуем параметры в объект JSON
var jsonParams = {};
for (var param of params) {
jsonParams[param[0]] = param[1];
}
// Если параметры есть, записываем их в куки
if (Object.keys(jsonParams).length > 0) {
Cookies.set('optionFilters', JSON.stringify(jsonParams), { expires: 7, path: '/' });
}
// Иначе удаляем куки
else {
Cookies.remove('optionFilters', { path: '/' });
}
});
не пишет куки
UPD
Добавил подключение js.cookie.min.js и ваш код заработал. Спасибо!
Добавил подключение js.cookie.min.js и ваш код заработал. Спасибо!
Если посетитель выбирает опции в фильтре и переходит в товар — все отрабатывает отлично. Но если затем он переходит между товарами через те же «похожие товары» или «недавно просмотренные товары», тогда в куки ничего нового не записывается и в «похожих товарах» выводятся постоянно одни и те же товары.
Как вариант — после перехода в товар из фильтра отображать похожие товары как уже предложили и сразу удалять куки. И далее в каждом товаре проверять наличие куки. При отсутствии куки записать в массив определенный список опций текущего товара, получить список id товаров с таким же набором опций и в «похожих товарах» вывести этот список.
Вот собственно проблема, которую гугл не помог решить:
Как получить в массив или лучше в JSON все опции из списка для текущего товара.
Как вариант — после перехода в товар из фильтра отображать похожие товары как уже предложили и сразу удалять куки. И далее в каждом товаре проверять наличие куки. При отсутствии куки записать в массив определенный список опций текущего товара, получить список id товаров с таким же набором опций и в «похожих товарах» вывести этот список.
Вот собственно проблема, которую гугл не помог решить:
Как получить в массив или лучше в JSON все опции из списка для текущего товара.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.