Перейти к содержимому


Фотография
- - - - -

Убираем Jquery.ui Из Вариантов Цены И Фильтра

фильтр карточка товара рецепт

В теме одно сообщение

#1 Raven23

Raven23

Отправлено 13 April 2020 - 16:22

Всем доброго времени суток.

Думаю все замечали что в фильтре ,пардон, шаблон для фильтра "кнопки jQuery.ui" работают не очень хорошо. И было бы замечательно от этого jQuery.UI вообще избавиться. Но как показать пользователю что он отметил какой-нибудь чекбокс?

В идеале хотелось бы чтобы и какая-нибудь "галочка" появлялась и кнопка красилась.

Как то так примерно.

done.png

До кучи ещё очень сильно бесили скачки, когда на странице товара подключаются варианты цены при помощи jQuery UI.Buttons.

Вот так например.

jbprice1.png

 

Сперва о фильтре

Собственно идём в modules/mod_jbzoo_search/renderer/item/accordion.php, если у вас шаблон в модуле стоит Accordeon.

module.png

 

И там добавляем код javascript. Заранее прошу прощения за качество кода, программист из меня так себе. И наверняка его(код) можно улучшить.

  1. <script>
  2. jQuery('.jbfilter .element-checkbox label input').click(function() {
  3. if (jQuery(this).is(':checked')){
  4. jQuery(this).closest('label').addClass('check');
  5. } else {
  6. jQuery(this).closest('label').removeClass('check');
  7. }
  8. });
  9. </script>
  10. <script>
  11. jQuery (document).ready(function() {
  12. jQuery('.jbfilter .element-radio label input').click(function() {
  13. jQuery(this).closest('label').nextAll('label').removeClass('check');
  14. jQuery(this).closest('label').prevAll('label').removeClass('check');
  15. jQuery(this).closest('label').addClass('check');
  16. });
  17. });
  18. </script>
  19. <script>
  20. jQuery (document).ready(function() {
  21. jQuery('.jbfilter .jsReset').click(function() {
  22. jQuery('.jbfilter .element-checkbox label').removeClass('check');
  23. jQuery('.jbfilter .element-radio label').removeClass('check');
  24. });
  25. });
  26. </script>

Суть в том, чтобы при клике на параметр checkbox, к тегу label добавлялся класс "check", при повторном клике этот класс убирается.

Для radio логика примерно такая-же, только там классы убираются у соседних элементов.

Нажатие на сброс будет удалять все классы "check" у элементов фильтра.

 

Далее нам останется только стилизовать элементы при помощи css. Примерно так. У вас css будет точно другой, код ниже скорее для примера.

  1. .check {
  2. background: var(--a-color1) !important;
  3. color: #fff !important;
  4. }
  5. .jbprice-option-radio,
  6. .jbfilter .element-checkbox label,
  7. .jbfilter .element-radio label{
  8. font-size: 1.1em;
  9. }
  10. .jbprice-option-radio label:first-child,.jbprice-option-radio label.check:first-child {
  11. background: none;
  12. border: none;
  13. }
  14.  
  15. .jbprice-option-radio label,
  16. .jbfilter .element-checkbox label,
  17. .jbfilter .element-radio label{
  18. display: block;
  19. background: #f6f6f6;
  20. padding: .4em 1em;
  21. border-radius: 18px;
  22. border: 1px solid #ddd;
  23. font-weight: normal;
  24. line-height: 1.4;
  25. position: relative;
  26. }
  27. .jbfilter .element-checkbox label.check,
  28. .jbfilter .element-radio label.check{
  29. padding-left: 30px;
  30. transition: 500ms all;
  31. }
  32. .jbprice-option-radio label input,
  33. .jbfilter .element-checkbox label input,
  34. .jbfilter .element-radio label input{
  35. opacity: 0;
  36. }
  37. .jbprice-option-radio label:before,
  38. .jbfilter .element-checkbox label:before,
  39. .jbfilter .element-radio label:before{
  40. font-family: fontAwesome;
  41. content: "\f00c";
  42. color: #fff;
  43. opacity: 0;
  44. margin-left: 0px;
  45. position: absolute;
  46. left: 10px;
  47. }
  48. .jbprice-option-radio label.check:before,
  49. .jbfilter .element-checkbox label.check:before,
  50. .jbfilter .element-radio label.check:before{
  51. opacity: 1;
  52. margin-left: 10px;
  53. transition: 500ms all;
  54. }
  55.  
  56.  

