UMIhelp

Разработка сайта на UMI.CMS => Шаблоны XSLT => Тема начата: Axiomateria от 01 Апреля 2015, 16:55:17

Название: Вывод в превью товара только фильтруемые характеристики
Отправлено: Axiomateria от 01 Апреля 2015, 16:55:17
Здравствуйте!
В превью товара в разделе каталога надо вывести только те технические характеристики, чьи поля в типе данных объекта каталога этого товара отмечены как поля "Фильтруемые".
Путь решения задачи лежит через протокол utype, который описывается здесь:
http://dev.docs.umi-cms.ru/shablony_i_makrosy/xslt-shablonizator_umi_cms/tipy_dannyh_protokol_utype/
Получить данные по этому протоколу дело не хитрое по значению ID типа данных объекта каталога (в моём случае он = 86) однако не понятно пока как теперь в этот сам объект каталога подключить проверку так что бы отсеять только фильтруемые поля для вывода в превью товара из всех остальных полей?
В моём случае известен не только ID типа данных объекта каталога (86) , но и название группы полей "special".

Для начала я получаю в переменную ID всех property группы полей special
<xsl:variable name="GroupSpecialPropertyId" select=".//group[@name = 'special']/property/@id"/>  
это как я понимаю надо что бы в дальнейшем сравнивать по этим полученным значениям ID соответствующие узлы <field> с целью проверки наличия у них атрибута  filterable со значением "filterable".

Но вот на этом месте с проверкой соответствия я и застрял, не понятно пока как теперь проверить это соответствие.
Что посоветуете ?

Пока только в объекте каталога выводятся все ID из property (в данном случае три штуки), а надо только данные для id="538"
<xsl:apply-templates select="$GroupSpecialPropertyId" />

<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"/>
</value>
</property>
<property id="527" name="emkost" type="string">
<title>Емкость</title>
<value>38 Ач</value>
</property>
<property id="528" name="raspolozhenie_plyusovoj_klemmy" type="string">
<title>Расположение плюсовой клеммы</title>
<value>Справа</value>
</property>
</group>
</properties>
Название: Re:Вывод в превью товара только фильтруемые характеристики
Отправлено: maxomato от 02 Апреля 2015, 20:12:40
Здравствуйте!
Эту задачу Вам нужно сделать именно в xslt? Просто можно попробовать ещё другой вариант. Написать макрос на php и вызвать его. В макросе php с фильтруемыми полями думаю будет проще - можно подглядеть в исходники umi.
Название: Re:Вывод в превью товара только фильтруемые характеристики
Отправлено: Axiomateria от 02 Апреля 2015, 23:13:44
Здравствуйте!
Эту задачу Вам нужно сделать именно в xslt? Просто можно попробовать ещё другой вариант. Написать макрос на php и вызвать его. В макросе php с фильтруемыми полями думаю будет проще - можно подглядеть в исходники umi.
Здравствуйте!
Да, задачка именно на XSLT должна быть решена и вот какой вариант (пока не опробованный на практике) у меня имеется для
проверки на то, является ли поле фильтруемым:
<xsl:for-each select="//group[@name = 'special']/property">
  <xsl:variable name="prop_id" select="@id" />
 
  <xsl:if test="document(concat('utype://', @id))//field[@id = $prop_id]/@filterable = 'filterable' ">
      <xsl:value-of select="value" /> 
  </xsl:if>
</xsl:for-each>
Название: Re:Вывод в превью товара только фильтруемые характеристики
Отправлено: admin от 04 Апреля 2015, 14:24:51
делаете так:

<!--помещаем в переменную информацию о типе данных -->
<xsl:variable name="type_info" select="document(concat('utype://',/result/page/@type-id))/udata"/>
<!--получаем выборку всех property, имя которых хоть раз встречается среди узлов field из перемонной $type_info. C учетом, что у данных узлов есть атрибут [b]filterable [/b](означает, что данное поле фильтруемое). -->
<xsl:apply-templates select=".//group[@name='special']/property[@name = $type_info//field[@filterable='filterable']/@name]" mode="info" />

