Ответы пользователя по тегу XSL & XSLT
  • Как удалить атрибут из выходного HTML?

    @ilyarsoftware
    Параметр clean-eip-attributes = "1" удаляет только атрибуты Edit-in-place.
    Ваша проблема в ответственности XSLT.
    Для решения в шаблонах используя атрибут exclude-result-prefixes, надо исключить ненужные неймспейсы:

    <xsl:stylesheet version="1.0"
    			xmlns="http://www.w3.org/1999/xhtml"
    			xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    			xmlns:date="http://exslt.org/dates-and-times"
    			xmlns:udt="http://umi-cms.ru/2007/UData/templates"
    			xmlns:umi="http://www.umi-cms.ru/TR/umi"
    			exclude-result-prefixes="xsl date udt umi">
    Ответ написан
    4 комментария
  • UMI.CMS - добавление выбора опций в шаблон xsl - пустая страница?

    @ilyarsoftware
    Причина пустая страницы при работе с XSLT-шаблонизатором может говорить о наличии в шаблоне ошибки. Включите режим отображения ошибок (config.ini):

    [debug]
    enabled = "1"
    show-backtrace = "1"


    Вместо пустой страницы, будут отображаться сообщения вида:

    Warning: DOMDocument::load(): Specification mandate value for attribute checked in /umi/xsltTpls/default.xsl


    Из этого сообщения буде стразу понятно где проблема.

    Еще может быть полезен шаблон debug.xsl:
    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    
      <!-- debug tools -->
      <xsl:template match="*" mode="debug">
        <textarea>
          <xsl:copy-of select="*"/>
        </textarea>
      </xsl:template>
    
    </xsl:stylesheet>


    Его надо подключить в ваши шаблоны <xsl:include href="debug.xsl"/> и использовать в любом xsl:apply-templates добавляя mode="debug" например так:

    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    
      <xsl:template match="property">
        <xsl:apply-templates select="value/option" mode="debug" />
      </xsl:template>
    
    </xsl:stylesheet>


    В результате будет видно содержание XML-дерева для которой применяется шаблон, это может быть полезным для правильного построения XPath используемый select или match шаблонов.
    Ответ написан
    3 комментария
  • Как вывести поле из полной новости в анонс?

    @ilyarsoftware
    Любое поле или группу любой страницы можно получить через протокол UPage, пример вывода значения поля content:

    <xsl:value-of 
      select="document(concat('upage://', @id, '.content'))//value"
      disable-output-escaping="yes" />

    @id это идентификатор страницы которое можно получить в текущем контексте, а также можно использовать путь страницы.

    Суть примера сводится к построению запроса: concat('upage://', @id, '.content')) в результате будет обращение по адресу upage://1.content (при @id=1), а //value обращение к ноде результирующего XML.

    Протокол UPage можно тестировать в браузере, например: http://site.com/upage/1.content или http://site.com/upage/1 для получения всей страницы.
    Ответ написан
    1 комментарий
  • Как организовать попарный вывод элементов списка в UMI.CMS?

    @ilyarsoftware
    Попробуйте так:
    <xsl:param name="colnum" select="2"/>
    
    <xsl:template match="udata[@module = 'catalog'][@method = 'getObjectsList']">
      <xsl:apply-templates select="lines/item[position() = 1]|lines/item[position() mod $colnum = 1]"/>
    </xsl:template>
    
    <xsl:template match="item">
      <div>
         <xsl:apply-templates select=".|following-sibling::item[position() &lt; $colnum]" mode="div"/>
      </div>
    </xsl:template>
    
    <xsl:template match="item" mode="div">
      <span class="element-{@id}" >
        <xsl:value-of select="."/>
      </span>
    </xsl:template>

    Демонстрация примера.
    На эту тему есть статья: Таблицы в несколько колонок в XSLT-шаблонах и похожий вопрос рассматривается в теме: вывод объектов каталога.
    Ответ написан
    Комментировать
  • Почему XSL не читает куки?

    @ilyarsoftware
    Возможность получить значение куки в процессе XSLT-преобразования зависит того какой XSLT-процессор используется в рабочем окружении. Также можно наблюдать, как этот вопрос по разному решается в продуктах или библиотеках.

    В частности UM.CMS (проверял на версии 2.9.7-49344) передает значение куки в одноименный параметр при выполнении трансформации шаблона.

    Беда может быть связана с более старой версией, где это поведение не поддерживается, либо каким либо внешним багом.
    Ответ написан
    Комментировать
  • XSLT (umi) - как сделать вывод полей в личном кабинете?

    @ilyarsoftware
    <xsl:value-of select="document(concat('uobject://', /result/user/@id, '.moe_svoictvo'))//value"/>

    или иначе, но для того что бы работало надо в stylesheet добавить xmlns:xlink="www.w3.org/TR/xlink"

    <xsl:value-of select="document(concat(/result/user/@xlink:href, '.moe_svoictvo'))//value"/>
    Ответ написан
    Комментировать