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

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

*

FelixTheCat

  • *
  • 7
  • +0/-0
    • Просмотр профиля
Добрый день, уважаемые форумчане.  :)

Пытаюсь решить следующую задачу:

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

Собственно сами теги буду хранить в справочнике, в выпадающем списке с множественным выбором.

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 для ссылок, для того, чтобы при переходе по ним сгенерилась страница с искомыми товарами.

Очень нужна ваша помощь. :)



*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Пытаюсь решить следующую задачу:

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

Почему не пошли путем использования поля "Теги", а решили организовать работу через справочник?

Ступор возник в том, что я не понимаю каким образом я могу сформировать 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 переменную, мы объявим глобальную переменную
<xsl:param name="tag" />

в случае demodizzy, это надо делать в файле /temlates/demodizzy/xslt/default.xsl

*

FelixTheCat

  • *
  • 7
  • +0/-0
    • Просмотр профиля
Большое спасибо за ответ, суть уловил, попробую и отпишусь. :)

Цитировать
Почему не пошли путем использования поля "Теги", а решили организовать работу через справочник?

Я думал про это поле, но не понял как реализовать данную задачу с помощью него. Ведь макрос udata://stat/tagsCloud выводит облако собранных тегов сайта.

Могу ли я указав в поле "Теги" в товаре_1 значения, например, Тег_1, Тег_2, а в товаре_2 к примеру Тег_2, Тег_3 вывести на сайте облако тегов - Тег_1, Тег_2, Тег_3 и при переходе по ним получать страницу с товарами?
« Последнее редактирование: 24 Июля 2014, 11:32:26 от FelixTheCat »

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Большое спасибо за ответ, суть уловил, попробую и отпишусь. :)
Могу ли я указав в поле "Теги" в товаре_1 значения, например, Тег_1, Тег_2, а в товаре_2 к примеру Тег_2, Тег_3 вывести на сайте облако тегов - Тег_1, Тег_2, Тег_3 и при переходе по ним получать страницу с товарами?


Да

*

FelixTheCat

  • *
  • 7
  • +0/-0
    • Просмотр профиля
Цитировать
Да
Не могли бы Вы немного рассказать о том как реализовать данную задачу через теги?
По тегам я нашел пожалуй только эту статью в документации http://help.docs.umi-cms.ru/rabota_s_modulyami/modul_bannery/kak_polzovatsya_tegami/, но там нет конкретики

*

FelixTheCat

  • *
  • 7
  • +0/-0
    • Просмотр профиля
Цитировать
Страница с результатами 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>

Что я делаю не так?

И все таки интересно узнать как можно реализовать через стандартное поле "Теги"

*

FelixTheCat

  • *
  • 7
  • +0/-0
    • Просмотр профиля
Цитировать
А с catalog-tags.xsl возникла проблема - шаблоне не срабатывает

Разобрался. :) Неверно прописал значение в match, вот так - работает:

<xsl:template match="/result[@pageId = '190']">
<xsl:apply-templates select="document(concat('usel://catalog-tags/',$tag))/udata"/>
</xsl:template>

*

FelixTheCat

  • *
  • 7
  • +0/-0
    • Просмотр профиля
Столкнулся с очередной проблемой при переносе сделанного на реальный сайт.
На нем совершенно не хочет работать тег 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, все равно выводятся всеобъекты каталога.

Где может быть собака зарыта?

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Пробовал подставлять даже в качестве property "h1" с определенным value, все равно выводятся всеобъекты каталога.

Код в студию

Где может быть собака зарыта?

а вы уверены что у вас в типе данных "объект каталога" есть поле "tegi_dlya_tovarov"?

*

FelixTheCat

  • *
  • 7
  • +0/-0
    • Просмотр профиля
Цитировать
Код в студию

Вот так выводятся все объекты каталога:

<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"?

Да, абсолютно
« Последнее редактирование: 26 Июля 2014, 11:02:06 от FelixTheCat »