Название: Re:Вывод в превью товара только фильтруемые характеристики
Отправлено: Axiomateria от 04 Апреля 2015, 16:14:05
делаете так:
<!--помещаем в переменную информацию о типе данных -->
<xsl:variable name="type_info" select="document(concat('utype://',/result/page/@type-id))/udata"/>
<!--получаем выборку всех property, имя которых хоть раз встречается среди узлов field из перемонной $type_info. C учетом, что у данных узлов есть атрибут [b]filterable [/b](означает, что данное поле фильтруемое). -->
<xsl:apply-templates select=".//group[@name='special']/property[@name = $type_info//field[@filterable='filterable']/@name]" mode="info" />

В объекте каталога (файл object-view.xsl из demodizzy) ни чего не вывелось по Вашему примеру кода и я тогда просто вызвал
<xsl:value-of select="document(concat('utype://',/result/page/@type-id))/udata"/> 
что бы посмотреть что вообще вкладывается в переменную  "type_info", но система выдала "Не найдено".
То есть  и вызов
<xsl:apply-templates select=".//group[@name='special']/property[@name = $type_info//field[@filterable='filterable']/@name]" />
не срабатывает как следствие.
Название: Re:Вывод в превью товара только фильтруемые характеристики
Отправлено: admin от 04 Апреля 2015, 21:29:06
мой пример исходит из того что вы вставляете данные строки в шаблон который обрабатывает узел result и ему, как следствие, доступен id типа данных текущей страницы (его можно получить запросом /result/page/@type-id) если вы вставляете это в другом месте, то просто подставте id типа данных или проверте отдельно какое выражение возвращает нужный вам id тип данных.

Вся суть моего кода далеко не в том, чтобы через протокол utype получить инфо по какому-то типу данных. Это вы и так сделали судя по вашему первому сообщению (а если нет, то замените первую строчку на <xsl:variable name="type_info" select="document('utype://86'))/udata"/>). Суть именно в том? что при запросе property сравнить их @name и @name из информации взятой через протокол utype через замысловатый xpath запрос (вторая строчка из моего кода)
Название: Re:Вывод в превью товара только фильтруемые характеристики
Отправлено: Axiomateria от 06 Апреля 2015, 13:04:27
мой пример исходит из того что вы вставляете данные строки в шаблон который обрабатывает узел result и ему, как следствие, доступен id типа данных текущей страницы (его можно получить запросом /result/page/@type-id) если вы вставляете это в другом месте, то просто подставте id типа данных или проверте отдельно какое выражение возвращает нужный вам id тип данных.

Вся суть моего кода далеко не в том, чтобы через протокол utype получить инфо по какому-то типу данных. Это вы и так сделали судя по вашему первому сообщению (а если нет, то замените первую строчку на <xsl:variable name="type_info" select="document('utype://86'))/udata"/>). Суть именно в том? что при запросе property сравнить их @name и @name из информации взятой через протокол utype через замысловатый xpath запрос (вторая строчка из моего кода)
В общем код 
<xsl:variable name="type_info" select="document('utype://86'))/udata"/>
выше я тоже привёл условно для примера так сказатьт, где ID 86 это тип данных "Объекта каталога", но в моём случае регулярно происходит импорт товаров из 1С и при этом процессе создаётся собственное структурное дерево из типов данных 1С, у которых понятное дело свои собственные ID.
Поэтому я и пытаюсь найти такое универсальное решение, которые бы не было бы привязано к какому-то конкретному ID типа данных, а просто выводило только те поля, что предназначены для фильтров поиска товаров в объекте каталога.

