Доброго времени суток.
Сделала фильтр, почти все хорошо, но вот нету как оказывается у 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/
ваш пример из 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', '');
},
То ругается он так же... и так же позволяет выбрать несколько брендов.
Но и соответственно не производит фильтрацию :(
для эксперимента, попробуйте изменить
/**
* Сделать поле неактивным
* @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, чтобы она не блокировала поле с брендами, а все остальные поля обрабатывала как раньше.
Ух...
Сперва поругался на php, я поменяла:
<input type="checkbox" name="{$filter}[{../@name}][{position() - 1}][]" value="{.}" />
на
<input type="checkbox" name="{$filter}[{../@name}][{position() - 1}]" value="{.}" />
И вроде заработало