Umbraco XSLT RenderTemplate горе - PullRequest
       14

Umbraco XSLT RenderTemplate горе

1 голос
/ 07 февраля 2012

Нуждается в небольшом руководстве с XSLT и Umbraco. Довольно новый для XSLT, но я думаю, что понимаю концепции. Прямо на одной странице у меня есть два столбца, каждый со своим отдельным выбираемым контентом. Это делается с помощью стандартного свойства выбора контента (по одному для каждого столбца). Проблема в том, что мне нужно иметь два разных шаблона на странице. Таким образом, по сути, страница, на которой перемещаются две колонки, должна отображать два дочерних элемента на своей странице.

Я работаю с одним столбцом, используя общий XSLT, который, как я обнаружил, в основном просто отображает то, что находит дочерний элемент, но я хочу, чтобы он отображал то, что выбрал пользователь.

Я знаю, что Content Picker возвращает идентификатор XML-узла страницы, и его можно использовать с функцией Render Template для его отображения (у меня есть пример этого), но когда дело доходит до добавления в мои собственные свойства, а затем Передав их в функцию RenderTemplate, я заблудился. Новое в этом XSLT:).

Пока у меня есть ...

<?xml version="1.0" encoding="UTF-8"?>
   <!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp "&#x00A0;"> ]>
       <xsl:stylesheet version="1.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
       xmlns:msxml="urn:schemas-microsoft-com:xslt"
     xmlns:umbraco.library="urn:umbraco.library"
     xmlns:Exslt.ExsltCommon="urn:Exslt.ExsltCommon"
     xmlns:Exslt.ExsltDatesAndTimes="urn:Exslt.ExsltDatesAndTimes"
     xmlns:Exslt.ExsltMath="urn:Exslt.ExsltMath"
     xmlns:Exslt.ExsltRegularExpressions="urn:Exslt.ExsltRegularExpressions"
     xmlns:Exslt.ExsltStrings="urn:Exslt.ExsltStrings"
     xmlns:Exslt.ExsltSets="urn:Exslt.ExsltSets">
   <xsl:output method="html" omit-xml-declaration="yes"/>
<xsl:param name="currentPage"/>
<xsl:variable name="nodeID" select="data[@alias='leftColumn']"/>
<xsl:template match="/">
      <xsl:value-of select="umbraco.library:RenderTemplate($nodeID)" disable-output-escaping="yes"/>
</xsl:template>

</xsl:stylesheet>

Кто-нибудь знает, почему это не работает и как делать то, что мне нужно? Приведенное выше значение дает либо слишком большую, либо слишком маленькую ошибку.

1 Ответ

1 голос
/ 07 февраля 2012

У вас тут две проблемы ...

Вызов RenderTemplate ()

RenderTemplate фактически требует двух аргументов при использовании альтернативного шаблона, первый из которых - идентификатор узла контента, а второй - выбранный шаблон, который вы хотите применить.

<xsl:value-of 
    select="umbraco.library:RenderTemplate($nodeID, $templateID)" 
    disable-output-escaping="yes" />

См. Следующую ссылку для получения дополнительной информации: http://our.umbraco.org/wiki/reference/umbracolibrary/rendertemplate

Слишком большая или слишком маленькая ошибка

Это легко исправить, поместив оператор if-empty вокруг рассматриваемого кода.

<xsl:if test="$nodeID != ''">
    <xsl:value-of 
        select="umbraco.library:RenderTemplate($nodeID, $templateID)" 
        disable-output-escaping="yes" />
</xsl:if>

Синтаксическому анализатору XSLT нравится предполагать, что определенные значения равны нулю, тогда как в действительности это не так. Другой способ добиться этого - установить флажок Skip Errors при сохранении, но это немного затрудняет отладку действительного ошибочного кода.

Надеюсь, это поможет.

...