Название: Re:Вывод в превью товара только фильтруемые характеристики
Отправлено: Axiomateria от 06 Апреля 2015, 13:08:20
И вот одна из фильтруемых характеристик товара utype://86, которую хотелось бы вывести в описании технических характеристик в объекте каталога по признаку типа поля "Фильтруемое":
<group id="567" name="special" title="1C: Специфические свойства" visible="visible">
<field id="538" name="manufacturer" title="Производитель" field-type-id="11" visible="visible" filterable="filterable" guide-id="164">
<type id="11" name="Выпадающий список" data-type="relation"/>
</field>
</group>
Название: Re:Вывод в превью товара только фильтруемые характеристики
Отправлено: admin от 06 Апреля 2015, 13:41:35
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)

И приведите этот результат сюда, если не получиться разобраться.

- Со вторым вопросом еще проще, для начала провер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)
Название: Re:Вывод в превью товара только фильтруемые характеристики
Отправлено: Axiomateria от 06 Апреля 2015, 15:51:34
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 типа страниц для объектов каталога разные и как их ввести в переменную.
Название: Re:Вывод в превью товара только фильтруемые характеристики
Отправлено: admin от 06 Апреля 2015, 17:39:05


У вас немного дургое xml дерево узлов, вам надо вместо /result/page/@type-id использовать вызов page/@type-id

В итоге получиться:
<xsl:variable name="type_info" select="document(concat('utype://',page/@type-id))/udata"/>
<xsl:apply-templates select=".//group[@name='special']/property[@name = $type_info//field[@filterable='filterable']/@name]" mode="info" />


P.S. судя по всему, шаблон в котором вы работаете сделан на основе demodizzy, там есть несколько неэффективных мест, например вывод страницы с подробным описанием товара. Такого вида
<xsl:template match="/result[@module = 'catalog' and @method = 'object']">
<xsl:apply-templates select="document(concat('udata://content/addRecentPage/', $document-page-id))/udata" />
<xsl:apply-templates select="document(concat('upage://', page/@id,'?show-empty'))/udata" mode="object-view" />
</xsl:template>

<xsl:template match="udata" mode="object-view">
...
</xsl:template>
по сути, можно работать со всеми данными текущей страницы уже в первом шаблоне и дополнительный вызов
<xsl:apply-templates select="document(concat('upage://', page/@id,'?show-empty'))/udata" mode="object-view" />
делается только для вывода всех полей, то есть даже тех, у которых нет значений. В большинстве случаев это не требуется и можно смело переносить содержимое второго шаблона в первый блок.

P.P.S. К тому же, вы еще и лишний вызов уберете, ведь у вас уже есть все поля текущей страницы, зачем еще раз вызывать впустую upage протокол этой же страницы.

P.P.P.S. Только не забудьте что немного смениться xml дерево, ведь у страницы дерево
- result
    - page
а у результатов upage протокола
- udata
    - page
Название: Re:Вывод в превью товара только фильтруемые характеристики
Отправлено: Axiomateria от 07 Апреля 2015, 15:07:03
У вас немного дургое xml дерево узлов, вам надо вместо /result/page/@type-id использовать вызов page/@type-id
В итоге получиться:
<xsl:variable name="type_info" select="document(concat('utype://',page/@type-id))/udata"/>
<xsl:apply-templates select=".//group[@name='special']/property[@name = $type_info//field[@filterable='filterable']/@name]" mode="info" />
Спасибо, Admin, сработала конструкция!

P.S. судя по всему, шаблон в котором вы работаете сделан на основе demodizzy, там есть несколько неэффективных мест, например вывод страницы с подробным описанием товара

в тему замечание и у меня вопрос сюда же к разработчикам UMI.CMS имеется на тему оптимизации универсального шаблона demodizzy.
Название: Re:Вывод в превью товара только фильтруемые характеристики
Отправлено: admin от 07 Апреля 2015, 16:33:00
в тему замечание и у меня вопрос сюда же к разработчикам UMI.CMS имеется на тему оптимизации универсального шаблона demodizzy.

