Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”

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

*

sergeron

  • **
  • 59
  • +2/-0
    • Просмотр профиля
Re:Две цены для одного товара (фильтрация)
« Ответ #15 : 28 Апреля 2012, 17:47:41 »
неее... у меня фильтр вот такой
<xsl:template match="field[@data-type = 'price']" mode="search">		
<div class="grade">
<label class="right">
<span>
<xsl:text>&range-to; </xsl:text>
</span>
<input id="amount_to" type="text" name="fields_filter[cena][1]" value="{value_to}" class="textinputs" />
</label>
<label>
<span>
<xsl:value-of select="@title" />
<xsl:text> &range-from; </xsl:text>
</span>
<input id="amount_from" type="text" name="fields_filter[cena][0]" value="{value_to}" class="textinputs" />
</label>
</div>
</xsl:template>
я по типу price фильтрую, у меня и так поля price и cena2, которые для товара заполнены, сюда попадают. Еще одно поле мне не нужно по-идее. Это новое поле "cena" (как админ писал - любое) нужно для того , чтобы данные полей price и cena2 в него подставлять.

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Две цены для одного товара (фильтрация)
« Ответ #16 : 02 Мая 2012, 18:08:52 »
Исходный шаблон для поля типа "цена" не редактируй, то есть оставь его как дефолтный, а вот ниже него добавь свой например так (вывожу тобою приведенный дефолтный и новый ниже него)

<xsl:template match="field[@data-type = 'price' or @data-type = 'int' or @data-type = 'float']" mode="search">
<div class="grade">
<label class="right">
<span>
<xsl:text>&range-to;</xsl:text>
</span>
<input type="text" name="fields_filter[{@name}][1]" value="{value_to}" class="textinputs" />
</label>
<label>
<span>
<xsl:value-of select="@title" />
<xsl:text> &range-from;</xsl:text>
</span>
<input type="text" name="fields_filter[{@name}][0]" value="{value_from}" class="textinputs" />
</label>
</div>
</xsl:template>

<!--твой шаблон для поля цена-->
<xsl:template match="field[@name = 'cena']" mode="search">
<div class="grade">
<label class="right">
<span>
<xsl:text>&range-to;</xsl:text>
</span>
<input type="text" name="cena1" value="{value_to}" class="textinputs" />
</label>
<label>
<span>
<xsl:value-of select="@title" />
<xsl:text> &range-from;</xsl:text>
</span>
<input type="text" name="cena0" value="{value_from}" class="textinputs" />
</label>
</div>
</xsl:template>

после чего у тебя в фильтре появиться новое поле которые при использовании фильтра попадет в адресную строку в таком виде
?cena1=120&cena0=20

оттуда ты их можешь подхватить вставив в файл /xsltTpls/default.xsl

повыше <xsl:param name="p">0</xsl:param> свои параметры
<xsl:param name="cena0"></xsl:param>
<xsl:param name="cena1"></xsl:param>

после этого если ты где-то будешь вызывать usel запрос ты можешь использовать данные параметры и передавать их в usel.

И если ndqj usel лежит тут /usels/test.xml и выглядит так
<?xml version="1.0" encoding="utf-8"?>
<selection>
<target result="pages">
<type id="117" />
</target>
<option name="or-mode" value="1" />
<property name="price">
<min-value>{1}</min-value>
<max-value>{2}</max-value>
</property>
<property name="cena2">
<min-value>{1}</min-value>
<max-value>{2}</max-value>
</property>
</selection>
где type id = 117 это тип данных, в котором есть эти 2 поля цены (price и cena2). Если у тебя эти 2 поля с ценой есть во всех типах данных относящихся к базовому типу "Объект каталога", то пиши вместо строчки <type id="117" />, такую строчку <type module="catalog" method="object" />.

А вызов usel будет выглядеть примерно так:
<xsl:apply-templates select="document(concat('usel://test/',$cena0,'/',$cena1))/udata" mode="usel-result" />

и конечно шаблоны для результатов usel
 <xsl:template match="udata" mode="usel-result">
Результаты usel
<xsl:apply-templates select="page" mode="usel-result" />
</xsl:template>

<xsl:template match="page" mode="usel-result">
<h3><xsl:value-of select="position()"/>. <a href="{@link}"><xsl:value-of select="name" /></a></h3>
</xsl:template>


P.S. НО, опять же, проговорю что эту фильтрация по цене, которая должна попадать в диапазон 2 полей типа цена, заданных у объекта каталога, нельзя будет скомбинировать с другими полями для фильтрации.... смотри часть P.S. в моем посте выше

*

sergeron

  • **
  • 59
  • +2/-0
    • Просмотр профиля
Re:Две цены для одного товара (фильтрация)
« Ответ #17 : 03 Мая 2012, 00:05:51 »
Спасибо admin, промежуточный результат достигнут, т.е.  фильтр по цене работает, но не живет с остальными фильтрами, как и было предсказано  :) Хороший пример получился, по передаче параметров и usel.

*

KTI

  • **
  • 72
  • +1/-0
    • Просмотр профиля
Re:Две цены для одного товара (фильтрация)
« Ответ #18 : 05 Мая 2012, 09:11:43 »
я так не понял, зачем нужны эти дополнительные поля для фильтрации cena0, cena1. Если в запросе и в поле "price" и в поле "cena2" используются одни и те-же параметры. Почему нельзя было тогда просто price передать

*

sergeron

  • **
  • 59
  • +2/-0
    • Просмотр профиля
Re:Две цены для одного товара (фильтрация)
« Ответ #19 : 05 Мая 2012, 12:29:31 »
Честно говоря сам не очень понимаю, видимо нельзя работать с полем price, а надо вместо него делать другое

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Две цены для одного товара (фильтрация)
« Ответ #20 : 27 Мая 2012, 01:33:53 »
если я правильно помню, sergeron, то 2 цены нужны чтобы задавать стоимость минимальную у данного товара и максимальную, а вся задумкав том, чтобы при поиске по интервалу цен учитывались оба поля.

Как я уже и говорил, стоит попробовать сделать разные цены через механизм опционных свойств