Добрый день, уважаемые форумчане. :)
Пытаюсь решить следующую задачу:
К каждому товару, в каталоге, необходимо иметь возможность добавлять набор тегов. Далее, на каждой странице необходимо отображать блок с этими тегами в виде ссылок. По клику на ссылку - получаем список товаров с этим тегом.
Собственно сами теги буду хранить в справочнике, в выпадающем списке с множественным выбором.
1) Значения из этого справочника нахожу с помощью Usel (guide.xml):
<selection>
<target result="objects">
<type id="{1}" />
</target>
</selection>
где {1} - id справочника.
2) В шаблоне сами значения справочника получаю так:
<xsl:apply-templates select="document(concat('usel://guide/',137))/udata/item" mode="tag_list"/>
3) Далее используя Usel выборку catalog-tags.xml получаю товары, у которых проставлены теги:
<selection>
<target result="pages">
<type module="catalog" method="object" />
</target>
<property name="tegi_dlya_tovarov">
<object>{1}</object>
</property>
<limit page="0">{limit}</limit>
</selection>
где {1} - id определенного значения из справочника.
Данная выборка возвращает следующий xml:
<udata xmlns:xlink="http://www.w3.org/TR/xlink" module="usel" method="catalog-tags" generation-time="0.078008">
<page id="60" parentId="40" link="/shop/dvd_tehnika/dvd_rekordery/dual_c819/" is-active="1" object-id="425" type-id="126" update-time="1406131339" alt-name="dual_c819" xlink:href="upage://60">
<basetype id="56" module="catalog" method="object">Объекты каталога</basetype>
<name>Dual C-819</name>
</page>
<page id="59" parentId="39" link="/shop/dvd_tehnika/dvd_pleery/toshiba_srq660/" is-active="1" object-id="422" type-id="126" update-time="1406142990" alt-name="toshiba_srq660" xlink:href="upage://59">
<basetype id="56" module="catalog" method="object">Объекты каталога</basetype>
<name>Toshiba SR-Q660</name>
</page>
<total>2</total>
</udata>
4) В шаблоне вызов выглядит следующим образом:
<xsl:apply-templates select="document(concat('usel://catalog-tags/',@id))/udata" mode="tag_list"/>
Т.е. на данный момент я имею:
1) наименования значения из нужного справочника (которые, по задумке должны стать ссылками)
2) Перечень товаров у которых проставлены теги.
Ступор возник в том, что я не понимаю каким образом я могу сформировать href для ссылок, для того, чтобы при переходе по ним сгенерилась страница с искомыми товарами.
Очень нужна ваша помощь. :)
Пытаюсь решить следующую задачу:
К каждому товару, в каталоге, необходимо иметь возможность добавлять набор тегов. Далее, на каждой странице необходимо отображать блок с этими тегами в виде ссылок. По клику на ссылку - получаем список товаров с этим тегом.
Почему не пошли путем использования поля "Теги", а решили организовать работу через справочник?
Ступор возник в том, что я не понимаю каким образом я могу сформировать href для ссылок, для того, чтобы при переходе по ним сгенерилась страница с искомыми товарами.
Вам надо в определенном месте выводить список ссылок (шаблон, который обрабатывает usel запрос на вывод элементов справочника с тегами)
это будет выглядеть примерно так
<a href="ссылка_на_страницу_с_результатами_usel_выборки_по_тегу?tag={@id}">@name</a>
Страница с результатами usel выборки по тегу - будет представлять из себя любую страницу, для которой будет создан вызов usel выборки товаров с таким тегом в xslt шаблоне. К примеру, создадим обычную статичную страницу специально созданную для этих целей. И напишем для неё спец шаблон (по id данной странице) вывода контента , а под ним вывод usel запроса таким образом
<xsl:apply-templates select="document(concat('usel://catalog-tags/',$tag))/udata" mode="tag_list"/>
А чтобы наш ?tag из адресной строки попадал в $tag переменную, мы объявим глобальную переменную
в случае demodizzy, это надо делать в файле /temlates/demodizzy/xslt/default.xsl
Страница с результатами usel выборки по тегу - будет представлять из себя любую страницу, для которой будет создан вызов usel выборки товаров с таким тегом в xslt шаблоне. К примеру, создадим обычную статичную страницу специально созданную для этих целей. И напишем для неё спец шаблон (по id данной странице) вывода контента , а под ним вывод usel запроса таким образом
Не получается написать шаблон для странцы вывод товаров на этой странице... :(
Собственно в xslt\modules\catalog создал 2 шаблона guide.xsl и catalog-tags.xsl.
guide.xsl:
<xsl:template match="udata/item" mode="tag_list">
<a href="/tegi_tovarov/?tag={@id}"><xsl:value-of select="@name" /></a>
</xsl:template>
А с catalog-tags.xsl возникла проблема - шаблоне не срабатывает:
<xsl:template match="udata/page[@id = '190']" >
<xsl:apply-templates select="document(concat('usel://catalog-tags/',$tag))/udata"/>
</xsl:template>
Что я делаю не так?
И все таки интересно узнать как можно реализовать через стандартное поле "Теги"
А с catalog-tags.xsl возникла проблема - шаблоне не срабатывает
Разобрался. :) Неверно прописал значение в match, вот так - работает:
<xsl:template match="/result[@pageId = '190']">
<xsl:apply-templates select="document(concat('usel://catalog-tags/',$tag))/udata"/>
</xsl:template>
Столкнулся с очередной проблемой при переносе сделанного на реальный сайт.
На нем совершенно не хочет работать тег property из протокола usel
Вот такой xml возвращает абсолютно все товары, не фильтруя их:
<selection>
<target expected-result="pages">
<type module="catalog" method="object" />
</target>
<property name="tegi_dlya_tovarov">
<object>{1}</object>
</property>
</selection>
Пробовал подставлять даже в качестве property "h1" с определенным value, все равно выводятся всеобъекты каталога.
Где может быть собака зарыта?
Код в студию
Вот так выводятся все объекты каталога:
<selection>
<target expected-result="pages">
<type module="catalog" method="object" />
</target>
<property name="h1" value="Ягоды Годжи, сушеные (Goji Berries)" />
</selection>
Хотя такой h1 точно есть у объекта каталога:
<property id="125" name="h1" type="string">
<title>Поле H1</title>
<value>Ягоды Годжи, сушеные (Goji Berries)</value>
</property>
а вы уверены что у вас в типе данных "объект каталога" есть поле "tegi_dlya_tovarov"?
Да, абсолютно