UMIhelp

Разработка сайта на UMI.CMS => Шаблоны TPL => Тема начата: albion от 16 Июля 2011, 10:06:30

Название: Умный фильтр товаров
Отправлено: albion от 16 Июля 2011, 10:06:30
К примеру есть интернет магазин бытовой техники. Все товары находятся в одном каталоге, но у каждого товара есть 3 единых поля - это тип товара, бренд и к примеру цвет.

Есть ли какая нибудь возможность или кто нибудь когда нибудь такое делал:

Выводится фильтр товаров с 3 выпадающими списками. И в зависимости от выбора в одном выпадающем списки, содержание двух других изменялось. Т.е. если в качестве бренда допустим выбран Электролюкс, то в выпадающем списке тип товара остались бы только те товары, которые произвела компания Электролюкс, а в выпадающем списки цвет - остались бы наименования только того цвета товаров, которые есть в инет магазине.
Название: Re:Умный фильтр товаров
Отправлено: admin от 16 Июля 2011, 17:16:40
дефолтного способа нет, обычно для этого пишеться кастомный макрос.

по событию выбора списка делается ajax запрос к функции которая возвращает нужные цвета
Название: Re:Умный фильтр товаров
Отправлено: albion от 17 Июля 2011, 12:10:19
Это понятно, что дефолтового способа нет. Вот и спрашиваю - кто нибудь когда нибудь делал такое? Может кто и выложит скрипт кастомный? :)
Название: Re:Умный фильтр товаров
Отправлено: admin от 18 Июля 2011, 01:15:58
делал несколько раз, но каждый раз переделывал под конкретную задачу. какого единого алгоритма нет. из скриптов там выборка из базы с параметрами индивидуальными для каждой задачи +ajax обработчик срабатывающий на select onchange.

Просто выложить код не вижу смысла, в нем много будет непонятным и путающим) проще решать конкретно поставленную задачу
Название: Re:Умный фильтр товаров
Отправлено: korogan от 15 Мая 2012, 21:38:31
Подскажите пожалуйста как такое можно реализовать на TPL шаблонизаторе

http://wiki.umisoft.ru/%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BA%D0%B0%D1%81%D1%82%D0%BE%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D0%B4%D0%BB%D1%8F_%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%B0_%D0%BE%D1%82%D1%84%D0%B8%D0%BB%D1%8C%D1%82%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B2%D1%8B%D0%BF%D0%B0%D0%B4%D0%B0%D1%8E%D1%89%D0%B5%D0%B3%D0%BE_%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B0 (http://wiki.umisoft.ru/%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BA%D0%B0%D1%81%D1%82%D0%BE%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D0%B4%D0%BB%D1%8F_%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%B0_%D0%BE%D1%82%D1%84%D0%B8%D0%BB%D1%8C%D1%82%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B2%D1%8B%D0%BF%D0%B0%D0%B4%D0%B0%D1%8E%D1%89%D0%B5%D0%B3%D0%BE_%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B0)

В XSL-файле, в котором формируются фильтры для поиска, пропишем вызов нашего кастомного метода (для демо сайта это файл \xsltTpls\modules\catalog\search-filter.xsl):

<xsl:apply-templates select="document(concat('udata://custom/selectart/', $document-page-id))" />

$document-page-id - переменная, в которой хранится id текущей страницы. В этом же XSL-файле пропишем шаблоны для формирования выпадающего списка:

<xsl:template match="udata[@method = 'selectart']">
  <div>
    <label>
      <span>
        <xsl:text>Артикул</xsl:text>
      </span>
      <select name="fields_filter[artikul]">
        <option>Выберите артикул</option>
        <option>---</option>
        <xsl:apply-templates select="items/item" mode="artikul" />
      </select>
    </label>
  </div>
</xsl:template>
<xsl:template match="item" mode="artikul">
  <option value="{@value}">
    <xsl:if test="@selected">
      <xsl:attribute name="selected">
        <xsl:text>selected</xsl:text>
      </xsl:attribute>
    </xsl:if>
    <xsl:value-of select="@value" />
  </option>
</xsl:template>

Кастомный метод построен таким образом, что последнее выбранное значение сохраняется после окончания поиска.

Пример результата работы метода selectart:

<udata xmlns:xlink="http://www.w3.org/TR/xlink" module="custom" method="selectart" generation-time="0.100543">
  <items>
    <item value="Экзотика"/>
    <item value="Мечта"/>
    <item value="Luxus"/>
    <item value="Bella Vita"/>
    <item value="Verossa"/>
  </items>
</udata>

Что делать тут если у меня TPL шаблонизатор?
Объясните пожалуйста!!!