Как вывести похожие товары по списку опций?

Подскажите пожалуйста, как реализовать вывод похожих товаров Minishop2 в карточке товара, у которых отмечены такие же опции, как и у товара в текущей карточке? Опции в админке выведены чекбоксами.
Вероятно опции нужно перечислить в WHERE через pdoPage, но пока ничего не выходит.
Олег
03 мая 2024, 01:48
modx.pro
1
726
0

Комментарии: 13

Артур Шевченко
03 мая 2024, 11:04
0
Как-то так
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'
    Олег
    03 мая 2024, 11:51
    0
    у вас в примере Data это к примеру article, а Size это название опции. правильно? Но как перечислить все опции? Просто их около 20, а отмечены у каждого товара по 1-4 опции.
    И как получить значения для WHERE, в котором тоже могут быть несколько опций?
    Наумов Алексей
    03 мая 2024, 12:23
    0
    Слишком общий вопрос, нет волшебных решений.

    Что значит у нас много опций, 20 штук? Как вы по ним хотите похожие товары искать?

    Вот я к примеру делал так: мне в разделе «Стабилизатор напряжения» в карточке товара нужно вывести 12 похожих товаров, критерии такие:
    1. Соответствуют количеству фаз
    2. Близкая мощность, плюс минус 20%
    3. Близкая цена, плюс минус 30%

    Когда я определился с критериями — я написал соответствующий запрос и получил выборку. Для другой категории будет другая выборка, правда же? Ведь спортивные кроссовки по этим критериям уже не подобрать? Там Похожесть это, например, цвет, наличие или отсутствие шнурков.
      Олег
      03 мая 2024, 13:50
      0
      Пока думал и читал понял, что нужна другая логика.
      На странице каталога в фильтре выбираю например «Антиоксиданты» и «Аминокислоты». Появляется список подходящих товаров.
      Дальше, переходя в товар надо передать из GET запроса выбранные опции.
      Внизу товара отобразить 10-12 товаров, в которых эти опции тоже отмечены.
        Артур Шевченко
        03 мая 2024, 14:39
        +1
        Я бы тогда забирал параметры из url и записывал бы в куки. А на страницы товара выводил похожие так
        {'!msProducts' | snippet: [
            'parents' => 0,
            'optionFilters' => $.cookie.optionFilters
            'tpl' => 'myTpl',
            'limit' => 12
        ]}
          Олег
          03 мая 2024, 16:50
          0
          Спасибо! попробую.
            Олег
            03 мая 2024, 21:01
            0
            не прокатит. ведь запрос ?memory=1&vitamin=1 в строке появляется (mFilter2) без перезагрузки страницы и не попадает в GET массив.
              Артур Шевченко
              03 мая 2024, 21:15
              0
              параметры из url и записывал бы в куки
              Понятное дело, магии не существует. Надо JS написать который возьмёт параметры из url закодирует в JSON и запишет в куки с ключом optionFilters
                Олег
                04 мая 2024, 11:49
                0
                Я с JS весьма поверхностно дружу. У кого есть возможность помочь за вознаграждение?
                  Артур Шевченко
                  04 мая 2024, 17:44
                  +1
                  Решение от ИИ
                  $(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: '/' });
                    }
                  });
                    Олег
                    04 мая 2024, 19:53
                    0
                    не пишет куки
                      Олег
                      04 мая 2024, 20:16
                      0
                      UPD
                      Добавил подключение js.cookie.min.js и ваш код заработал. Спасибо!
        Олег
        06 мая 2024, 00:40
        0
        Если посетитель выбирает опции в фильтре и переходит в товар — все отрабатывает отлично. Но если затем он переходит между товарами через те же «похожие товары» или «недавно просмотренные товары», тогда в куки ничего нового не записывается и в «похожих товарах» выводятся постоянно одни и те же товары.
        Как вариант — после перехода в товар из фильтра отображать похожие товары как уже предложили и сразу удалять куки. И далее в каждом товаре проверять наличие куки. При отсутствии куки записать в массив определенный список опций текущего товара, получить список id товаров с таким же набором опций и в «похожих товарах» вывести этот список.

        Вот собственно проблема, которую гугл не помог решить:
        Как получить в массив или лучше в JSON все опции из списка для текущего товара.
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          13