Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”
Источники значений & в интернет-магазине "

Автор diii3Раздел Шаблоны XSLT

Ответов: 2
Просмотров: 2894
Последний ответ 10 Ноября 2012, 22:04:18
от diii3
Проблема с модулем "Обратная связь-->Шабло&

Автор don_basilioРаздел Настройка системы и модулей

Ответов: 2
Просмотров: 3049
Последний ответ 14 Ноября 2011, 20:13:47
от don_basilio
Смена последовательности фильтруемых параметрах в фильтре XSLT

Автор shotoРаздел Шаблоны XSLT

Ответов: 4
Просмотров: 2967
Последний ответ 02 Августа 2012, 17:15:33
от admin
Порядок отображения свойств в умном фильтре.

Автор s.kirillРаздел Шаблоны PHP

Ответов: 3
Просмотров: 2157
Последний ответ 31 Августа 2016, 22:34:36
от aghigay
Сортировка выпадающего списка в фильтре

Автор koroganРаздел Макросы UMI.CMS

Ответов: 4
Просмотров: 4812
Последний ответ 07 Июля 2012, 13:28:53
от korogan

0 Пользователей и 1 Гость просматривают эту тему.

*

Sumrakrnd

  • ****
  • 311
  • +1/-0
  • Учусь «на примерах»
    • Просмотр профиля
Checkbox в фильтре в режиме "ИЛИ"
« : 10 Июня 2016, 16:27:02 »
Доброго времени суток.
Сделала фильтр, почти все хорошо, но вот нету как оказывается у Umi готового шаблона с передачей параметров в режиме "ИЛИ".
Как можно сделать передачу значения с один и тем-же get-параметром массивом?

У меня фильтр идет через getSmatrFilter:
<xsl:variable name="filters" select="document(concat('udata://catalog/getSmartFilters//', $document-page-id, '/0/3'))/udata" />

Вот немного кода:
<xsl:template match="udata[@method = 'getSmartFilters'][group]">
<xsl:variable name="fields" select="//field" />

<form class="catalog_filter filter_main_form" data-category="{@category-id}">
<xsl:for-each select="$fields[position() mod 2 = 1]">
<xsl:variable name="current" select="current()" />
<xsl:variable name="next" select="$fields[@name = $current/@name]//following::field[1]"/>

<xsl:if test="current()">
<xsl:apply-templates select="current()"  mode="filter" />
</xsl:if>
<xsl:if test="$next">
<xsl:apply-templates select="$next"  mode="filter" />
</xsl:if>
</xsl:for-each>

<div class="clear"></div>
<input class="reset" type="button" value="&reset;" id="reset"/>
<input class="button" type="submit" value="&apply;" id="show_result"/>
</form>
</xsl:template>


<xsl:template match="field" mode="filter">
<legend><xsl:value-of select="@title" /></legend>
<fieldset class="data">
<xsl:apply-templates select="." mode="filter_field"/>
</fieldset>
</xsl:template>

<xsl:template match="field" mode="filter_field">
<fieldset class="checkbox-list">
<xsl:apply-templates select="item" mode="filter_field" />
</fieldset>
</xsl:template>

<xsl:template match="field/item" mode="filter_field">
<label>
<input type="checkbox" name="{$filter}[{../@name}][{position() - 1}][]" value="{.}" />
<span></span>
<xsl:value-of select="." />
</label>
</xsl:template>

Сайт с фильтром вот:
http://ruki24.aveas.ru/magazin/


*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re: Checkbox в фильтре в режиме "ИЛИ"
« Ответ #1 : 14 Июня 2016, 16:16:40 »
А вы говорите о параметры ИЛИ для значений одного поля с выпадающим списком множественного выбора? Например, выбор в фильтре 2 брендов, чтобы товары выводились либо одного, либо второго бренда. Так как этот вариант, вроде бы у вас уже реализован в шаблоне.

Или вы говорите о применении ИЛИ между полями?

*

Sumrakrnd

  • ****
  • 311
  • +1/-0
  • Учусь «на примерах»
    • Просмотр профиля
