Всем доброго времени суток.
Думаю все замечали что в фильтре ,пардон, шаблон для фильтра "кнопки jQuery.ui" работают не очень хорошо. И было бы замечательно от этого jQuery.UI вообще избавиться. Но как показать пользователю что он отметил какой-нибудь чекбокс?
В идеале хотелось бы чтобы и какая-нибудь "галочка" появлялась и кнопка красилась.
Как то так примерно.
До кучи ещё очень сильно бесили скачки, когда на странице товара подключаются варианты цены при помощи jQuery UI.Buttons.
Вот так например.
Сперва о фильтре
Собственно идём в modules/mod_jbzoo_search/renderer/item/accordion.php, если у вас шаблон в модуле стоит Accordeon.
И там добавляем код javascript. Заранее прошу прощения за качество кода, программист из меня так себе. И наверняка его(код) можно улучшить.
- <script>
- jQuery('.jbfilter .element-checkbox label input').click(function() {
- if (jQuery(this).is(':checked')){
- jQuery(this).closest('label').addClass('check');
- } else {
- jQuery(this).closest('label').removeClass('check');
- }
- });
- </script>
- <script>
- jQuery (document).ready(function() {
- jQuery('.jbfilter .element-radio label input').click(function() {
- jQuery(this).closest('label').nextAll('label').removeClass('check');
- jQuery(this).closest('label').prevAll('label').removeClass('check');
- jQuery(this).closest('label').addClass('check');
- });
- });
- </script>
- <script>
- jQuery (document).ready(function() {
- jQuery('.jbfilter .jsReset').click(function() {
- jQuery('.jbfilter .element-checkbox label').removeClass('check');
- jQuery('.jbfilter .element-radio label').removeClass('check');
- });
- });
- </script>
Суть в том, чтобы при клике на параметр checkbox, к тегу label добавлялся класс "check", при повторном клике этот класс убирается.
Для radio логика примерно такая-же, только там классы убираются у соседних элементов.
Нажатие на сброс будет удалять все классы "check" у элементов фильтра.
Далее нам останется только стилизовать элементы при помощи css. Примерно так. У вас css будет точно другой, код ниже скорее для примера.
- .check {
- background: var(--a-color1) !important;
- color: #fff !important;
- }
- .jbprice-option-radio,
- .jbfilter .element-checkbox label,
- .jbfilter .element-radio label{
- font-size: 1.1em;
- }
- .jbprice-option-radio label:first-child,.jbprice-option-radio label.check:first-child {
- background: none;
- border: none;
- }
- .jbprice-option-radio label,
- .jbfilter .element-checkbox label,
- .jbfilter .element-radio label{
- display: block;
- background: #f6f6f6;
- padding: .4em 1em;
- border-radius: 18px;
- border: 1px solid #ddd;
- font-weight: normal;
- line-height: 1.4;
- position: relative;
- }
- .jbfilter .element-checkbox label.check,
- .jbfilter .element-radio label.check{
- padding-left: 30px;
- transition: 500ms all;
- }
- .jbprice-option-radio label input,
- .jbfilter .element-checkbox label input,
- .jbfilter .element-radio label input{
- opacity: 0;
- }
- .jbprice-option-radio label:before,
- .jbfilter .element-checkbox label:before,
- .jbfilter .element-radio label:before{
- font-family: fontAwesome;
- content: "\f00c";
- color: #fff;
- opacity: 0;
- margin-left: 0px;
- position: absolute;
- left: 10px;
- }
- .jbprice-option-radio label.check:before,
- .jbfilter .element-checkbox label.check:before,
- .jbfilter .element-radio label.check:before{
- opacity: 1;
- margin-left: 10px;
- transition: 500ms all;
- }
Далее сюда в настройках типов элементов.
Находим нужный параметр и ставим ему шаблон для фильтра флажки или Радио-кнопки
Ну и собственно всё для фильтра.
Теперь о странице товара
Идём в шаблон full для вашего типа товара
Добавляем там прям в конец файла
- jQuery(".jbprice-option-radio label:first-child input").prop('disabled', true);
- jQuery('.jbprice-option-radio label').click(function() {
- jQuery(this).closest('label').nextAll('label').removeClass('check');
- jQuery(this).closest('label').prevAll('label').removeClass('check');
- jQuery(this).closest('label').addClass('check');
- });
Код почти такой же как для фильтра. CSS тоже выше по тексту.
Потом идём в наши настройки параметров цены и ставим в шаблоне переключатель(radio)
Всё. Не забывайте чистить кэш после всех манипуляций.
Вот например что получилось у меня.
Карточку товара можно посмотреть здесь - https://mgmtrade.ru/tsd/dt50
Фильтр например здесь - https://mgmtrade.ru/...orubnoj-ruchkoj
Надеюсь смог кому-нибудь помочь.
Сообщение отредактировал Raven23: 13 April 2020 - 16:42