Пользовательский рендеринг xsl для поля поиска в представлении списка (SharePoint 2010) - PullRequest
5 голосов
/ 28 мая 2010

Я пытаюсь изменить рендеринг столбца списка на странице просмотра списка.

После нескольких обучающих программ и некоторых потяжек мне удалось создать xslt для вычисляемого поля и поля валюты (из fldtypes_XXXXXX.xsl):

<xsl:template match ="FieldRef[@Name='MarkCalc']" mode="Text_body">
  <xsl:param name="thisNode" select="."/>
  <xsl:value-of select="$thisNode/@*[name()=current()/@Name]" disable-output-escaping ="yes"/>
</xsl:template>

<xsl:template match="FieldRef[@Name='CurrencyTest']" mode="Number_body">
  <xsl:param name="thisNode" select="."/>
  <b><xsl:value-of disable-output-escaping="yes" select="$thisNode/@*[name()=current()/@Name]" /></b>
</xsl:template>

Затем я попытался сделать то же самое для поля поиска, но оно просто не сработало.Это моя последняя попытка (я скопировал ее из конструктора SharePoint).Что мне не хватает?

<xsl:template match="FieldRef[(@Encoded) and @Name='Lookup1']" mode="Lookup_body">
  <xsl:param name="thisNode" select="."/>
  <b><xsl:value-of select="$thisNode/@*[name()=current()/@Name]" disable-output-escaping="yes" /></b>
</xsl:template>

Ответы [ 2 ]

8 голосов
/ 10 июня 2010

Как оказалось, это полностью проблема xsl.

Xsl процессор выбирает шаблон для использования на основе атрибутов "match" и "mode". Когда два или более шаблонов совпадают, один из них выбирается по приоритету. По умолчанию существует три уровня приоритетов, которые назначаются в зависимости от того, насколько конкретно ваше соответствие.

С http://www.codetoad.com/xml/xslt8.asp:

  • Шаблоны, которые соответствуют классу узлов, например *, который соответствует всем элементы, присваиваются неявным приоритет -0,5

  • Шаблоны, которые соответствуют узлам в соответствии с их именем, например, Символ, который соответствует элементам, присваивается неявный приоритет 0

  • Шаблоны, которые соответствуют узлам в соответствии с их контекстом, такие как CastMember / Character, который соответствует элементы, чьим родителем является элемент, присваивается неявный приоритет 0,5

При назначении приоритетов на основе шаблоны, не имеет значения, как Конкретная контекстная информация: если вы укажете какой-либо контекст для узла тогда шаблон имеет приоритет 0,5. Например, описание / ссылка / символ имеет точно тот же приоритет, что и Описание // Character.

В SharePoint есть два шаблона для полей поиска

<xsl:template name="FieldRef_Lookup_body" match="FieldRef" mode="Lookup_body" ddwrt:dvt_mode="body">...

и

<xsl:template match="FieldRef[@Encoded]" mode="Lookup_body" ddwrt:dvt_mode="body">

Первый имеет приоритет 0 (соответствует по названию), второй имеет приоритет 0.5 (соответствует по контексту).

Мой пользовательский шаблон, который должен переопределять закодированный поиск

<xsl:template match="FieldRef[(@Encoded) and @Name='Lookup1']" mode="Lookup_body">...

также имеет приоритет по умолчанию, равный 0,5 (помните, «... не имеет значения, насколько специфична контекстная информация ...»), поэтому процессор xsl выбирает последний определенный (*).

Чтобы преодолеть это, вы можете использовать приоритет атрибута и установить его на большее значение, чем шаблон по умолчанию. В моем случае я установил его на 1.

<xsl:template match="FieldRef[(@Encoded) and @Name='Lookup1']" priority="1" mode="Lookup_body">...



(*) Очевидно, что SharePoint загружает пользовательские шаблоны до загрузки своих собственных. Был ли это выбор на основе каких-то технических критериев или чтобы я изучал xsl, остается загадкой.

0 голосов
/ 16 сентября 2013

У меня была похожая проблема, но я использовал Sharepoint 2013. В Sharepoint 2013 это делается с помощью рендеринга на стороне клиента, поэтому этот метод НЕ будет работать. Insted проверить http://www.sharepointnutsandbolts.com/2013/01/using-jslink-to-change-ui-of-sharepoint_20.html, или использовать этот метод (http://social.msdn.microsoft.com/Forums/sqlserver/en-US/9425e392-26ec-466b-a086-6581e035258f/sharepoint-2013-fldtypesxsl) для принудительного рендеринга сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...