Re: Checkbox в фильтре в режиме "ИЛИ"
« Ответ #2 : 14 Июня 2016, 16:28:22 »
Мне надо, чтобы можно было фильтр делать по 2/3/и т.д. производителям, которые берутся из одного поля, т.е. в пределе поля, так?
Или надо было делать по другому как-то?

странно что вообще сделан запрет на выбор нескольких вариантов для чекбокса...

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re: Checkbox в фильтре в режиме "ИЛИ"
« Ответ #3 : 15 Июня 2016, 14:12:13 »
дело в том, что у вас уже выведен шаблон (на уровне xslt шаблона), который позволяет выбрать несколько брендов, но у вас также работает js обработчик работы с фильтром.
При выборе любого бренда, система эта js блокирует все остальные бренды (добавляет атрибут disabled).
Так что, вам стоит покопаться в js.

*

Sumrakrnd

  • ****
  • 311
  • +1/-0
  • Учусь «на примерах»
    • Просмотр профиля
Re: Checkbox в фильтре в режиме "ИЛИ"
« Ответ #4 : 15 Июня 2016, 14:23:37 »
Пыталась, но если что-то начинаю делать с js, начинает ругаться php...
Поэтому и думала, может кто-то уже делал этот функционал...

Я находила только для search filter реализацию.. но в getSmatrFilter это не срабатывает...

Вот она:
http://wiki.umisoft.ru/%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%87%D0%B5%D0%BA%D0%B1%D0%BE%D0%BA%D1%81%D0%BE%D0%B2_%D0%BF%D1%80%D0%B8_%D1%84%D0%B8%D0%BB%D1%8C%D1%82%D1%80%D0%B0%D1%86%D0%B8%D0%B8

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re: Checkbox в фильтре в режиме "ИЛИ"
« Ответ #5 : 15 Июня 2016, 14:57:45 »
как именно ругается php?

ваш пример из wiki.umisoft не подойдет по 2 причинам
1. потому что catalog search() и catalog getSmatrFilter() работают по разным принципам и возвращают немного отличающийся xml
2. у вас нет проблем с xslt шаблоном? у вас проблема с js обработчиком

P.S. попробуйте для эксперимента, закомментировать все содержимое файла /templates/demodizzy/js/filters.js и фильтр позволит вам выбирать по 2 и более брендов.

*

Sumrakrnd

  • ****
  • 311
  • +1/-0
  • Учусь «на примерах»
    • Просмотр профиля
