[mSearch2] Версия 1.4.0 с поддержкой History Api
Представляю вам новую версию mSearch2, в которой сильно доработан стандартный javascript.
Теперь фильтры реагируют кнопки браузера взад-вперёд — это поддержка событий History Api. Пришлось повозиться, но работают все стандартные элементы: чекбоксы, радиокнопки, селекты, выбранное, сортировка, лимит и шаблон.

Заходите на страницу поиска, нажимайте на всякие фильтры, а потом тыкайте в браузере кнопочку назад — и в фильтре всё поменяется, как было натыкано. В общем, прикольно, давно просили.
Второе изменение, неразрывно связанное в первым — возможность сброса фильтра. Работает точно так же, как и обычная кнопка reset формы, только с поддержкой History Api и прочих плюшек. Чтобы оно работало, вам нужно просто добавить кнопку с type=reset в форму. Я предлагаю делать это вот так:
Как видно в коде, есть еще и кнопка submit. Зачем она, если страница и так сразу обновляет результаты при изменении любого фильтра? Не знаю, но вопросов об этом было множество, так что сделал.
Чтобы включить кнопку отправки формы, вам нужно добавить в action адрес для отправки формы, не совпадающий с текущей страницей.
Еще добавлена возможность использовать несколько блоков пагинаций. Теперь javascript ищет и не по id #mse2_pagination, а по классу .mse2_pagination.
Ну и на сладкое, я немного изменил процесс инициализации скриптов, и теперь вы можете не просто указывать свой javascript файл вместо родного, а наследовать его и перезагружать какие-то методы.
Новая версия уже доступна в магазине, можно обновляться.
Теперь фильтры реагируют кнопки браузера взад-вперёд — это поддержка событий History Api. Пришлось повозиться, но работают все стандартные элементы: чекбоксы, радиокнопки, селекты, выбранное, сортировка, лимит и шаблон.

Заходите на страницу поиска, нажимайте на всякие фильтры, а потом тыкайте в браузере кнопочку назад — и в фильтре всё поменяется, как было натыкано. В общем, прикольно, давно просили.
Второе изменение, неразрывно связанное в первым — возможность сброса фильтра. Работает точно так же, как и обычная кнопка reset формы, только с поддержкой History Api и прочих плюшек. Чтобы оно работало, вам нужно просто добавить кнопку с type=reset в форму. Я предлагаю делать это вот так:
<form action="" method="post" id="mse2_filters">
[[+filters]]
[[+filters:isnot=``:then=`
<button type="reset" class="btn btn-default">[[%mse2_reset]]</button>
<button type="submit" class="btn btn-success pull-right hidden">[[%mse2_submit]]</button>
<div class="clearfix"></div>
`]]
</form>
Как видно в коде, есть еще и кнопка submit. Зачем она, если страница и так сразу обновляет результаты при изменении любого фильтра? Не знаю, но вопросов об этом было множество, так что сделал.
Чтобы включить кнопку отправки формы, вам нужно добавить в action адрес для отправки формы, не совпадающий с текущей страницей.
<form action="[[~15]]" method="post" id="mse2_filters">
[[+filters]]
</form>
То есть, если action пустой или равен текущей странице [[~[[*id]]]], то фильтр обновляется сразу, как обычно. Если же action отличается, то при кликах по фильтру ничего не происходит и вам нужно отправлять форму вручную, через появившуюся кнопку. Конечно, suggestions в таком режиме нужно отключить.Еще добавлена возможность использовать несколько блоков пагинаций. Теперь javascript ищет и не по id #mse2_pagination, а по классу .mse2_pagination.
Ну и на сладкое, я немного изменил процесс инициализации скриптов, и теперь вы можете не просто указывать свой javascript файл вместо родного, а наследовать его и перезагружать какие-то методы.
- Очищаем системный параметр mse2_frontend_js
- Подключаем /assets/components/msearch2/js/web/default.js где-нибудь вручную
- После этого переписываем какой-то из его методов. Например:
<script type="text/javascript"> $(document).ready(function() { if (typeof(mSearch2) != 'undefined') { mSearch2.load = function() { alert() }; } }) </script>
- Сам фильтр будет проинициализирован в конце загрузки страницы, после вашей перезаписи.
Новая версия уже доступна в магазине, можно обновляться.
Комментарии: 6
По наследованию, сбросу и блокам пагинации — очень актуально, большое спасибо)
По поводу history api — можно ли добавить какой-то параметр, позволяющий выключать его? — при использовании своих методов с history api, результат при переключении стрелками браузера порой выдает кашу.
UPD: По поводу кнопки сброса — скорее всего баг: при переходе/обновлении страницы с уже заданным параметром фильтрации в адресной строке, после чего, пощелкав фильтры и последующим нажатии на сброс, сбрасываются не все фильтры в принципе, но остается изначально-введенные при заходе на страницу.
По поводу history api — можно ли добавить какой-то параметр, позволяющий выключать его? — при использовании своих методов с history api, результат при переключении стрелками браузера порой выдает кашу.
UPD: По поводу кнопки сброса — скорее всего баг: при переходе/обновлении страницы с уже заданным параметром фильтрации в адресной строке, после чего, пощелкав фильтры и последующим нажатии на сброс, сбрасываются не все фильтры в принципе, но остается изначально-введенные при заходе на страницу.
можно ли добавить какой-то параметр, позволяющий выключать его?Я вроде только что написал, как можно менять родные методы. Просто перепиши методы класса mSearch2.Hash как нужно.
сбрасываются не все фильтры в принципе, но остается изначально-введенные при заходе на страницуТак ведёт себя reset формы в HTML, я решил не нарушать логику.
Василий, доброй ночи! Заметил на твоем демо сайте один вот такой момент:
переходим на страницу каталога, видим, что рядом с чекбоксом «Старая цена», стоит цифра 2 (но на самом деле товаров со старой ценой 4), а когда нажимаем сбросить фильтр и выбираем какой-нибудь из фильтров — цифра формируется верная…

А на странице поиска (если искать по слову «Товар») когда кликаешь по фильтрам, а потом жмешь сбросить, то фильтр будто зависает:

Помогает только перезагрузка…
Это в компоненте такая небольшая беда?
переходим на страницу каталога, видим, что рядом с чекбоксом «Старая цена», стоит цифра 2 (но на самом деле товаров со старой ценой 4), а когда нажимаем сбросить фильтр и выбираем какой-нибудь из фильтров — цифра формируется верная…

А на странице поиска (если искать по слову «Товар») когда кликаешь по фильтрам, а потом жмешь сбросить, то фильтр будто зависает:

Помогает только перезагрузка…
Это в компоненте такая небольшая беда?
Василий, привет, отправка формы по клику кнопки некорректно работает. Если выбираешь в фильтре что-то, то редеректит сразу же, до нажатия на кнопку.
Проблему вижу тут:
Проблему вижу тут:
$(document).on('change', this.options.filters, function (e) {
return mSearch2.submit();
});
Условия нехватает if (this.autoLoad) {
$(document).on('change', this.options.filters, function (e) {
return mSearch2.submit();
});
}
В некоторых запросах появляется такая строчка.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.