Axiometeria, из нашей переписки я вижу 2 вопроса.
1. Как получить результат utype текущей страницы (я же правильно понимаю что вы делаете всё это в шаблоне, который отрисовывает страницу с подробным описанием товара?)
Да, именно для страницы объекта каталога с подробным описанием товара (позже и для превью этого товара в разделе каталога).
2. Как вывести только те property, которые являются полями для фильтрации
Да.
- С первым вопросом все просто, вам надо сделать переменную типа
<xsl:variable name="type_info" select="document(concat('utype://',/result/page/@type-id))/udata"/>
где вместо /result/page/@type-id у вас, возможно, будет другой код (в зависимости от того в каком шаблоне идет вызов). Для того, чтобы понять какой путь (xpath) надо прописать до id типа данных текущей страницы, сделайте вывод <xsl:copy-of select="." /> в том шаблоне, в котором все это делаете (вывод нужных property)
И приведите этот результат сюда, если не получиться разобраться.
Вот по идее должно срабатывать, то есть код
<xsl:value-of select="document(concat('utype://',/result/page/@type-id))/udata"/>
должен выводит значение ID типа данных страницы объекта каталога в подробном описании товара, но не выводит, от того и в переменной нет ни чего
<xsl:variable name="type_info" select="document(concat('utype://',/result/page/@type-id))/udata"/>
Вот код, которые по вызову <xsl:copy-of select="." /> формируется:
<udata generation-time="0.019304">
<page id="1711" parentId="1710" link="/market/akb/akb_35a_evro_atlas_mf5320_p_t_330a_187_127_200/" is-active="1" object-id="2683" type-id="166" update-time="1428321877" alt-name="akb_35a_evro_atlas_mf5320_p_t_330a_187_127_200">
<basetype id="56" module="catalog" method="object">Объекты каталога</basetype>
<name>АКБ 35A евро ATLAS MF5320 п. т. 330А 187*127*200</name>
<properties>
<group id="629" name="common">
<title>Основные параметры</title>
<property id="2" name="title" type="string">
<title>Поле TITLE</title>
<value>АКБ 35A евро ATLAS MF5320 п. т. 330А 187*127*200</value>
</property>
<property id="3" name="h1" type="string">
<title>Поле H1</title>
<value>АКБ 35A евро ATLAS MF5320 п. т. 330А 187*127*200</value>
</property>
<property id="6" name="meta_keywords" type="string">
<title>Поле meta KEYWORDS</title>
<value></value>
</property>
<property id="5" name="meta_descriptions" type="string">
<title>Поле meta DESCRIPTIONS</title>
<value></value>
</property>
<property id="7" name="tags" type="tags">
<title>Теги</title>
<combined></combined>
</property>
<property id="280" name="date_create_object" type="date">
<title>Дата создания объекта</title>
<value></value>
</property>
</group>
<group id="632" name="cenovye_svojstva">
<title>Ценовые свойства</title>
<property id="281" name="price" type="price">
<title>Цена</title>
<value xlink:href="udata://emarket/price/2683">2150</value>
</property>
<property id="472" name="old_price" type="float">
<title>Старая цена</title>
<value></value>
</property>
</group>
<group id="634" name="catalog_stores_props">
<title>Склады</title>
<property id="282" name="stores_state" type="optioned">
<title>Состояние на складе</title>
<value></value>
</property>
<property id="283" name="reserved" type="int">
<title>Зарезервировано</title>
<value>0</value>
</property>
<property id="284" name="common_quantity" type="int">
<title>Общее количество на складах</title>
<value>1</value>
</property>
</group>
<group id="638" name="product">
<title>1C: Общие свойства</title>
<property id="253" name="photo" type="img_file">
<title>Картинка</title>
<value></value>
</property>
<property id="518" name="photo1" type="img_file">
<title>Картинка1</title>
<value path="./images/cms/data/import_files/8b/akb_35a_evro_atlas_mf5320_p_t_330a_187_127_200.jpg" folder="/images/cms/data/import_files/8b" name="akb_35a_evro_atlas_mf5320_p_t_330a_187_127_200" ext="jpg" width="400" height="400">/images/cms/data/import_files/8b/akb_35a_evro_atlas_mf5320_p_t_330a_187_127_200.jpg</value>
</property>
<property id="519" name="photo2" type="img_file">
<title>Картинка2</title>
<value path="./images/cms/data/import_files/8b/akb_35a_evro_atlas_mf5320_p_t_330a_187_127_200_1.jpg" folder="/images/cms/data/import_files/8b" name="akb_35a_evro_atlas_mf5320_p_t_330a_187_127_200_1" ext="jpg" width="400" height="400">/images/cms/data/import_files/8b/akb_35a_evro_atlas_mf5320_p_t_330a_187_127_200_1.jpg</value>
</property>
<property id="520" name="photo3" type="img_file">
<title>Картинка3</title>
<value path="./images/cms/data/import_files/8b/akb_35a_evro_atlas_mf5320_p_t_330a_187_127_200_2.jpg" folder="/images/cms/data/import_files/8b" name="akb_35a_evro_atlas_mf5320_p_t_330a_187_127_200_2" ext="jpg" width="400" height="400">/images/cms/data/import_files/8b/akb_35a_evro_atlas_mf5320_p_t_330a_187_127_200_2.jpg</value>
</property>
<property id="530" name="photo4" type="img_file">
<title>Картинка4</title>
<value path="./images/cms/data/import_files/8b/akb_35a_evro_atlas_mf5320_p_t_330a_187_127_200_3.jpg" folder="/images/cms/data/import_files/8b" name="akb_35a_evro_atlas_mf5320_p_t_330a_187_127_200_3" ext="jpg" width="400" height="400">/images/cms/data/import_files/8b/akb_35a_evro_atlas_mf5320_p_t_330a_187_127_200_3.jpg</value>
</property>
<property id="531" name="photo5" type="img_file">
<title>Картинка5</title>
<value></value>
</property>
<property id="539" name="photo6" type="img_file">
<title>Картинка6</title>
<value></value>
</property>
<property id="540" name="photo7" type="img_file">
<title>Картинка7</title>
<value></value>
</property>
<property id="417" name="description" type="wysiwyg">
<title>Описание</title>
<value><p>бла</p></value>
</property>
<property id="532" name="related_items" type="symlink">
<title>Сопутствующие товары</title>
<value>
<page id="1817" parentId="1710" link="/market/akb/akb_60a_tornado/" is-active="1" object-id="2789" type-id="166" update-time="1428159734" alt-name="akb_60a_tornado" xlink:href="upage://1817">
<basetype id="56" module="catalog" method="object">Объекты каталога</basetype>
<name>АКБ 60A Торнадо</name>
</page>
</value>
</property>
<property id="418" name="recommended_items" type="symlink">
<title>Похожие товары</title>
<value>
<page id="1771" parentId="1710" link="/market/akb/akb_56a_evro_bosch_s3_005/" is-active="1" object-id="2743" type-id="166" update-time="1428159732" alt-name="akb_56a_evro_bosch_s3_005" xlink:href="upage://1771">
<basetype id="56" module="catalog" method="object">Объекты каталога</basetype>
<name>АКБ 56A евро BOSCH S3 005</name>
</page>
<page id="1711" parentId="1710" link="/market/akb/akb_35a_evro_atlas_mf5320_p_t_330a_187_127_200/" is-active="1" object-id="2683" type-id="166" update-time="1428321877" alt-name="akb_35a_evro_atlas_mf5320_p_t_330a_187_127_200" xlink:href="upage://1711">
<basetype id="56" module="catalog" method="object">Объекты каталога</basetype>
<name>АКБ 35A евро ATLAS MF5320 п. т. 330А 187*127*200</name>
</page>
</value>
</property>
<property id="548" name="new_order" type="boolean">
<title>Новый товар</title>
<value></value>
</property>
<property id="461" name="special_offers" type="boolean">
<title>Специальные предложения</title>
<value>1</value>
</property>
<property id="462" name="seasonal_offers" type="boolean">
<title>Сезонные предложения</title>
<value></value>
</property>
<property id="521" name="1c_catalog_id" type="string">
<title>Идентификатор каталога 1С</title>
<value>a704c57b-fc7c-11df-b5d1-005056c00008</value>
</property>
<property id="522" name="1c_product_id" type="string">
<title>Идентификатор в 1С</title>
<value>8b294e01-7337-11e0-b322-001517557571</value>
</property>
<property id="523" name="artikul" type="string">
<title>Артикул</title>
<value>MF5320</value>
</property>
<property id="524" name="bar_code" type="string">
<title>Штрих-код</title>
<value></value>
</property>
<property id="525" name="weight" type="float">
<title>Вес</title>
<value></value>
</property>
</group>
<group id="639" name="special">
<title>1C: Специфические свойства</title>
<property id="538" name="manufacturer" type="relation">
<title>Производитель</title>
<value>
<item id="2973" name="ATLAS" type-id="164" ownerId="2" xlink:href="uobject://2973"></item>
</value>
</property>
<property id="527" name="emkost" type="string">
<title>Емкость</title>
<value>35 Ач</value>
</property>
<property id="528" name="raspolozhenie_plyusovoj_klemmy" type="string">
<title>Расположение плюсовой клеммы</title>
<value>Слева</value>
</property>
<property id="529" name="obwee_dlya_vseh" type="string">
<title>Общее для Всех</title>
<value></value>
</property>
<property id="542" name="vysota_mm" type="string">
<title>Высота, мм</title>
<value>120</value>
</property>
<property id="543" name="dlina_mm" type="string">
<title>Длина, мм</title>
<value>220</value>
</property>
<property id="544" name="shirina_mm" type="string">
<title>Ширина, мм</title>
<value>320</value>
</property>
<property id="545" name="ispolnenie" type="string">
<title>Исполнение</title>
<value>Для европы</value>
</property>
<property id="546" name="puskovoj_tok_a" type="string">
<title>Пусковой ток, А</title>
<value>320</value>
</property>
</group>
<group id="630" name="menu_view">
<title>Отображение в меню</title>
<property id="8" name="menu_pic_ua" type="img_file">
<title>Изображение неактивного раздела</title>
<value></value>
</property>
<property id="9" name="menu_pic_a" type="img_file">
<title>Изображение активного раздела</title>
<value></value>
</property>
<property id="10" name="header_pic" type="img_file">
<title>Изображение для заголовка</title>
<value></value>
</property>
</group>
<group id="631" name="more_params">
<title>Дополнительные параметры</title>
<property id="11" name="robots_deny" type="boolean">
<title>Запретить индексацию поисковиками</title>
<value></value>
</property>
<property id="14" name="is_unindexed" type="boolean">
<title>Исключить из поиска</title>
<value></value>
</property>
</group>
<group id="635" name="rate_voters">
<title>Количество проголосовавших</title>
<property id="15" name="rate_voters" type="int">
<title>Количество проголосовавших</title>
<value></value>
</property>
<property id="16" name="rate_sum" type="int">
<title>Сумма баллов</title>
<value></value>
</property>
</group>
<group id="637" name="locks">
<title>Блокировка</title>
<property id="21" name="locktime" type="date">
<title>Время блокировки</title>
<value></value>
</property>
<property id="22" name="lockuser" type="int">
<title>Блокирующий пользователь</title>
<value></value>
</property>
</group>
<group id="643" name="how_to_get">
<title>Как получить</title>
<property id="534" name="osobennosti" type="wysiwyg">
<title>Особые условия</title>
<value><p>В этом поле описание конкретных нюансов, связанных именно с данным товаром при получении...</p></value>
</property>
<property id="535" name="kak_poluchit_tovar_podrobnee" type="symlink">
<title>Как получить товар - общая информация</title>
<value>
<page id="1960" parentId="190" link="/main/kak_poluchit/" is-visible="1" is-active="1" object-id="2961" type-id="60" type-guid="content-page" update-time="1426866494" alt-name="kak_poluchit" xlink:href="upage://1960">
<basetype id="30" module="content">Страницы контента</basetype>
<name>Как получить ?</name>
</page>
</value>
</property>
</group>
<group id="647" name="how_to_pay">
<title>Как оплатить</title>
<property id="536" name="osobye_usloviya" type="wysiwyg">
<title>Особые условия</title>
<value><p>В этом поле описание конкретных нюансов, связанных именно с данным товаром при оплате...</p></value>
</property>
<property id="537" name="kak_oplatit_tovar_podrobnosti" type="symlink">
<title>Как оплатить товар - общая информация</title>
<value>
<page id="212" parentId="190" link="/main/kak_oplatit/" is-visible="1" is-active="1" object-id="944" type-id="60" type-guid="content-page" update-time="1425300217" alt-name="kak_oplatit" xlink:href="upage://212">
<basetype id="30" module="content">Страницы контента</basetype>
<name>Как оплатить ?</name>
</page>
</value>
</property>
</group>
</properties>
</page>
</udata>
- Со вторым вопросом еще проще, для начала проверmте, что моя конструкция работает у вас. Сделайте мой пример:
<xsl:variable name="type_info" select="document('utype://86'))/udata"/>
<xsl:apply-templates select=".//group[@name='special']/property[@name = $type_info//field[@filterable='filterable']/@name]" mode="info" />
где вместо 86 подставте id типа данных любого существующего товара. И посмотрите на странице данного товара, удалось ли вывести только фильтруемые поля с учетом, что переменную $type_info вы точно получили (так как руками указали нужный id)
Да. Эта конструкция работает.
Спасибо Admin!
Я добавил шаблон обработки вызова всех property дабы кроме содержания надо ещё и название фильтруемого поля вывести:
xsl:variable name="type_info" select="document('utype://86')/udata"/>
<xsl:apply-templates select=".//group[@name='special']/property[@name = $type_info//field[@filterable='filterable']/@name]" mode="filtered_special" />
<xsl:template match="//group[@name='special']/property" mode="filtered_special">
<xsl:value-of select="title"/>
<xsl:value-of select="value//@name"/>
</xsl:template>
Вот только остался вопрос про то, что ID типа страниц для объектов каталога разные и как их ввести в переменную.