В чем именно вопрос?
Название: Re:Вывод в превью товара только фильтруемые характеристики
Отправлено: Axiomateria от 07 Апреля 2015, 18:26:24
в тему замечание и у меня вопрос сюда же к разработчикам UMI.CMS имеется на тему оптимизации универсального шаблона demodizzy.

В чем именно вопрос?
Вопросов тьма. Может быть даже стоит открыть на форму отдельную тему demodizzy.
У меня вопросы начинаются с адаптивности вёрстки и подключения сторонних скриптов для визуализации фотографий в увеличенном виде и многое многое другое....
Название: Re:Вывод в превью товара только фильтруемые характеристики
Отправлено: admin от 07 Апреля 2015, 18:38:46
ну, тут ответить легче легкого, адаптивности нет, zoоm эффекта тоже
Название: Re:Вывод в превью товара только фильтруемые характеристики
Отправлено: Axiomateria от 07 Апреля 2015, 18:46:32
ну, тут ответить легче легкого, адаптивности нет, zoоm эффекта тоже
Знаю, что нет, а вот почему нет - не знаю.
Партнёры больше бы продали коробок, если бы в неё (в коробочную версию) входил бы один универсальный шаблон.
Хотя конечно, и на этом разработчикам спасибо.
Название: Re:Вывод в превью товара только фильтруемые характеристики
Отправлено: admin от 07 Апреля 2015, 18:52:35
Партнёры больше бы продали коробок, если бы в неё (в коробочную версию) входил бы один универсальный шаблон.
Хотя конечно, и на этом разработчикам спасибо.

А что по вашему должно входить в этот шаблон?
Название: Re:Вывод в превью товара только фильтруемые характеристики
Отправлено: Axiomateria от 07 Апреля 2015, 19:28:28
Партнёры больше бы продали коробок, если бы в неё (в коробочную версию) входил бы один универсальный шаблон.
Хотя конечно, и на этом разработчикам спасибо.

А что по вашему должно входить в этот шаблон?
Хороший вопрос. Я подумаю и вывешу список в отдельную спец.тему про demodizzy, если нет возражений.
А для начала сама корзина с товарами была бы с включёнными полями для оформления заказа, то есть всё на одной странице сразу и корзина и "Заказ в один шаг", Я это правда уже для своего варианта demodizzy во всю уже внедряю, так как заказчикам нравится именно такой вариант корзины.
Название: Re:Вывод в превью товара только фильтруемые характеристики
Отправлено: admin от 08 Апреля 2015, 12:06:06
А для начала сама корзина с товарами была бы с включёнными полями для оформления заказа, то есть всё на одной странице сразу и корзина и "Заказ в один шаг", Я это правда уже для своего варианта demodizzy во всю уже внедряю, так как заказчикам нравится именно такой вариант корзины.

Это уже есть, достаточно в свежепоставленном demodizzy зайти на редактирования страницы "Контактная информация", там есть галочка "Оформление заказа в один шаг" (где-то к низу ближе). Поставьте её и у вас заказ будет оформляться на одной странице.
Название: Re:Вывод в превью товара только фильтруемые характеристики
Отправлено: Axiomateria от 08 Апреля 2015, 17:11:59
А для начала сама корзина с товарами была бы с включёнными полями для оформления заказа, то есть всё на одной странице сразу и корзина и "Заказ в один шаг", Я это правда уже для своего варианта demodizzy во всю уже внедряю, так как заказчикам нравится именно такой вариант корзины.
Это уже есть, достаточно в свежепоставленном demodizzy зайти на редактирования страницы "Контактная информация", там есть галочка "Оформление заказа в один шаг" (где-то к низу ближе). Поставьте её и у вас заказ будет оформляться на одной странице.

