Поделиться через


Внедрение ресурсов в настраиваемых представлениях списка

Дата последнего изменения: 15 октября 2010 г.

Применимо к: SharePoint Foundation 2010

В этой задаче программирования показывается создание настраиваемого представления для стандартного списка Microsoft SharePoint Foundation. В следующем примере создается два настраиваемых ресурса, один из которых задает текст настраиваемой ссылки в разделе нижнего колонтитула страницы, а другой изменяет текст, который отображается, если список не содержит элементов. В этом примере XSLT-файла переопределяется шаблон FreeForm по умолчанию и определяется специальный раздел нижнего колонтитула с ссылкой на другое место в семействе сайтов. Кроме того, в нем переопределяется шаблон ViewEmpty для изменения текста, отображаемого для пустых списков.

Чтобы создать настраиваемое представление и реализовать в нем ресурсы, выполните следующие шаги:

  1. Создайте настраиваемое определение списка в Microsoft Visual Studio 2010.

  2. Добавьте в проект XSLT-файл и измените значение XslLink в файле Schema.xml, указав в нем ссылку на этот XSLT-файл.

  3. Добавьте в проект файл ресурсов, в котором определяются строки ресурсов.

  4. Добавьте привязки параметров в файл Schema.xml списка, а также добавьте в XSLT-файл объявления, использующие эти параметры.

Задачу программирования, в которой показано отображение настраиваемого поля в представлениях списка, см. в статье Инструкции. Настройка визуализации поля в представлении списка.

Создание настраиваемого определения списка

  1. В Visual Studio 2010 в меню Файл выберите пункт Создать, а затем выберите команду Проект.

  2. В диалоговом окне Новый проект в разделе Установленные шаблоны разверните узел Visual Basic или Visual C#.

  3. Разверните узел SharePoint, а затем выберите элемент 2010.

  4. В разделе Тип проекта выберите элемент Определение списка.

  5. Введите имя проекта определения списка и нажмите кнопку ОК.

  6. В окне Мастер настройки SharePoint укажите сайт, который будет использоваться для отладки. Выберите уровень доверия для решения Развернуть как решение фермы и нажмите кнопку Далее.

  7. В диалоговом окне Выбор параметров определения списка укажите отображаемое имя определения списка, выберите базовый тип списка, который требуется использовать для определения, и нажмите кнопку Готово. Указанное отображаемое имя выводится на странице Создать.

Добавление XSLT-файла и ссылок на него

  1. В обозревателе решений щелкните правой кнопкой мыши проект, выберите пункт Добавить и затем выберите Сопоставленная папка SharePoint.

  2. В диалоговом окне Добавление сопоставленной папки SharePoint выберите папку {SharePointRoot}\TEMPLATE\LAYOUTS\XSL и нажмите кнопку ОК.

  3. В обозревателе решений щелкните правой кнопкой мыши новую папку XSL, наведите указатель мыши на элемент Добавить, а затем выберите команду Новый элемент.

  4. В диалоговом окне Добавление нового элемента разверните узел Visual C# для языка C# или Общие элементы для Visual Basic.

  5. Выберите элемент Данные и затем XSLT-файл. Укажите имя файла и нажмите кнопку Добавить.

  6. В обозревателе решений дважды щелкните файл Schema.xml, чтобы открыть окно Редактор кода.

  7. Найдите определение представления Все элементы или Все документы в файле схемы Schema.xml. Это определение можно идентифицировать по атрибуту DefaultView в элементе View, которому присвоено значение TRUE.

  8. По умолчанию элемент XslLink в представлении указывает в качестве XSLT-файла файл main.xsl. Измените это значение на имя, присвоенное XSLT-файлу, который был добавлен на шаге 5.

Добавление ресурсов для настраиваемого представления

  1. В обозревателе решений щелкните правой кнопкой мыши проект, выберите пункт Добавить и затем выберите Сопоставленная папка SharePoint.

  2. В диалоговом окне Добавление сопоставленной папки SharePoint выберите папку {SharePointRoot}\CONFIG\Resources и нажмите кнопку ОК.

  3. В обозревателе решений щелкните правой кнопкой мыши новую папку Resources, наведите указатель мыши на элемент Добавить, а затем выберите команду Новый элемент.

  4. В диалоговом окне Добавление нового элемента разверните узел Visual C# или Общие элементы, выберите элемент Общие и затем пункт Файл ресурсов. Введите имя файла и нажмите кнопку Добавить.

  5. В окне Редактор ресурсов введите значения в поля Имя и Значение для ресурса. Параметр "Значение" определяет строку, которая отображается для пустого списка. В этом примере задается ресурс с именем "EmptyListResource" и значением "Please add information to this list ASAP!" (Добавьте информацию в этот список как можно скорее!), и ресурс с именем "WikiResource" и значением "For information about the contents of this list see the" (Дополнительные сведения о контенте этого списка см. в).

  6. В файл 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-файла

  1. Чтобы переопределить шаблоны 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-файле.

  2. Объявите параметры следующим образом.

    <xsl:param name="MyEmptyListString" />
    <xsl:param name="TeamWiki" />
    
  3. Скопируйте шаблон 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"/>&amp;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"/>&amp;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">&amp;nbsp;</xsl:text>
          <xsl:choose>
            <xsl:when test="List/@TemplateType = '115'">
              <a class="ms-addnew" id="{$ID}-{$WPQ}" href="{$Url}"
                onclick="javascript:NewItem2(event, &quot;{$Url}&quot;);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, &quot;{$Url}&quot;);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, &quot;{$Url}&quot;);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(&quot;Hero-', $WPQ, '&quot;);')"/>
                  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(&quot;', $ID, '-', $WPQ, '&quot;);')"/>
                  if (eleLink != null)
                  {
                    DefaultNewButtonWebPart<xsl:value-of select="$WPQ"/>(eleLink);
                  }
                }
          </script>
        </xsl:if>
      </xsl:if>
    </xsl:template>
    

    В этом примере применяются специальные параметры отображения раздела нижнего колонтитула для представления с использованием параметра XmlDefinition для извлечения элемента TemplateType определения списка (10000). Кроме того, в этом примере используется параметр "TeamWiki" для возврата строки "WikiResource" и глобальный параметр "RootSiteUrl" для возврата корневого веб-сайта семейства, которое содержит родительский веб-сайт списка. В этом примере подразумевается существование на корневом сайте вики-библиотеки с именем "TeamWiki".

  4. Добавьте в 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>
    
  5. В меню Построение выберите команду Построить решение и затем команду Развернуть решение, чтобы развернуть настраиваемый список на сайте SharePoint Foundation.

    ПримечаниеПримечание

    При развертывании проекта в Visual Studio 2010 заменяется файл ресурсов, созданный в указанной сопоставленной папке (%ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\CONFIG\Resources). При создании нового веб-приложения SharePoint Foundation копирует RESX-файл в папку \inetpub\...\App_GlobalResources, которая создается для веб-приложения (в этой папке должны располагаться действующие ресурсы). Однако, чтобы применить этот файл к уже существующим до развертывания проекта веб-приложениям, его необходимо вручную скопировать в папку App_GlobalResources веб-приложения.

См. также

Ссылка

ParameterBinding

Концепции

XsltListViewWebPart и настраиваемые представления списков

Привязки параметров XSLT

Обзор систем отображения представлений списков с помощью XSLT-преобразований