Локализация Sitecore xsl

При тестировании с..

/xsl/sample rendering.xslt

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

Это нормально? ... И есть ли способ принудительно/проверить язык, чтобы отображались только те элементы, которые мы хотим?


person misteraidan    schedule 30.11.2009    source источник


Ответы (1)


Элементы Sitecore всегда будут сосуществовать, несмотря на языковые барьеры. Это связано (по крайней мере, я считаю, что это одна из причин) с тем, что все они наследуются от стандартного шаблона, и этот шаблон имеет некоторые поля, помеченные как «Общие», т.е. неявно доступные для любого языка.

Однако у элемента нет версии на текущем языке. Значения полей будут возвращать значение null.

Вы можете проверить это самостоятельно, изменив Sample Rendering.xsl следующим образом:

<xsl:for-each select="item">
  <xsl:value-of select="@name" /> ( <sc:text field="title" /> )
  <br />
</xsl:for-each> 

Я провел быстрый тест, и это был мой результат. Образец элемента 3 создан на неконтекстном языке.

Добро пожаловать в Sitecore

Образец 1 ( Образец 1 ) Образец 2 ( Образец 2 ) Образец 3 ( )

person Mark Cassidy    schedule 30.11.2009
comment
Я так и думал, спасибо за подтверждение. Это также означает, что мне нужно будет использовать элемент управления .NET для проверки языковой версии, чтобы успешно скрыть дочерние элементы из меню. Это серьезное ограничение xslt.. делает его полубесполезным в многоязычной среде. Данг. - person misteraidan; 01.12.2009
comment
На самом деле - я просто думаю об этом неправильно. Вы можете просто добавить поле, такое как AppearInNav, которое вы можете использовать для отображения/скрытия элементов для определенных языков. Не так аккуратно, как просто отображать, существует ли язык, но в любом случае необходимость в таком поле довольно стандартна. Сейчас я перестану заниматься xslt и просто буду больше использовать свою голову. - person misteraidan; 01.12.2009
comment
Я сам пришел к такому выводу совсем недавно. Иногда нестандартное мышление в Sitecore действительно очень полезно. Это поле, о котором вы упомянули, делает все намного проще, чем попытки сделать это любым другим способом, который вы, возможно, обнаружили. - person Blair Scott; 02.12.2009
comment
Есть более простой способ — в вашем цикле просто перебирайте элементы, где поле (в данном примере «название») не пусто: xsl:for-each select=item[sc:fld('title',.) != ' '] - person Adam Hopkinson; 03.12.2009