Далее сюда в настройках типов элементов.

acc.png

Находим нужный параметр и ставим ему шаблон для фильтра флажки или Радио-кнопки

2020-04-13_165440.png

Ну и собственно всё для фильтра.

 

Теперь о странице товара
 

Идём в шаблон full для вашего типа товара

Добавляем там прям в конец файла

  1. jQuery(".jbprice-option-radio label:first-child input").prop('disabled', true);
  2. jQuery('.jbprice-option-radio label').click(function() {
  3. jQuery(this).closest('label').nextAll('label').removeClass('check');
  4. jQuery(this).closest('label').prevAll('label').removeClass('check');
  5. jQuery(this).closest('label').addClass('check');
  6. });

Код почти такой же как для фильтра. CSS тоже выше по тексту.

Потом идём в наши настройки параметров цены и ставим в шаблоне переключатель(radio)

jbprice2.png

Всё. Не забывайте чистить кэш после всех манипуляций.

 

Вот например что получилось у меня.

Карточку товара можно посмотреть здесь - https://mgmtrade.ru/tsd/dt50
Фильтр например здесь - https://mgmtrade.ru/...orubnoj-ruchkoj

 

Надеюсь смог кому-нибудь помочь.
 

 


Сообщение отредактировал Raven23: 13 April 2020 - 16:42


#2 Raven23

Raven23

Отправлено 23 November 2020 - 10:48

Немного поправил отображение отмеченных товаров в фильтре. Если чекбокс отмечен, то к label добавляется класс check.

 

 

Raven23 сказал(а) 13 Апр 2020 - 15:22:

Собственно идём в modules/mod_jbzoo_search/renderer/item/accordion.php, если у вас шаблон в модуле стоит Accordeon.

и добавляем в в скрипты.

  1. jQuery('.jbfilter .element-checkbox label input:checked').closest('label').addClass('check');
  2. jQuery('.jbfilter .element-radio label input:checked').closest('label').addClass('check');

У себя добавил так:

  1. <script>
  2. jQuery('.jbfilter .element-checkbox label input').click(function() {
  3. if (jQuery(this).is(':checked')){
  4. jQuery(this).closest('label').addClass('check');
  5. } else {
  6. jQuery(this).closest('label').removeClass('check');
  7. }
  8. });
  9. </script>
  10. <script>
  11. jQuery (document).ready(function() {
  12. jQuery('.jbfilter .element-radio label input').click(function() {
  13. jQuery(this).closest('label').nextAll('label').removeClass('check');
  14. jQuery(this).closest('label').prevAll('label').removeClass('check');
  15. jQuery(this).closest('label').addClass('check');
  16. });
  17. jQuery('.jbfilter .element-checkbox label input:checked').closest('label').addClass('check');
  18. jQuery('.jbfilter .element-radio label input:checked').closest('label').addClass('check');
  19. });
  20. </script>
  21. <script>
  22. jQuery (document).ready(function() {
  23. jQuery('.jbfilter .jsReset').click(function() {
  24. jQuery('.jbfilter .element-checkbox label').removeClass('check');
  25. jQuery('.jbfilter .element-radio label').removeClass('check');
  26. });
  27. });
  28. </script>

Сообщение отредактировал Raven23: 23 November 2020 - 11:04






Темы с аналогичным тегами фильтр, карточка товара, рецепт

Click to return to top of page in style!