Jump to content


Photo
- - - - -

Каскадный селект (сохраняем в куки)

селект куки каскадные селекты каскадный селект

6 replies to this topic

#1 caveck

caveck
  • JBZoo User (rus)
  • User rate: 3.8
  • posts: 37
  • topics: 7

Posted 08 December 2016 - 16:43

Здравствуйте.

Задача такая:

На первой странице (или любой другой) сайта пользователь выбирает параметр из каскадного селекта. Выбор должен запомниться и передаваться во все категории товаров. 

Принял решение сделать это через куки на jQuery.

В дальнейшем это значение еще понадобится в корзине. Где от него будет зависеть валидатор общего веса корзины.

Не имея больших знаний JS, методом проб и ошибок (гугл и ценный совет fiction13) сваял такой код.

jQuery(function($) {
    var $select = $('.jsCascade-jbfilter-id-01af8091-2011-4957-9388-aa22035e3dc9');
    
    function handleSelectValue() {
        var selectedClass = $select.find(':selected').attr('value');
        localStorage.setItem("selected", selectedClass);
    }
    
    var cookie = localStorage.getItem("selected");
    if (cookie) {
        $select.find('[value="' + cookie + '"]').attr('selected', 'selected');
    }
    
    handleSelectValue();
    $select.on('change',handleSelectValue);
});

Да. Теперь, выбрав значение, оно записывается Local Storage и перехватывается на других страницах. Но фильтр не срабатывает. понятно, что теперь, на основе выбора нужно запустить фильтр. Но не знаю как. 

Почитав темы на форуме, где Денис советует добавить триггер, попытался воткнуть в этот код. Но тогда у меня всё циклится. 

Подскажите, пожалуйста, как запустить фильтр.

Уже всю голову себе сломал.


  • 0

#2 SmetDenis

SmetDenis
  • Administrators
  • User rate: 139.4
  • posts: 16232
  • topics: 200

Posted 09 December 2016 - 05:52

Все селекты на страницы используют легковесный jQuery-плагин JBZooSelect.
media\zoo\applications\jbuniversal\assets\js\widget\select.js

Попробуйте
$('выбрать нужный селект').data('JBZooSelect').val(42);
Соответственно нужно по порядку (это важно) проставить значения всем селектам.
Возможно придется поставить символическую задержку между этими действиями.
  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#3 caveck

caveck
  • Topic Starter
  • JBZoo User (rus)
  • User rate: 3.8
  • posts: 37
  • topics: 7

Posted 12 December 2016 - 12:02

т.е. если я правильно понял (ответил не сразу, т.к. пытался вникнуть в суть написанного на https://github.com/J...Query-Factory),то после установки атрибута selected 

$select.find('[value="' + cookie + '"]').attr('selected', 'selected');

я должен вызвать плагин JBZooSelect и установить своё значение

$('.jsCascade-jbfilter-id-01af8091-2011-4957-9388-aa22035e3dc9').JBZooCascadeSelect({}).JBZooCascadeSelect('setValue', 'cookie');

так?

мне же нужно только одно значение присвоить. а все возможные значения уже  были перечислены выше.

jQuery(function($){ setTimeout(function(){$(".jsCascade-jbfilter-id-01af8091-2011-4957-9388-aa22035e3dc9").JBZooCascadeSelect({"text_all":" - \u0412\u0441\u0435 - ","group":".jsCascade-jbfilter-id-01af8091-2011-4957-9388-aa22035e3dc9","items":{"\u0423\u0447\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u21161":[],"\u0423\u0447\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u21162":[],"\u0423\u0447\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u21163":[],"\u0423\u0447\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u211618":[]}}, 0);}, 0); });
 

или я что-то недогоняю по своей неграмотности?


Edited by caveck, 12 December 2016 - 12:05.

  • 0

#4 caveck

caveck
  • Topic Starter
  • JBZoo User (rus)
  • User rate: 3.8
  • posts: 37
  • topics: 7

Posted 12 December 2016 - 12:21

или мне мой скрипт просто нужно раньше запускать, чем стандартный JBZooSelect


  • 0

#5 SmetDenis

SmetDenis
  • Administrators
  • User rate: 139.4
  • posts: 16232
  • topics: 200

Posted 13 December 2016 - 08:00

Свой скрипт запускать нужно позже, можно на всякий случай сделать таймаут.
Устанавливать значения по порядку для всех селектов (тоже можно сделать таймаут в 10 mc для верности).
Для установки значений лучше использовать функции плагина jQuery (я писал выше).

Иначе у вас будут очевидные коллизии в действиях. Например, значение не устанавливается.

Принцип работы наших плагинов можно прочитать тут - https://github.com/J.../jQuery-Factory
  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#6 caveck

caveck
  • Topic Starter
  • JBZoo User (rus)
  • User rate: 3.8
  • posts: 37
  • topics: 7

Posted 15 December 2016 - 05:26

Можно по слогам объяснить мне? ))

Ну, правда, туплю я по страшному.

 

Вот смотрите, Денис, по порядку пишу мои мысли:

1. На какой-то странице сайта я выбрал селект и в Local Storage у меня записалось значение (это работает)

 

2. Переходя на страницу категории товаров, где согласно записанного значения, должны отобразится только отфильтрованные товары скрипт должен:

  • считать значение из Local Storage (это работает)
  • найти селект с таким значением (это работает)
  • присвоить ему атрибут selected (это работает)
  • заново присвоить ему значение из Local Storage
  • перезагрузить страницу

Я правильно понимаю алгоритм работы или нет?


  • 0

#7 SmetDenis

SmetDenis
  • Administrators
  • User rate: 139.4
  • posts: 16232
  • topics: 200

Posted 15 December 2016 - 10:29

Алгоритм похож на правду.

Возможно какие-то действия асинхронные. Попробуйте использовать символический маленький таймаут.
Как перезагружаете страницу?
Можете дать ссылку на страницу, где можно посмотреть на текущий результат?
  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.






Also tagged with one or more of these keywords: селект, куки, каскадные селекты, каскадный селект

Click to return to top of page in style!