Заказ в один шаг есть, но корзина всё равно в свежепославленном demodizzy отдельная со своим списком товаров.
Я имею ввиду вот что:
Название: Re:Вывод в превью товара только фильтруемые характеристики
Отправлено: admin от 09 Апреля 2015, 13:48:37
понял, это тоже поправимо, но об этом и речь, чтобы "уже было", а не "можно сделать".
Пишите список с тем, что стоит иметь в таком универсальном шаблоне
Название: Re: Вывод в превью товара только фильтруемые характеристики
Отправлено: Axiomateria от 16 Июня 2015, 18:33:57
У вас немного дургое xml дерево узлов, вам надо вместо /result/page/@type-id использовать вызов page/@type-id
В итоге получиться:
<xsl:variable name="type_info" select="document(concat('utype://',page/@type-id))/udata"/>
<xsl:apply-templates select=".//group[@name='special']/property[@name = $type_info//field[@filterable='filterable']/@name]" mode="info" />
Спасибо, Admin, сработала конструкция!

P.S. судя по всему, шаблон в котором вы работаете сделан на основе demodizzy, там есть несколько неэффективных мест, например вывод страницы с подробным описанием товара

в тему замечание и у меня вопрос сюда же к разработчикам UMI.CMS имеется на тему оптимизации универсального шаблона demodizzy.

У меня ещё одно уточнение: как в превью товаров (которые выводятся в разделе каталога) вывести только фильтрованные технические характеристики ?
В корзине товаров у меня получилось вывести таким вызовом:
                <xsl:apply-templates select="document(concat('upage://', page/@id))/udata/page//group[@name='special']/property[@name = $type_info_cart//field[@filterable='filterable']/@name]" mode="filtered_special_cart" />
в котором переменная $type_info_cart задаётся так:
<xsl:variable name="type_info_cart" select="document(concat('utype://',page/@type-id))/udata"/>

но в превью не получается.
Подскажите что сделать с переменной надо, что бы в превью тоже вывести только фильтрованные характеристики объекта каталога ?
Название: Re: Вывод в превью товара только фильтруемые характеристики
Отправлено: admin от 08 Июля 2015, 14:51:00
Разбейте свой запрос на части и проверте что там выводится, а что нет.
На первый взгляд у вас ошибка в строчке
concat('upage://', page/@id))
Когда вы работает в шаблонах для вывода краткой карточки товара, её id содержится не в page/@id , а  в @id
Название: Re: Вывод в превью товара только фильтруемые характеристики
Отправлено: Axiomateria от 08 Июля 2015, 15:05:17
Разбейте свой запрос на части и проверте что там выводится, а что нет.
На первый взгляд у вас ошибка в строчке
concat('upage://', page/@id))
Когда вы работает в шаблонах для вывода краткой карточки товара, её id содержится не в page/@id , а  в @id
Если Вы об этом
<xsl:variable name="type_info_cart" select="document(concat('utype://',page/@type-id))/udata"/>
то я уже пробовал и так безрезультатно пока:
<xsl:variable name="type_info_cart" select="document(concat('utype://',@id/@type-id))/udata"/>
Название: Re: Вывод в превью товара только фильтруемые характеристики
Отправлено: admin от 08 Июля 2015, 15:20:47
нет я о первом месте где это встречается, то есть вот так я вижу более верный вариант для шаблона краткой карточки товара

<xsl:variable name="page_info" select="document(concat('upage://', @id))/udata"/>
<xsl:variable name="type_info_cart" select="document(concat('utype://',$page_info/page/@type-id))/udata"/>
<xsl:apply-templates select="$page_info/page//group[@name='special']/property[@name = $type_info_cart//field[@filterable='filterable']/@name]" mode="filtered_special_cart" />

P.S. переменную <xsl:variable name="type_info_cart" select="document(concat('utype://',$page_info/page/@type-id))/udata"/> я бы предложил определять один раз, а не для каждой краткой карточки, так как ответ у неё один и тот-же будет
P.P.S. получение доп полей для кратких карточек товара я бы делал не через upage для каждого товара, а через параметр ?extGroups при вызове макрос /udata/catalog/getObjectsList. Будет меньше запросов к базе