Vorgehensweise: Implementieren von Ressourcen in benutzerdefinierten Listenansichten
Letzte Änderung: Freitag, 15. Oktober 2010
Gilt für: SharePoint Foundation 2010
Diese Programmieraufgabe veranschaulicht, wie eine benutzerdefinierte Ansicht für eine Microsoft SharePoint Foundation-Standardliste erstellt wird. Im folgenden Beispiel erstellen Sie zwei benutzerdefinierte Ressourcen: eine Ressource gibt Text an, der in einen benutzerdefinierten Link eingefügt wird, der im Fußzeilenabschnitt der Seite bereitgestellt wird, und die andere ändert den Text, der angezeigt wird, wenn die Liste keine Elemente enthält. Das XSLT-Beispiel überschreibt die standardmäßige FreeForm-Vorlage, um einen speziellen Fußzeilenabschnitt mit einem Link zu einem anderen Speicherort in der Websitesammlung zu definieren. Außerdem überschreibt dieses Beispiel die ViewEmpty-Vorlage zum Ändern des Texts, der für leere Listen gerendert wird.
Mithilfe dieser Programmieraufgabe werden die Schritte veranschaulicht, um eine benutzerdefinierte Ansicht zu erstellen und Ressourcen in der Ansicht zu implementieren:
Erstellen Sie in Microsoft Visual Studio 2010 eine benutzerdefinierte Listendefinition.
Fügen Sie dem Projekt eine XSLT-Datei hinzu, und ändern Sie den Wert von XslLink in der Datei Schema.XML so, dass dieser auf Ihre XSLT-Datei verweist.
Fügen Sie Ihrem Projekt eine Ressourcendatei hinzu, die Ressourcenzeichenfolgen definiert.
Fügen Sie der Datei Schema.XML der Liste Parameterbindungen und der XSLT-Datei Deklarationen hinzu, damit die Parameter verwendet werden.
Eine Programmieraufgabe, die das Anpassen des Renderns von Feldern in Listenansichten veranschaulicht, finden Sie unter Gewusst wie: Anpassen des Renderings eines Felds in einer Listenansicht.
So erstellen Sie eine benutzerdefinierte Listendefinition
Zeigen Sie in Visual Studio 2010 im Menü Datei auf Neu, und klicken Sie dann auf Projekt.
Erweitern Sie im Dialogfeld Neues Projekt unter Installierte Vorlagen entweder den Knoten Visual Basic oder den Knoten Visual C#.
Erweitern Sie den Knoten SharePoint, und wählen Sie 2010 aus.
Wählen Sie unter Projekttyp die Option Listendefinition aus.
Geben Sie einen Namen für das Listendefinitionsprojekt ein, und klicken Sie anschließend auf OK.
Geben Sie im Assistent zum Anpassen von SharePoint eine Website für das Debuggen an. Wählen Sie als Vertrauensebene der Projektmappe Als Farmlösung bereitstellen aus, und klicken Sie anschließend auf Weiter.
Geben Sie im Dialogfeld Listendefinitionseinstellungen auswählen einen Anzeigenamen für Ihre Listendefinition ein, wählen Sie den Basislistentyp aus, den Sie für Ihre Definition verwenden möchten, und klicken Sie auf Fertig stellen. Der Anzeigename ist der Name, der auf der Seite Erstellen angezeigt wird.
So wird eine XSLT-Datei hinzugefügt und auf diese verwiesen
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, zeigen Sie auf Hinzufügen, und klicken Sie dann auf Zugeordneter SharePoint-Ordner.
Wählen Sie im Dialogfeld Zugeordneten SharePoint-Ordner hinzufügen den Ordner {SharePoint-Stammverzeichnis}\TEMPLATE\LAYOUTS\XSL aus, und klicken Sie dann auf OK.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den neuen Ordner XSL, zeigen Sie auf Hinzufügen, und klicken Sie dann auf Neues Element.
Erweitern Sie im Dialogfeld Neues Element hinzufügen den Knoten Visual C# für C# oder den Knoten Gemeinsame Elemente für Visual Basic.
Wählen Sie Daten und dann XSLT-Datei aus. Geben Sie einen Namen für die Datei an, und klicken Sie auf Hinzufügen.
Doppelklicken Sie im Projektmappen-Explorer auf die Datei Schema.xml, um Sie im Code-Editor zu öffnen.
Suchen Sie in der Datei Schema.xml die Ansichtsdefinition Alle Elemente oder Alle Dokumente. Sie können diese Definition anhand des DefaultView-Attributs im View-Element bestimmen, das auf TRUE festgelegt ist.
Standardmäßig gibt das XslLink-Element in der Ansicht main.xsl als XSLT-Datei an. Ändern Sie diesen Wert in den Namen, den Sie der XSLT gegeben haben, die Sie in Schritt 5 hinzugefügt haben.
So fügen Sie Ressourcen für die benutzerdefinierte Ansicht hinzu
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, zeigen Sie auf Hinzufügen, und klicken Sie dann auf Zugeordneter SharePoint-Ordner.
Wählen Sie im Dialogfeld Zugeordneten SharePoint-Ordner hinzufügen den Ordner {SharePoint-Stammverzeichnis}\CONFIG\Resources aus, und klicken Sie dann auf OK.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den neuen Ordner Resources, zeigen Sie auf Hinzufügen, und klicken Sie dann auf Neues Element.
Erweitern Sie im Dialogfeld Neues Element hinzufügen den Knoten Visual C# oder den Knoten Gemeinsame Elemente, wählen Sie Allgemein und anschließend Ressourcendatei aus. Geben Sie einen Namen für die Datei ein, und klicken Sie auf Hinzufügen.
Geben Sie im Ressourcen-Editor in Name einen Namen und in Wert einen Wert für die Ressource ein. Der Wert ist eine Zeichenfolge, die angezeigt wird, wenn die Liste leer ist. In diesem Beispiel wird "EmptyListResource" als Ressourcenname für den Wert "Please add information to this list ASAP" und "WikiResource" für "For information about the contents of this list see the" angegeben.
Fügen Sie in der Datei Schema.xml dem Abschnitt <ParameterBindings> der Ansicht Parameterbindungen hinzu. Dadurch werden die Ressourcen hinzugefügt, die Sie im vorherigen Schritt angegeben haben.
Diese Tags haben die folgenden Formate: <ParameterBinding Name=”EmptyListString” Location=”Resource(Resource1,EmptyListResource)” /> und <ParameterBinding Name=”TeamWiki” Location=”Resource(Resource1,WikiResource)” />. In diesem Beispiel sind "EmptyListString" und "TeamWiki" die Parameternamen, die in die XSLT-Datei implementiert werden können. "Resource1" ist der Name der Ressourcendatei ohne Dateierweiterung. "EmptyListResource" und "WikiResource" sind die Ressourcennamen, die Sie in der RESX-Datei angegeben haben.
So implementieren Sie Ressourcen in den XSLT-Code
Zum Überschreiben der Standardvorlagen FreeForm und EmptyTemplate, die in vwstyles.xsl definiert sind, importieren Sie die Datei main.xsl in Ihre XSLT-Datei.
<?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"/>
Beim Importieren von main.xsl werden auch vwstyles.xsl und fldtypes.xsl in Ihre Datei importiert, da beide standardmäßig auch in main.xsl importiert werden.
Da Sie zuvor den Wert des XslLink-Elements geändert und in der Datei Schema.xml Parameterbindungen hinzugefügt haben, stehen die von Ihnen definierten Ressourcenzeichenfolgen für die Verwendung in der XSLT-Datei zur Verfügung.
Deklarieren Sie die Parameter wie folgt.
<xsl:param name="MyEmptyListString" /> <xsl:param name="TeamWiki" />
Kopieren Sie die FreeForm-Vorlage in Ihre XSLT-Datei, und fügen Sie wie folgt einen Abschnitt hinzu, der ein spezielles Rendern des Fußzeilenbereichs in der Ansicht Alle Element bestimmt.
<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>
In diesem Beispiel wird auf den Fußzeilenbereich der Ansicht ein spezielles Rendern angewendet. Dazu wird der XmlDefinition-Parameter zum Abrufen des TemplateType-Elements der Listendefinition abgerufen, das den Wert 10000 hat. Darüber hinaus werden im Beispiel der "TeamWiki"-Parameter und der globale "RootSiteUrl"-Parameter angegeben, um einerseits die Zeichenfolge "WikiResource" und andererseits die Stammwebsite der Websitesammlung zurückzugeben, die die übergeordnete Website der Liste enthält. Das Beispiel setzt eine Wiki-Bibliothek in der Stammwebsite "TeamWiki" voraus.
Fügen Sie den folgenden Code der XSLT-Datei hinzu, der die EmptyTemplate-Definition überschreibt, um den angezeigten Text zu ändern.
<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>
Klicken Sie im Menü Erstellen auf Projektmappe erstellen und anschließend auf Projektmappe bereitstellen, um Ihre benutzerdefinierte Liste der SharePoint Foundation-Website bereitzustellen.
Hinweis Bei Bereitstellung des Projekts legt Visual Studio 2010 die erstellten Ressourcendateien im angegebenen zugeordneten Ordner (%ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\CONFIG\Resources) ab. Bei Erstellen einer neuen Webanwendung kopiert SharePoint Foundation die RESX-Datei in den Ordner \inetpub\...\App_GlobalResources, der für die Webanwendung erstellt wird, in dem sich die Datei befinden muss, damit die Ressourcen zum Einsatz kommen. Damit die Datei jedoch in Webanwendungen zum Einsatz kommt, die bei Bereitstellung des Projekts bereits vorhanden sind, müssen Sie die Datei manuell in den Ordner App_GlobalResources der Webanwendung kopieren.
Siehe auch
Referenz
Konzepte
XsltListViewWebPart und benutzerdefinierte Listenansichten
Übersicht über das XSLT-System des Rendering von Listenansichten