Направление элемента Sitecore без фигурных скобок - PullRequest
1 голос
/ 22 мая 2011

Каков наилучший способ убрать / заменить символы {} из вывода элемента Sitecore @id в xslt?

Проблема: мне нужно идентифицировать определенные теги в моем html из атрибута id,Использование имен опасно из-за риска того, что конечный пользователь Sitecore введет пробелы или недопустимые символы в имени.

С другой стороны, использование идентификатора элемента заставляет идентификатор в html сказать: id="{xxxxxxxx-xxx(...)}, в этом случае {} недопустимы как символы в атрибуте html id.

Так: Каков наилучший способ удаления / замены символов {} из вывода xslt @id?

Ответы [ 4 ]

2 голосов
/ 22 мая 2011

Я не знаком с Sitecore, но с XSLT / XPath выражения translate(@id, '{}', '') должно быть достаточно для удаления фигурных скобок из значения атрибута id. Однако будьте осторожны с любым кодом XSLT, использующим шаблоны значений атрибутов, так как там фигурные скобки имеют особое значение. Таким образом, <xsl:value-of select="translate(@id, '{}', '')"/> безопасен, так как атрибут select не рассматривается как шаблон значения атрибута.

1 голос
/ 13 июля 2011

Спасибо, Мартин, мне помогло использование функции translate(), но ваш ответ не полный.

Вопрос - насколько я понимаю - касался удаления фигурных скобок внутри угловых скобок в HTML, и здесь <xsl:value-of select="..."/>, к сожалению, не сработает.

Считайте этот (незаконный) код:

<div id="<xsl:value-of select="translate(@id, '{}', '')"/>">`

Вместо этого используйте это:

<div id="{translate(@id, '{}', '')}">
1 голос
/ 23 мая 2011

Правильный способ сделать это будет с NormalizeGuid.

Я использовал ранее (на Sitecore V5) метод NormalizeGuid от MainUtils. Я только что проверил на Sitecore 6.2, но он ломается, потому что есть 2 одинаковых имени метода. Это приводит к XslTransformException

Какую версию Sitecore вы используете? Я предлагаю попробовать NormalizeGuid:

Идет что-то вроде:

Web.Config

<extension mode="on" type="Sitecore.MainUtil, Sitecore.Kernel" namespace="http://www.sitecore.net/util" singleInstance="true"/>

XSLT

xmlns:util="http://www.sitecore.net/util" 

и

<xsl:variable name="itmId"><xsl:value-of select="@id"/></xsl:variable>
<xsl:value-of select="util:NormalizeGuid($itmId)"/>

Если вы получаете RTE, это можно исправить с помощью пользовательского класса-оболочки. Посмотрите этот пост .

На самом деле, я думаю, что вы можете обойти это, используя GenerateShortID(), это также в MainUtil.

0 голосов
/ 25 июня 2019

Вы можете сделать это так, чтобы включить только дефисы:

item.ID.Guid.ToString("D")

В качестве альтернативы вы можете использовать следующие форматы:

  1. D: дефисы fed3f822-e79f-4318-a99d-aaf75feea459
  2. N: цифры fed3f822e79f4318a99daaf75feea459
  3. B: фигурные скобки {fed3f822-e79f-4318-a996459 a756-a9d9459759-a-696-a9d9459*
  4. P: скобки (fed3f822-e79f-4318-a99d-aaf75feea459)
...