2012-02-07 3 views
1

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

У меня это работает с одним столбцом, используя общий 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

Вы на самом деле есть две проблемы здесь ...

Вызов RenderTemplate()

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

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

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

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

Это один просто исправить, положив если пустое заявление вокруг кода в вопрос.

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

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

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

+0

Спасибо за ответ, я оглянулся, и из того, что я мог видеть, вы могли бы передать в nodeID свой собственный. Я дам ему тест с идентификатором templateID, но я не думаю, что это ошибка. Я вырыл немного больше, и кажется, что независимо от того, какая переменная nodeID никогда не получает никаких данных. Я напечатал контент Picker на странице в дизайнере шаблонов с помощью < ', который печатает правильные данные, но используя его в XLST, он никогда не получает данные. – Dilvid

+0

Какую версию Umbraco вы используете? –

+0

umbraco v 4.7.1 (Сборочная версия: 1.0.4281.20201) Вы можете увидеть сайт - http://priority.wireddotnet.co.uk/ – Dilvid

Смежные вопросы