UMIhelp

Разработка сайта на UMI.CMS => Шаблоны XSLT => Тема начата: Sumrakrnd от 10 Июня 2016, 16:27:02

Название: Checkbox в фильтре в режиме "ИЛИ"
Отправлено: Sumrakrnd от 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/

Название: Re: Checkbox в фильтре в режиме "ИЛИ"
Отправлено: admin от 14 Июня 2016, 16:16:40
А вы говорите о параметры ИЛИ для значений одного поля с выпадающим списком множественного выбора? Например, выбор в фильтре 2 брендов, чтобы товары выводились либо одного, либо второго бренда. Так как этот вариант, вроде бы у вас уже реализован в шаблоне.

Или вы говорите о применении ИЛИ между полями?
Название: Re: Checkbox в фильтре в режиме "ИЛИ"
Отправлено: Sumrakrnd от 14 Июня 2016, 16:28:22
Мне надо, чтобы можно было фильтр делать по 2/3/и т.д. производителям, которые берутся из одного поля, т.е. в пределе поля, так?
Или надо было делать по другому как-то?

странно что вообще сделан запрет на выбор нескольких вариантов для чекбокса...
Название: Re: Checkbox в фильтре в режиме "ИЛИ"
Отправлено: admin от 15 Июня 2016, 14:12:13
дело в том, что у вас уже выведен шаблон (на уровне xslt шаблона), который позволяет выбрать несколько брендов, но у вас также работает js обработчик работы с фильтром.
При выборе любого бренда, система эта js блокирует все остальные бренды (добавляет атрибут disabled).
Так что, вам стоит покопаться в js.
Название: Re: Checkbox в фильтре в режиме "ИЛИ"
Отправлено: Sumrakrnd от 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
Название: Re: Checkbox в фильтре в режиме "ИЛИ"
Отправлено: admin от 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 и более брендов.
Название: Re: Checkbox в фильтре в режиме "ИЛИ"
Отправлено: Sumrakrnd от 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', '');
        },   

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

Но и соответственно не производит фильтрацию :(
Название: Re: Checkbox в фильтре в режиме "ИЛИ"
Отправлено: admin от 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, чтобы она не блокировала поле с брендами, а все остальные поля обрабатывала как раньше.
Название: Re: Checkbox в фильтре в режиме "ИЛИ"
Отправлено: Sumrakrnd от 15 Июня 2016, 16:27:20
Ух...
Сперва поругался на php, я поменяла:

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

на

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

И вроде заработало
Название: Re: Checkbox в фильтре в режиме "ИЛИ"
Отправлено: admin от 15 Июня 2016, 22:16:39
и при этом работает фильтрация по нескольким брендам через логическое ИЛИ?
Название: Re: Checkbox в фильтре в режиме "ИЛИ"
Отправлено: Sumrakrnd от 15 Июня 2016, 22:57:40
Ага, работает :-)
Хотя еще раз завтра потестирую на всякий случай.
Название: Re: Checkbox в фильтре в режиме "ИЛИ"
Отправлено: Sumrakrnd от 16 Июня 2016, 08:25:03
и при этом работает фильтрация по нескольким брендам через логическое ИЛИ?

Да, работает.
Название: Re: Checkbox в фильтре в режиме "ИЛИ"
Отправлено: john от 17 Июля 2016, 20:07:44
Как внедрить smart-filter? В версии Umi 2.9.7, его нету)
С чего начать, где его искать?
Я на локальном компе установил UMi и smart-filter там отлично работает.
Спасибо.
Название: Re: Checkbox в фильтре в режиме "ИЛИ"
Отправлено: e.ioffe от 17 Июля 2016, 22:32:20
Цитировать
Как внедрить smart-filter? В версии Umi 2.9.7, его нету)

Обновить до последней версии :)
Название: Re: Checkbox в фильтре в режиме "ИЛИ"
Отправлено: john от 17 Июля 2016, 22:35:34
Эх, к сожалению, поддержка закончилась и обновление не возможно.
Название: Re: Checkbox в фильтре в режиме "ИЛИ"
Отправлено: e.ioffe от 18 Июля 2016, 07:43:18
Поддержку всегда можно продлить :) Имхо, умный фильтр - очень хороший аргумент в пользу продления