Внедрение ресурсов в настраиваемых представлениях списка
Дата последнего изменения: 15 октября 2010 г.
Применимо к: SharePoint Foundation 2010
В этой задаче программирования показывается создание настраиваемого представления для стандартного списка Microsoft SharePoint Foundation. В следующем примере создается два настраиваемых ресурса, один из которых задает текст настраиваемой ссылки в разделе нижнего колонтитула страницы, а другой изменяет текст, который отображается, если список не содержит элементов. В этом примере XSLT-файла переопределяется шаблон FreeForm по умолчанию и определяется специальный раздел нижнего колонтитула с ссылкой на другое место в семействе сайтов. Кроме того, в нем переопределяется шаблон ViewEmpty для изменения текста, отображаемого для пустых списков.
Чтобы создать настраиваемое представление и реализовать в нем ресурсы, выполните следующие шаги:
Создайте настраиваемое определение списка в Microsoft Visual Studio 2010.
Добавьте в проект XSLT-файл и измените значение XslLink в файле Schema.xml, указав в нем ссылку на этот XSLT-файл.
Добавьте в проект файл ресурсов, в котором определяются строки ресурсов.
Добавьте привязки параметров в файл Schema.xml списка, а также добавьте в XSLT-файл объявления, использующие эти параметры.
Задачу программирования, в которой показано отображение настраиваемого поля в представлениях списка, см. в статье Инструкции. Настройка визуализации поля в представлении списка.
Создание настраиваемого определения списка
В Visual Studio 2010 в меню Файл выберите пункт Создать, а затем выберите команду Проект.
В диалоговом окне Новый проект в разделе Установленные шаблоны разверните узел Visual Basic или Visual C#.
Разверните узел SharePoint, а затем выберите элемент 2010.
В разделе Тип проекта выберите элемент Определение списка.
Введите имя проекта определения списка и нажмите кнопку ОК.
В окне Мастер настройки SharePoint укажите сайт, который будет использоваться для отладки. Выберите уровень доверия для решения Развернуть как решение фермы и нажмите кнопку Далее.
В диалоговом окне Выбор параметров определения списка укажите отображаемое имя определения списка, выберите базовый тип списка, который требуется использовать для определения, и нажмите кнопку Готово. Указанное отображаемое имя выводится на странице Создать.
Добавление XSLT-файла и ссылок на него
В обозревателе решений щелкните правой кнопкой мыши проект, выберите пункт Добавить и затем выберите Сопоставленная папка SharePoint.
В диалоговом окне Добавление сопоставленной папки SharePoint выберите папку {SharePointRoot}\TEMPLATE\LAYOUTS\XSL и нажмите кнопку ОК.
В обозревателе решений щелкните правой кнопкой мыши новую папку XSL, наведите указатель мыши на элемент Добавить, а затем выберите команду Новый элемент.
В диалоговом окне Добавление нового элемента разверните узел Visual C# для языка C# или Общие элементы для Visual Basic.
Выберите элемент Данные и затем XSLT-файл. Укажите имя файла и нажмите кнопку Добавить.
В обозревателе решений дважды щелкните файл Schema.xml, чтобы открыть окно Редактор кода.
Найдите определение представления Все элементы или Все документы в файле схемы Schema.xml. Это определение можно идентифицировать по атрибуту DefaultView в элементе View, которому присвоено значение TRUE.
По умолчанию элемент XslLink в представлении указывает в качестве XSLT-файла файл main.xsl. Измените это значение на имя, присвоенное XSLT-файлу, который был добавлен на шаге 5.
Добавление ресурсов для настраиваемого представления
В обозревателе решений щелкните правой кнопкой мыши проект, выберите пункт Добавить и затем выберите Сопоставленная папка SharePoint.
В диалоговом окне Добавление сопоставленной папки SharePoint выберите папку {SharePointRoot}\CONFIG\Resources и нажмите кнопку ОК.
В обозревателе решений щелкните правой кнопкой мыши новую папку Resources, наведите указатель мыши на элемент Добавить, а затем выберите команду Новый элемент.
В диалоговом окне Добавление нового элемента разверните узел Visual C# или Общие элементы, выберите элемент Общие и затем пункт Файл ресурсов. Введите имя файла и нажмите кнопку Добавить.
В окне Редактор ресурсов введите значения в поля Имя и Значение для ресурса. Параметр "Значение" определяет строку, которая отображается для пустого списка. В этом примере задается ресурс с именем "EmptyListResource" и значением "Please add information to this list ASAP!" (Добавьте информацию в этот список как можно скорее!), и ресурс с именем "WikiResource" и значением "For information about the contents of this list see the" (Дополнительные сведения о контенте этого списка см. в).
В файл Schema.xml добавьте привязки параметров в раздел <ParameterBindings> представления. При этом будут добавлены ресурсы, указанные на предыдущем шаге.
Эти теги имеют следующие форматы: <ParameterBinding Name=”EmptyListString” Location=”Resource(Resource1,EmptyListResource)” /> и <ParameterBinding Name=”TeamWiki” Location=”Resource(Resource1,WikiResource)” />. В этом примере "EmptyListString" и "TeamWiki" — это имена параметров, которые могут быть реализованы в XSLT-файле, "Resource1" — имя файла ресурсов без расширения, а "EmptyListResource" и "WikiResource" — имена ресурсов, предоставленных в RESX-файле.
Реализация ресурсов в коде XSLT-файла
Чтобы переопределить шаблоны FreeForm по умолчанию и шаблоны EmptyTemplate, определенные в файле vwstyles.xsl, импортируйте файл main.xsl в XSLT-файл.
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" > <xsl:import href="/_layouts/xsl/main.xsl"/>
При импорте файла main.xsl в XLST-файл также импортируются файлы vwstyles.xsl и fldtypes.xsl, поскольку по умолчанию они оба импортированы в файл main.xsl.
Поскольку ранее в файле Schema.xml было изменено значение элемента XslLink и добавлены привязки параметров, определенные строки ресурсов доступны для использования в XSLT-файле.
Объявите параметры следующим образом.
<xsl:param name="MyEmptyListString" /> <xsl:param name="TeamWiki" />
Скопируйте шаблон FreeForm в XSLT-файл и добавьте раздел, в котором определяются специальные параметры отображения раздела нижнего колонтитула в представлении "Все элементы", следующим образом.
<xsl:template name="Freeform"> <xsl:param name="AddNewText"/> <xsl:param name="ID"/> <xsl:variable name="Url"> <xsl:choose> <xsl:when test="List/@TemplateType='119'"> <xsl:value-of select="$HttpVDir"/>/_layouts/CreateWebPage.aspx?List=<xsl:value-of select="$List"/>&RootFolder=<xsl:value-of select="$XmlDefinition/List/@RootFolder"/> </xsl:when> <xsl:when test="$IsDocLib"> <xsl:value-of select="$HttpVDir"/>/_layouts/Upload.aspx?List=<xsl:value-of select="$List"/>&RootFolder=<xsl:value-of select="$XmlDefinition/List/@RootFolder"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="$ENCODED_FORM_NEW"/> </xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:variable name="HeroStyle"> <xsl:choose> <xsl:when test="Toolbar[@Type='Standard']">display:none</xsl:when> <xsl:otherwise></xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:if test="$ListRight_AddListItems = '1' and (not($InlineEdit) or $IsDocLib)"> <table id="Hero-{$WPQ}" width="100%" cellpadding="0" cellspacing="0" border="0" style="{$HeroStyle}"> <tr><td colspan="2" class="ms-partline"> <img src="/_layouts/images/blank.gif" width="1" height="1" alt="" /> </td></tr> <tr><td class="ms-addnew" style="padding-bottom: 3px"> <span style="height:10px;width:10px;position:relative;display:inline-block;overflow:hidden;" class="s4-clust"> <img src="/_layouts/images/fgimg.png" alt="" style="left:-0px !important;top:-128px !important;position:absolute;" /></span> <xsl:text disable-output-escaping="yes" ddwrt:nbsp-preserve="yes">&nbsp;</xsl:text> <xsl:choose> <xsl:when test="List/@TemplateType = '115'"> <a class="ms-addnew" id="{$ID}-{$WPQ}" href="{$Url}" onclick="javascript:NewItem2(event, "{$Url}");javascript:return false;" target="_self"> <xsl:value-of select="$AddNewText" /> </a> </xsl:when> <!—Define a special footer section for the custom list definition, which has 10000 as template type.--> <xsl:when test="$XmlDefinition/List/@TemplateType ='10000'"> <a class="ms-addnew" id="{$ID}-{$WPQ}" href="{$Url}" onclick="javascript:NewItem2(event, "{$Url}");javascript:return false;" target="_self"> <xsl:value-of select="$AddNewText" /> </a> <p> <xsl:value-of select="$TeamWiki"/> <a href="{$RootSiteUrl}/TeamWiki">Team Wiki</a>. </p> </xsl:when> <xsl:otherwise> <a class="ms-addnew" id="{$ID}" href="{$Url}" onclick="javascript:NewItem2(event, "{$Url}");javascript:return false;" target="_self"> <xsl:value-of select="$AddNewText" /></a> </xsl:otherwise> </xsl:choose> </td></tr> <tr><td><img src="/_layouts/images/blank.gif" width="1" height="5" alt="" /></td></tr></table> <xsl:choose> <xsl:when test="Toolbar[@Type='Standard']"> <script type='text/javascript'> if (typeof(heroButtonWebPart<xsl:value-of select="$WPQ"/>) != "undefined") { <xsl:value-of select="concat(' var eleHero = document.getElementById("Hero-', $WPQ, '");')"/> if (eleHero != null) eleHero.style.display = ""; } </script> </xsl:when> <xsl:otherwise></xsl:otherwise> </xsl:choose> <xsl:if test="List/@TemplateType = '115'"> <script type='text/javascript'> if (typeof(DefaultNewButtonWebPart<xsl:value-of select="$WPQ"/>) != "undefined") { <xsl:value-of select="concat(' var eleLink = document.getElementById("', $ID, '-', $WPQ, '");')"/> if (eleLink != null) { DefaultNewButtonWebPart<xsl:value-of select="$WPQ"/>(eleLink); } } </script> </xsl:if> </xsl:if> </xsl:template>
В этом примере применяются специальные параметры отображения раздела нижнего колонтитула для представления с использованием параметра XmlDefinition для извлечения элемента TemplateType определения списка (10000). Кроме того, в этом примере используется параметр "TeamWiki" для возврата строки "WikiResource" и глобальный параметр "RootSiteUrl" для возврата корневого веб-сайта семейства, которое содержит родительский веб-сайт списка. В этом примере подразумевается существование на корневом сайте вики-библиотеки с именем "TeamWiki".
Добавьте в XSLT-файл следующий код, который переопределяет определение EmptyTemplate и изменяет отображаемый текст.
<xsl:template name="EmptyTemplate"> <tr> <td class="ms-vb" colspan="99" style="color:red;font-weight:bold"> <xsl:value-of select="$MyEmptyListString"/> </td> </tr> </xsl:template> </xsl:stylesheet>
В меню Построение выберите команду Построить решение и затем команду Развернуть решение, чтобы развернуть настраиваемый список на сайте SharePoint Foundation.
Примечание При развертывании проекта в Visual Studio 2010 заменяется файл ресурсов, созданный в указанной сопоставленной папке (%ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\CONFIG\Resources). При создании нового веб-приложения SharePoint Foundation копирует RESX-файл в папку \inetpub\...\App_GlobalResources, которая создается для веб-приложения (в этой папке должны располагаться действующие ресурсы). Однако, чтобы применить этот файл к уже существующим до развертывания проекта веб-приложениям, его необходимо вручную скопировать в папку App_GlobalResources веб-приложения.
См. также
Ссылка
Концепции
XsltListViewWebPart и настраиваемые представления списков
Обзор систем отображения представлений списков с помощью XSLT-преобразований