Msearch2 поиск по заранее выбранным опциям
Всем привет, подскажите пожалуйста, как реализовать поиск по товарам с заведомо выбранными опциями?
То есть не на странице каталога с товарами отмечая опции в фильтре mfilter2, а с главной страницы.
К примеру в магазине автозапчастей, сперва нужно выбрать опцию: МАРКА, выбрать опцию: МОДЕЛЬ, можно выбрать еще опции, после откроется страница с соответствующими этим опциям товарами.
Можно еще наименование указать: фильтр салона + kia + rio3
Скриншот: prnt.sc/AOqnh7EAGev0
Заранее спасибо!
То есть не на странице каталога с товарами отмечая опции в фильтре mfilter2, а с главной страницы.
К примеру в магазине автозапчастей, сперва нужно выбрать опцию: МАРКА, выбрать опцию: МОДЕЛЬ, можно выбрать еще опции, после откроется страница с соответствующими этим опциям товарами.
Можно еще наименование указать: фильтр салона + kia + rio3
Скриншот: prnt.sc/AOqnh7EAGev0
Заранее спасибо!
Комментарии: 20
Фильтры работают через get-параметры, соответственно нужно сформировать ссылку на страницу каталога с нужными параметрами.
Спасибо, правильно понимаю, что в самой форме msearch2 необходимо поместить сниппет mfilter2 — фильтр, который будет добавлять в get-параметры нужные опции и затем как-то перекидывать, по клику поиск, на каталог уже с подборкой товаров по этому фильтру?
Нет, не правильно, нужно самостоятельно с помощью js формировать ссылку с get параметрами.
А есть какой-то пример, где подсмотреть как это делается? Слишком я новичок в js.
Ну, у тебя есть ссылка, у ссылки есть атрибут 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>
Спасибо огромное!!! Заработало))) А есть какая-то возможность в селекты загнать массив опций минишопа, например массив моделей и марок. А то сейчас у меня модели и марки отдельными ресурсами добавлены и в селект выводятся через pdoMenu
Да, можно вывести опции как угодно. Смотри документацию.
Правильно понимаю, что через сниппет msProducts? Вроде через msProductOptions выводятся дополнительные опции только в карточке товара.
В документации написано что msProductOptions работает только в карточке товара? Ему нужно передать id товара и он выведет опции где угодно и как угодно.
Да, но можно ли выводить все существующие опции, без привязки к id товара?
У нас же ситуация, когда человек зашел на сайт, в форме подбора запчасти указывает модель и марку автомобиля, а это опции. То есть изначально ему нужно вывести все эти опции, которые только существуют. Он их выбрал, нажал кнопку «подобрать» и уже перенаправлен на страницу с подборкой товаров.
У нас же ситуация, когда человек зашел на сайт, в форме подбора запчасти указывает модель и марку автомобиля, а это опции. То есть изначально ему нужно вывести все эти опции, которые только существуют. Он их выбрал, нажал кнопку «подобрать» и уже перенаправлен на страницу с подборкой товаров.
На мой взгляд, марка и модель должны быть категориями, а не опциями.
Одна запчасть, зачастую, подходит к 30 моделям сразу. И удобнее, при создании товара, в опциях сразу выбрать все эти модели, мне кажется. В то же время, если модель — категория — это лучше для сео, для каждой модели своя посадочная страница. Интересно узнать твое мнение, почему марка и модель должны быть категориями.
В minishop2 есть возможность указать для товара одну основную категорию и много дополнительных.
Вы здесь немного смешиваете понятия. Опция это Модель и Марка отдельно.
А то что внутри (список моделей, Список марок) — это значения опций.
Вам получается нужно дернуть из базы значения указанной опции. Верно? Так это совсем простенький запрос в базу ведь.
А то что внутри (список моделей, Список марок) — это значения опций.
Вам получается нужно дернуть из базы значения указанной опции. Верно? Так это совсем простенький запрос в базу ведь.
Позвольте вмешаться в ваш диалог.
Массив опций вывести без проблем можно. Это ведь обычные записи базы данных. Значит их без проблем можно оттуда забрать.
Готовых сниппетов для этого нет. То что есть, использовать сильно не рекомендую, даже если там есть какие-то отсылки к опциям.
Проще всего написать свой достаточно простой сниппет, забирающий нужные вам данные.
Для этого нужно уметь составлять XPDO запросы через $modx->newQuery (или хотя бы через SQL)
Массив опций вывести без проблем можно. Это ведь обычные записи базы данных. Значит их без проблем можно оттуда забрать.
Готовых сниппетов для этого нет. То что есть, использовать сильно не рекомендую, даже если там есть какие-то отсылки к опциям.
Проще всего написать свой достаточно простой сниппет, забирающий нужные вам данные.
Для этого нужно уметь составлять XPDO запросы через $modx->newQuery (или хотя бы через SQL)
Николай, а есть пример или инструкция, я в этом деле очень новичок. Осваиваю существующие дополнения Modx, и то документация не с первого раза обычно доходит до понимания) Но работаем)
Инструкции по обращению в базу данных — это официальная документация.
Конкретно по примеру — давайте помогу набросать. Для начала сформулируйте запрос словами — что вы хотите получить на выходе.
Но откровенно говоря — вы для новичка взялись за сложноватую задачу.
Конкретно по примеру — давайте помогу набросать. Для начала сформулируйте запрос словами — что вы хотите получить на выходе.
Но откровенно говоря — вы для новичка взялись за сложноватую задачу.
Посетитель заходит на сайт в поисках салонного фильтра для автомобиля KIA Rio 3 QBR (11-17). Перед ним строка поиска, куда он вводит «салонный фильтр», рядом в выпадающих списках он выбирает модель «KIA» и марку «Rio 3 QBR (11-17)». Скриншот: prnt.sc/ynP2RI8oq_d9
Нажимает кнопку «найти» и попадает на страницу результатов поиска с подборкой салонных фильтров по его запросу. Так же на странице с подборкой вывожу mfilter2, и клиент уже может из подборки выбрать фильтром производителя фильтра, к примеру «Бош», а так же его статус «Оригинал/Неоригинал», отметив нужные галочки. Скриншот: prnt.sc/IcN6k3hPMhoP
Нажимает кнопку «найти» и попадает на страницу результатов поиска с подборкой салонных фильтров по его запросу. Так же на странице с подборкой вывожу mfilter2, и клиент уже может из подборки выбрать фильтром производителя фильтра, к примеру «Бош», а так же его статус «Оригинал/Неоригинал», отметив нужные галочки. Скриншот: prnt.sc/IcN6k3hPMhoP
Такой вариант поиска необходим, так как этот же салонный фильтр подходит для 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)»
Заранее спасибо, буду очень благодарен.
Характеристики: производитель
Опции: статус производителя «Оригинал/Неоригинал», марка «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)»
Заранее спасибо, буду очень благодарен.
А выбор из выпадающего списка сейчас реализовать помог Артур, он предложил с помощью js формировать ссылку с get параметрами: prnt.sc/OkX-GKLLv5Pv
Это в случае, когда модели и марки — категории.
Это в случае, когда модели и марки — категории.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.