шаг 1: В админке - Модули - Шаблон данных - в типе данных "Объект каталога" -
создал поле "Страницы на которых выводить товар", идентификатор "ssylka_na_obekt"
тип - ссылка на дерево.
шаг 2: В папке /templates/demodizzy/usels/ создал файл getSection.xml, id - это раздел каталога в котором есть другие подразделы
и внутри которых имеются объекты каталога, внутри которых мы выбираем в каких разделах отображать его.
<page>{1}</page> к чему это не разобрался
С текстом
<?xml version="1.0" encoding="utf-8"?>
<selection>
<target result="pages">
<type id="207" />
</target>
<property name="ssylka_na_obekt">
<page>{1}</page>
</property>
</selection>
Шаг 3: Куда размещать и как размещать этот код, тоже не разберусь.
попробовал прям сюда /xslt/modules/catalog/category-view.xsl
Результат ноль.
<xsl:template name="other-catalog">
<h3>Этот товар отмечен в следующих разделах:</h3>
<xsl:apply-templates select="document('usel://getSection')/udata/page" mode="getSection">
<xsl:with-param name="this_page" select="@id" />
</xsl:apply-templates>
</xsl:template>
<xsl:template match="page" mode="getSection">
<xsl:param name="this_page" />
<xsl:apply-templates select="document(concat('upage://', @id))/udata//property[@name='ssylka_na_obekt']/value/page" mode="getSectionPage" >
<xsl:with-param name="this_page" select="$this_page" />
<xsl:with-param name="this_link" select="@link" />
<xsl:with-param name="this_name" select="document(concat('upage://', @id))/udata//property[@name='h1']/value" />
</xsl:apply-templates>
</xsl:template>
<xsl:template match="page" mode="getSectionPage">
<xsl:param name="this_page" />
<xsl:param name="this_name" />
<xsl:param name="this_link" />
<xsl:if test="$this_page = @id">
<div class="list" name="list"> - <a href="{$this_link}"><b><xsl:value-of select="$this_name" /></b></a></div>
</xsl:if>
</xsl:template>
Пошел дальше.
Правки 3 шага:
В файле /xslt/modules/catalog/category-view.xsl
написал путь к шаблону
<xsl:call-template name="other-catalog" />
<xsl:template match="udata[@method = 'getObjectsList'][total]">
<div class="catalog_sort" />
<div class="catalog list_view">
<xsl:call-template name="sorting" />
<xsl:call-template name="other-catalog" />
<div class="objects" umi:element-id="{category_id}" umi:module="catalog" umi:method="getObjectsList" umi:sortable="sortable">
<xsl:apply-templates select="lines/item" mode="short-view">
<xsl:with-param name="cart_items" select="document('udata://emarket/cart/')/udata/items" />
</xsl:apply-templates>
<div class="clear" />
</div>
</div>
<div class="clear" />
<xsl:apply-templates select="total" />
</xsl:template>
И тот код из шага 3 разметил в самом низу
В файле /xslt/modules/catalog/common.xsl
В результате я вижу только надпись
"Этот товар отмечен в следующих разделах:" и больше ничего.
1. проверить правильность usel.
Судя по примеру выше, ваш usel (getSection.xml) выглядит так:
<?xml version="1.0" encoding="utf-8"?>
<selection>
<target result="pages">
<type id="207" />
</target>
<property name="ssylka_na_obekt">
<page>{1}</page>
</property>
</selection>
207 - это видимо тип данных для товаров, у которых есть поле ssylka_na_obekt.
Проверяете ваш usel вызвав его через адресную строчку http://сайт/getSection/id_раздела_в_котором_вы_пытаетесь_вывести_товары .
P.S. Не забудьте включить доступ к вызову usel через http протокол в config.ini (если он еще не включен ).
Если все ок, там у вас появиться xml, с соответствующими товарами.
2. Вывести товары на странице каталога.
Нам нужно написать шаблон именно для такого каталога, в которм будут выводиться товары через usel выборку. Пусть для этого мы создадим тип данных "Usel каталог", дочерний к типу данных "Каталог". пусть id типа данных "Usel каталог" равно 112. Тогда добавляем шаблоны в конец файла /xslt/modules/catalog/category-view.xsl
<xsl:template match="/result[@method = 'category' and page/@type-id = 112]">
<xsl:apply-templates select="document(concat('usel://getSection/',@pageId))/udata" mode="getSection">
</xsl:template>
<xsl:template match="udata" mode="getSection">
товаров нет
</xsl:template>
<xsl:template match="udata[page]" mode="getSection">
<div class="catalog list_view">
<div class="objects">
<xsl:apply-templates select="page" mode="short-view">
<xsl:with-param name="cart_items" select="document('udata://emarket/cart/')/udata/items" />
</xsl:apply-templates>
<div class="clear" />
</div>
</div>
<div class="clear" />
</xsl:template>
P.S. Писал все на лету, могут быть ошибки в синтаксисе.
Если товары появятся, то основное дело сделанно. Тогда можно думать над тем, что в данном примере не будет работать пагинация и сортировка, которая есть в обычном каталоге, да и с фильтром (если он должен применять на usel каталог) тоже что-то надо будет думать.
1. Проверил USEL http://сайт/getSection/id_193/
Выводит Страница не найдена.
включил доступ к вызову usel через http протокол в config.ini
добавил строчку usel.http.allow = "1"
Так же ничего.
2. Для чего создаём тип данных "Usel каталог", дочерний к типу данных "Каталог"?
Мы же в нем группу или поля не создаем?
Может указать id типа данных "каталога"
На странице выводит "товаров нет"
Поэкспериментировал - в этом же типе данных для товаров, у поля ssylka_na_obekt, выбрал типа кнопка флажок вместо ссылка на дерево
1. getSection.xml остался без изменений, кроме как <page>{1}</page> заменил на <page>1</page>, иначе не работал
2. Вместо
<xsl:template match="/result[@method = 'category' and page/@type-id = 112]">
<xsl:apply-templates select="document(concat('usel://getSection/',@pageId))/udata" mode="getSection" />
</xsl:template>
Поставил
<xsl:template match="/result[@method = 'category'][/result/parents/page/@id = '192' or /result/page/@id = '192']" priority="1">
<xsl:apply-templates select="document('usel://getSection/?limit=&specials-limit;')" mode="getSection" />
</xsl:template>
Начиная с корневого каталога, вывел все товары у которых стоит галочка.
вместо вызова
<xsl:apply-templates select="document('usel://getSection')/udata/page" mode="getSection">
сделайте промежуточный вызов
<xsl:apply-templates select="document('usel://getSection')/udata" mode="getSection">
и добавьте доп шаблоны
<xsl:template match="udata" mode="getSection">
товаров нет
</xsl:template>
<xsl:template match="udata[page]" mode="getSection">
<xsl:apply-templates select="page" mode="getSection">
</xsl:template>