Msearch2 поиск по заранее выбранным опциям

Всем привет, подскажите пожалуйста, как реализовать поиск по товарам с заведомо выбранными опциями?

То есть не на странице каталога с товарами отмечая опции в фильтре mfilter2, а с главной страницы.

К примеру в магазине автозапчастей, сперва нужно выбрать опцию: МАРКА, выбрать опцию: МОДЕЛЬ, можно выбрать еще опции, после откроется страница с соответствующими этим опциям товарами.

Можно еще наименование указать: фильтр салона + kia + rio3

Скриншот: prnt.sc/AOqnh7EAGev0

Заранее спасибо!
Константин
19 апреля 2022, 15:44
modx.pro
679
0

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

Артур Шевченко
19 апреля 2022, 20:52
0
Фильтры работают через get-параметры, соответственно нужно сформировать ссылку на страницу каталога с нужными параметрами.
    Константин
    20 апреля 2022, 07:32
    0
    Спасибо, правильно понимаю, что в самой форме msearch2 необходимо поместить сниппет mfilter2 — фильтр, который будет добавлять в get-параметры нужные опции и затем как-то перекидывать, по клику поиск, на каталог уже с подборкой товаров по этому фильтру?
      Артур Шевченко
      20 апреля 2022, 10:46
      0
      Нет, не правильно, нужно самостоятельно с помощью js формировать ссылку с get параметрами.
        Константин
        20 апреля 2022, 17:15
        0
        А есть какой-то пример, где подсмотреть как это делается? Слишком я новичок в js.
          Артур Шевченко
          21 апреля 2022, 00:15
          0
          Ну, у тебя есть ссылка, у ссылки есть атрибут href, тебе нужно при изменении значения Марки, Модели и т… д. получать значения из этих полей, формировать строку и прибавлять её в значению атрибута href. Примерно так
          <select name="mark" class="jsSelect">
              <option>Марка 1</option>
               <option>Марка 2</option>
                <option>Марка 3</option>
          </select>
          <select name="model" class="jsSelect">
              <option>Модель 1</option>
               <option>Модель 2</option>
                <option>Модель 3</option>
          </select>
          <a href="{9 | url}" data-href="{9 | url}" class="jsLink">Подобрать</a>
          
          <script>
              const selects = document.querySelectorAll('.jsSelect'),
                         link = document.querySelector('.jsLink');
              selects.forEach(el => {
                  el.addEventListener('change', () => {
                      let values = [];
                      selects.forEach(el => {
                          values.push(el.value);
                      });
                      if(values.length){
                          link.href = link.dataset.href + '?mark='+values[0]+'&model='+values[1];
                      }
                 });
          });    
          </script>
            Константин
            22 апреля 2022, 11:57
            0
            Спасибо огромное!!! Заработало))) А есть какая-то возможность в селекты загнать массив опций минишопа, например массив моделей и марок. А то сейчас у меня модели и марки отдельными ресурсами добавлены и в селект выводятся через pdoMenu
              Артур Шевченко
              22 апреля 2022, 14:24
              0
              Да, можно вывести опции как угодно. Смотри документацию.
                Константин
                22 апреля 2022, 16:10
                0
                Правильно понимаю, что через сниппет msProducts? Вроде через msProductOptions выводятся дополнительные опции только в карточке товара.
                  Артур Шевченко
                  22 апреля 2022, 16:28
                  0
                  В документации написано что msProductOptions работает только в карточке товара? Ему нужно передать id товара и он выведет опции где угодно и как угодно.
                    Константин
                    22 апреля 2022, 18:41
                    0
                    Да, но можно ли выводить все существующие опции, без привязки к id товара?
                    У нас же ситуация, когда человек зашел на сайт, в форме подбора запчасти указывает модель и марку автомобиля, а это опции. То есть изначально ему нужно вывести все эти опции, которые только существуют. Он их выбрал, нажал кнопку «подобрать» и уже перенаправлен на страницу с подборкой товаров.
                      Артур Шевченко
                      22 апреля 2022, 19:55
                      0
                      На мой взгляд, марка и модель должны быть категориями, а не опциями.
                      Константин
                      23 апреля 2022, 08:07
                      0
                      Одна запчасть, зачастую, подходит к 30 моделям сразу. И удобнее, при создании товара, в опциях сразу выбрать все эти модели, мне кажется. В то же время, если модель — категория — это лучше для сео, для каждой модели своя посадочная страница. Интересно узнать твое мнение, почему марка и модель должны быть категориями.
                      Артур Шевченко
                      23 апреля 2022, 18:09
                      0
                      В minishop2 есть возможность указать для товара одну основную категорию и много дополнительных.
                      Николай Савин
                      22 апреля 2022, 21:15
                      0
                      Вы здесь немного смешиваете понятия. Опция это Модель и Марка отдельно.
                      А то что внутри (список моделей, Список марок) — это значения опций.
                      Вам получается нужно дернуть из базы значения указанной опции. Верно? Так это совсем простенький запрос в базу ведь.
                  Николай Савин
                  22 апреля 2022, 21:07
                  0
                  Позвольте вмешаться в ваш диалог.
                  Массив опций вывести без проблем можно. Это ведь обычные записи базы данных. Значит их без проблем можно оттуда забрать.
                  Готовых сниппетов для этого нет. То что есть, использовать сильно не рекомендую, даже если там есть какие-то отсылки к опциям.
                  Проще всего написать свой достаточно простой сниппет, забирающий нужные вам данные.
                  Для этого нужно уметь составлять XPDO запросы через $modx->newQuery (или хотя бы через SQL)
                    Константин
                    23 апреля 2022, 08:02
                    0
                    Николай, а есть пример или инструкция, я в этом деле очень новичок. Осваиваю существующие дополнения Modx, и то документация не с первого раза обычно доходит до понимания) Но работаем)
                      Николай Савин
                      23 апреля 2022, 14:59
                      0
                      Инструкции по обращению в базу данных — это официальная документация.
                      Конкретно по примеру — давайте помогу набросать. Для начала сформулируйте запрос словами — что вы хотите получить на выходе.
                      Но откровенно говоря — вы для новичка взялись за сложноватую задачу.
                      Константин
                      26 апреля 2022, 10:33
                      0
                      Посетитель заходит на сайт в поисках салонного фильтра для автомобиля KIA Rio 3 QBR (11-17). Перед ним строка поиска, куда он вводит «салонный фильтр», рядом в выпадающих списках он выбирает модель «KIA» и марку «Rio 3 QBR (11-17)». Скриншот: prnt.sc/ynP2RI8oq_d9

                      Нажимает кнопку «найти» и попадает на страницу результатов поиска с подборкой салонных фильтров по его запросу. Так же на странице с подборкой вывожу mfilter2, и клиент уже может из подборки выбрать фильтром производителя фильтра, к примеру «Бош», а так же его статус «Оригинал/Неоригинал», отметив нужные галочки. Скриншот: prnt.sc/IcN6k3hPMhoP
                      Константин
                      26 апреля 2022, 10:37
                      0
                      Такой вариант поиска необходим, так как этот же салонный фильтр подходит для Hyundai Solaris 1 RBR (10-17), и таких запчастей много, которые подходят к разным маркам и моделям.

                      Характеристики: производитель
                      Опции: статус производителя «Оригинал/Неоригинал», марка «KIA/Hyundai» и модель «Solaris 1 RBR (10-17), Rio 2 JB (05-11), Cerato 2 TD (09-13), Sportage 2 KM, KMS (04-10), Carens 3 UN (06-13), Elantra 4 HD (06-11), Tucson 1 JM (04-10), i-40 VF (11-20), Verna 3 MCT (06)»

                      Заранее спасибо, буду очень благодарен.
                      Константин
                      26 апреля 2022, 16:31
                      0
                      А выбор из выпадающего списка сейчас реализовать помог Артур, он предложил с помощью js формировать ссылку с get параметрами: prnt.sc/OkX-GKLLv5Pv

                      Это в случае, когда модели и марки — категории.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
20