Re: Checkbox в фильтре в режиме "ИЛИ"
« Ответ #6 : 15 Июня 2016, 15:49:03 »
ваш пример из wiki.umisoft не подойдет по 2 причинам
1. потому что catalog search() и catalog getSmatrFilter() работают по разным принципам и возвращают немного отличающийся xml
2. у вас нет проблем с xslt шаблоном? у вас проблема с js обработчиком
Я понимаю по разным принципам, просто пыталась как-нибудь адаптировать идею, но не вышло :(

P.S. попробуйте для эксперимента, закомментировать все содержимое файла /templates/demodizzy/js/filters.js и фильтр позволит вам выбирать по 2 и более брендов.
Делала тоже, ругается на это он вот так:
Warning: htmlspecialchars() expects parameter 1 to be string, array given in /home/aveas/sites/ruki24.aveas.ru/main/classes/system/subsystems/models/filter/FilterQueriesMaker.php on line 2 Warning: htmlspecialchars() expects parameter 1 to be string, array given in /home/aveas/sites/ruki24.aveas.ru/main/classes/system/subsystems/models/filter/FilterQueriesMaker.php on line 2 Warning: htmlspecialchars() expects parameter 1 to be string, array given in /home/aveas/sites/ruki24.aveas.ru/main/classes/system/subsystems/models/filter/FilterQueriesMaker.php on line 2 Warning: htmlspecialchars() expects parameter 1 to be string, array given in /home/aveas/sites/ruki24.aveas.ru/main/classes/system/subsystems/models/filter/FilterQueriesMaker.php on line 2 


Если допустим я убираю вот эти строки:
        /**
         * Сделать поле активным
         * @param {HTMLElement} field поле
         */
          /*  makeActive: function(field) {
            $(field).parent().removeClass('inactive');
            $(field).removeAttr('disabled');
        },   

        /**
         * Сделать поле неактивным
         * @param {HTMLElement} field поле
         */
           makeInActive: function(field) {
            $(field).parent().addClass('inactive');
            $(field).attr('disabled', '');
        },   

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

Но и соответственно не производит фильтрацию :(

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re: Checkbox в фильтре в режиме "ИЛИ"
« Ответ #7 : 15 Июня 2016, 16:07:45 »
для эксперимента, попробуйте изменить
/**
         * Сделать поле неактивным
         * @param {HTMLElement} field поле
         */
           makeInActive: function(field) {
            $(field).parent().addClass('inactive');
            $(field).attr('disabled', '');
        }, 

на
/**
         * Сделать поле неактивным
         * @param {HTMLElement} field поле
         */
           makeInActive: function(field) {
            $(field).parent().removeClass('inactive');
            $(field).removeAttr('disabled');
        }, 

Скорее всего вы сможете выбирать по 2 бренда, но у вас часто будут появляться пустые результаты фильтра

Если все так и будет, поработайте с функцией js, чтобы она не блокировала поле с брендами, а все остальные поля обрабатывала как раньше.

*

Sumrakrnd

  • ****
  • 311
  • +1/-0
  • Учусь «на примерах»
    • Просмотр профиля
Re: Checkbox в фильтре в режиме "ИЛИ"
« Ответ #8 : 15 Июня 2016, 16:27:20 »
Ух...
Сперва поругался на php, я поменяла:

<input type="checkbox" name="{$filter}[{../@name}][{position() - 1}][]" value="{.}" />

на

<input type="checkbox" name="{$filter}[{../@name}][{position() - 1}]" value="{.}" />

И вроде заработало

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re: Checkbox в фильтре в режиме "ИЛИ"
« Ответ #9 : 15 Июня 2016, 22:16:39 »
и при этом работает фильтрация по нескольким брендам через логическое ИЛИ?

*

Sumrakrnd

  • ****
  • 311
  • +1/-0
  • Учусь «на примерах»
    • Просмотр профиля
Re: Checkbox в фильтре в режиме "ИЛИ"
« Ответ #10 : 15 Июня 2016, 22:57:40 »
Ага, работает :-)
Хотя еще раз завтра потестирую на всякий случай.

*

Sumrakrnd

  • ****
  • 311
  • +1/-0
  • Учусь «на примерах»
    • Просмотр профиля
Re: Checkbox в фильтре в режиме "ИЛИ"
« Ответ #11 : 16 Июня 2016, 08:25:03 »
и при этом работает фильтрация по нескольким брендам через логическое ИЛИ?

Да, работает.

*

john

  • ***
  • 207
  • +6/-0
    • Просмотр профиля
Re: Checkbox в фильтре в режиме "ИЛИ"
« Ответ #12 : 17 Июля 2016, 20:07:44 »
Как внедрить smart-filter? В версии Umi 2.9.7, его нету)
С чего начать, где его искать?
Я на локальном компе установил UMi и smart-filter там отлично работает.
Спасибо.
« Последнее редактирование: 17 Июля 2016, 22:22:53 от john »

*

e.ioffe

  • ****
  • 369
  • +81/-2
  • Профессиональная разработка на UMI.CMS.
    • Просмотр профиля
    • Fullspace - Лучший хостинг для UMI.CMS
Re: Checkbox в фильтре в режиме "ИЛИ"
« Ответ #13 : 17 Июля 2016, 22:32:20 »
Цитировать
Как внедрить smart-filter? В версии Umi 2.9.7, его нету)

Обновить до последней версии :)
Ускорение сайта на UMI.CMS - http://speed.umispec.ru/

*

john

  • ***
  • 207
  • +6/-0
    • Просмотр профиля
Re: Checkbox в фильтре в режиме "ИЛИ"
« Ответ #14 : 17 Июля 2016, 22:35:34 »
Эх, к сожалению, поддержка закончилась и обновление не возможно.