Как сделать, чтобы один из фильтров был по умолчанию включен в Prestashop 1.7

Автор Nurlan, 08 мая 2020, 17:27:30

« назад - далее »

Nurlan

День добрый,
подскажите как сделать, чтобы один из фильтров был по умолчанию был включен
Модуль Многоуровневая навигация (ps_facetedsearch)

ФИЛЬТР
Наличие
- По наличию чтобы стояла галочка

Заранее большое спасибо!

Adik

В ссылке сразу передавать параметр фильтра, тогда будет открываться список товаров с учетом этого фильтра.

Nurlan

Цитата: Adik от 09 мая 2020, 11:56:06
В ссылке сразу передавать параметр фильтра, тогда будет открываться список товаров с учетом этого фильтра.

перешел в Трафик и SEO, Схема URL, и там в Путь к категории {id}-{rewrite}
дописал {?q=Наличие-По+наличию}

после сохранения выдает сообщение:
Маршрут {id}-{rewrite}-{?q=Наличие-По+наличию} ошибочен
Маршрут {id}-{rewrite}?q=Наличие-По+наличию ошибочен

как я могу узнать параметр фильтра ?

Adik

Схему чпу менять не нужно. Добавлять параметр в url нужно на сайте.
Узнать название фильтра можно в коде страницы, откройте консоль в браузере и найдите нужный элемент.

PrestaMan

Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!

Nurlan

Цитата: Adik от 10 мая 2020, 11:41:55
Схему чпу менять не нужно. Добавлять параметр в url нужно на сайте.
Узнать название фильтра можно в коде страницы, откройте консоль в браузере и найдите нужный элемент.

открыл коде страницы как на фото, нашел элемент с галочкой
id="facet_input_58726_1"
но он МЕНЯЕТСЯ при обновлении страницы facet_input_ххххх_1

Подскажите пожалуйста как добавлять параметр в url на сайте?

Nurlan

Цитата: PrestaMan от 10 мая 2020, 12:10:21
В custom.js добавьте код
$(document).ready(function(){$('#layered_quantity_1').click();});

В PS1.6 так и делал, работало.
В PS1.7 как я понял вместо layered_quantity_1 идет id="facet_input_58726_1"
но он МЕНЯЕТСЯ при обновлении страницы facet_input_ххххх_1

Подскажите пожалуйста что нужно прописать вместо layered_quantity_1 ?


Prestashopov

Привет!
Это можно сделать вот так:


var filters = $('#search_filters').find('ul[id*="facet_"]').find('input[id*=facet_input_]');
$.each(filters, function(index, value) {
if(index == 2) // поменять 2 на число, каким идет по счету checkbox 'По наличию' начиная с нуля, посмотреть позицию можно через console.log(filters);
$(this).trigger('click');
});


И всё таки, для чего это нужно?
telegram: @PrestaGeek

Nurlan

Цитата: Prestashopov от 11 мая 2020, 00:47:11
Привет!
Это можно сделать вот так:


var filters = $('#search_filters').find('ul[id*="facet_"]').find('input[id*=facet_input_]');
$.each(filters, function(index, value) {
if(index == 2) // поменять 2 на число, каким идет по счету checkbox 'По наличию' начиная с нуля, посмотреть позицию можно через console.log(filters);
$(this).trigger('click');
});


И всё таки, для чего это нужно?

Спасибо большое, сработало, но при отметке других фильтров, отметка "по наличию" сбрасывается.
подскажите пожалуйста как сделать чтобы не сбрасывалась?
Это нужно для того чтобы клиенты видели только товар в наличии.

Prestashopov

Я так и понял, но надеялся, что в этом был более глубокий смысл.
То, что хотите использовать - это костыль, который повлечет за собой кучу других костылей.
Это делается на стороне сервера, при формировании массива с товарами, добавьте сортировку по количеству в запрос SQL.
Скорее всего уже есть готовые решения на этот счет, посмотрите в поиске.

Если не найдёте, пишите.
telegram: @PrestaGeek

Nurlan

Цитата: Prestashopov от 14 мая 2020, 19:29:32
Я так и понял, но надеялся, что в этом был более глубокий смысл.
То, что хотите использовать - это костыль, который повлечет за собой кучу других костылей.
Это делается на стороне сервера, при формировании массива с товарами, добавьте сортировку по количеству в запрос SQL.
Скорее всего уже есть готовые решения на этот счет, посмотрите в поиске.

Если не найдёте, пишите.

Только что заметил, что при использовании метода с использованием $(this).trigger('click')
галочка выставляется, но по факту не работает, товары которых нет в наличии все еще отображаются, исчезают только при повторном нажатии. И только после повторного нажатия в ссылке появляется ?q=Наличие-По+наличию:
https://sait.com/categor?q=Наличие-По+наличию
а при первом входе в категорию фильтр не срабатывает:
https://sait.com/categor

Код который Вы мне предложили прописывал в ~/www/sait.com/themes/classic/assets/js/custom.js
Это правильно?

На счет сортировке, в данный момент товары которых нет в наличии стоят в конце списка.
"добавьте сортировку по количеству в запрос SQL"
с этим еще не работал, даже не знаю что и как,
Вы не могли бы тыкнуть меня носом в доки где это читать.
Спасибо.

Adik

Тем таких на форуме полно. В классе Category в методе getProducts добавить сортировку по stock.quantity и будет сортировать по количеству.
Ислючить из показа тоже тамже.
https://prestashop-forum.ru/index.php/topic,9586.msg61045.html