Автор Тема: Как сделать, чтобы один из фильтров был по умолчанию включен в Prestashop 1.7  (Прочитано 104 раз)

08 Май 2020, 17:27:30
  • Новичок
  • *
  • Сообщений: 18
  • Репутация: +0/-0
  • я не программист, я просто системщик
    • Просмотр профиля
День добрый,
подскажите как сделать, чтобы один из фильтров был по умолчанию был включен
Модуль Многоуровневая навигация (ps_facetedsearch)

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

Заранее большое спасибо!
09 Май 2020, 11:56:06
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 16108
  • Репутация: +14614/-5
  • Сообщество PrestaShop
    • Просмотр профиля
В ссылке сразу передавать параметр фильтра, тогда будет открываться список товаров с учетом этого фильтра.
09 Май 2020, 20:57:44
Ответ #2
  • Новичок
  • *
  • Сообщений: 18
  • Репутация: +0/-0
  • я не программист, я просто системщик
    • Просмотр профиля
В ссылке сразу передавать параметр фильтра, тогда будет открываться список товаров с учетом этого фильтра.

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

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

как я могу узнать параметр фильтра ?
10 Май 2020, 11:41:55
Ответ #3
  • Ветеран
  • *****
  • Сообщений: 16108
  • Репутация: +14614/-5
  • Сообщество PrestaShop
    • Просмотр профиля
Схему чпу менять не нужно. Добавлять параметр в url нужно на сайте.
Узнать название фильтра можно в коде страницы, откройте консоль в браузере и найдите нужный элемент.
10 Май 2020, 12:10:21
Ответ #4
  • Ветеран
  • *****
  • Сообщений: 21915
  • Репутация: +25297/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
В custom.js добавьте код
$(document).ready(function(){$('#layered_quantity_1').click();});
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
10 Май 2020, 23:21:08
Ответ #5
  • Новичок
  • *
  • Сообщений: 18
  • Репутация: +0/-0
  • я не программист, я просто системщик
    • Просмотр профиля
Схему чпу менять не нужно. Добавлять параметр в url нужно на сайте.
Узнать название фильтра можно в коде страницы, откройте консоль в браузере и найдите нужный элемент.

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

Подскажите пожалуйста как добавлять параметр в url на сайте?
10 Май 2020, 23:32:56
Ответ #6
  • Новичок
  • *
  • Сообщений: 18
  • Репутация: +0/-0
  • я не программист, я просто системщик
    • Просмотр профиля
В 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 ?

11 Май 2020, 00:47:11
Ответ #7
  • Пользователь
  • **
  • Сообщений: 81
  • Репутация: +1/-0
  • Программист PrestaShop
    • Просмотр профиля
Привет!
Это можно сделать вот так:

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');
});

И всё таки, для чего это нужно?
skype: prestashopov
telegram: prestashopov
14 Май 2020, 19:21:35
Ответ #8
  • Новичок
  • *
  • Сообщений: 18
  • Репутация: +0/-0
  • я не программист, я просто системщик
    • Просмотр профиля
Привет!
Это можно сделать вот так:

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');
});

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

Спасибо большое, сработало, но при отметке других фильтров, отметка "по наличию" сбрасывается.
подскажите пожалуйста как сделать чтобы не сбрасывалась?
Это нужно для того чтобы клиенты видели только товар в наличии.
14 Май 2020, 19:29:32
Ответ #9
  • Пользователь
  • **
  • Сообщений: 81
  • Репутация: +1/-0
  • Программист PrestaShop
    • Просмотр профиля
Я так и понял, но надеялся, что в этом был более глубокий смысл.
То, что хотите использовать - это костыль, который повлечет за собой кучу других костылей.
Это делается на стороне сервера, при формировании массива с товарами, добавьте сортировку по количеству в запрос SQL.
Скорее всего уже есть готовые решения на этот счет, посмотрите в поиске.

Если не найдёте, пишите.
skype: prestashopov
telegram: prestashopov
14 Май 2020, 23:32:43
Ответ #10
  • Новичок
  • *
  • Сообщений: 18
  • Репутация: +0/-0
  • я не программист, я просто системщик
    • Просмотр профиля
Я так и понял, но надеялся, что в этом был более глубокий смысл.
То, что хотите использовать - это костыль, который повлечет за собой кучу других костылей.
Это делается на стороне сервера, при формировании массива с товарами, добавьте сортировку по количеству в запрос SQL.
Скорее всего уже есть готовые решения на этот счет, посмотрите в поиске.

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

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

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

На счет сортировке, в данный момент товары которых нет в наличии стоят в конце списка.
"добавьте сортировку по количеству в запрос SQL"
с этим еще не работал, даже не знаю что и как,
Вы не могли бы тыкнуть меня носом в доки где это читать.
Спасибо.
15 Май 2020, 11:40:20
Ответ #11
  • Ветеран
  • *****
  • Сообщений: 16108
  • Репутация: +14614/-5
  • Сообщество PrestaShop
    • Просмотр профиля
Тем таких на форуме полно. В классе Category в методе getProducts добавить сортировку по stock.quantity и будет сортировать по количеству.
Ислючить из показа тоже тамже.
https://prestashop-forum.ru/index.php/topic,9586.msg61045.html