Website Treeview auf SiteCollection Ebene als WebPart bereitstellen

Grundsätzlich bietet die Out-of-the-Box Strukturansicht von SharePoint 2010 eine gute und einfache Möglichkeit, Websiteinhalte als Baumansicht in der Schnellstartleiste/Current Navigation bereitzustellen. Leider sind die Konfigurationsmöglichkeiten relativ begrenzt, so dass z.B. nicht ohne Weiteres die komplette Websitehierarchie abgebildet werden kann, da standardmäßig die aktuelle Website (Current Web Context) als oberster Knotenpunkt für die TreeView dient. Folgende Grafik zeigt dies am Beispiel einer Subwebsite zweiter Ebene, welche NICHT ihre übergeordneten Websites anzeigt: 
image
Daher kann es durchaus sinnvoll sein, die Root Website als Wurzelknotenpunkt der TreeView zu setzen. Dies kann durch serverseitigen Code geschehen. Im folgenden Beitrag wird gezeigt, wie es mit Hilfe eines Visual Webparts mit benutzerdefinierter DataSource möglich ist, eine TreeView auf SiteCollection Ebene für SharePoint 2010 bereit zu stellen, welche dann als WebPart entweder auf eine beliebige aspx-Page oder direkt in die Masterpage eingebunden werden kann.

  • Als erstes ist dazu in Visual Studio ein neues SharePoint Projekt anzulegen (Visual WebPart) und das VisualWebPart im Solution Explorer ggf. entsprechend aussagekräftig zu benennen, z.B. “WebSitesTreeView”. Dadurch ändert sich das “Title” Property innerhalb der .webpart-Datei, welches dem Anzigenamen des WebParts z.B. beim Hinzufügen in der Weboberfläche entspricht.
    image 2013-12-16_23h52_31
  • Im User-Control des WebParts (.ascx-Datei) ist am Ende folgender Code einzufügen:
    <div id="Div1" class="ms-quicklaunchouter" runat="server">
        <div class="ms-treeviewouter">
            <SharePoint:SPRememberScroll runat="server"
                id="RememberScroll1" 
                onscroll="javascript:_spRecordScrollPositions(this);"
                style="width: 220px;">
                <Sharepoint:SPTreeView runat="server"
                    id="TreeView1" 
                    ShowLines="false"
                    DataSourceId="CustomTreeViewDataSource"
                    ExpandDepth="0"
                    SelectedNodeStyle-CssClass="ms-tvselected"
                    NodeStyle-CssClass="ms-navitem"
                    NodeStyle-HorizontalPadding="2"
                    SkipLinkText=""
                    NodeIndent="8"
                    ExpandImageUrl="/_layouts/images/tvclosed.png"
                    ExpandImageUrlRtl="/_layouts/images/tvclosedrtl.png"
                    CollapseImageUrl="/_layouts/images/tvopen.png"
                    CollapseImageUrlRtl="/_layouts/images/tvopenrtl.png"
                    NoExpandImageUrl="/_layouts/images/tvblank.gif"
                    NodeWrap="True" >
                </Sharepoint:SPTreeView>
            </Sharepoint:SPRememberScroll>
        </div>
    </div>
    <SharePoint:SPHierarchyDataSourceControl runat="server"  
        id="CustomTreeViewDataSource"  
        ShowDocLibChildren="false" 
        ShowListChildren="false"
        ShowFolderChildren="false" 
        IncludeDiscussionFolders="false" />

Das “SPTreeView” Steuerelement definiert dient zur Ausgabe der im “SPHierarchyDatasourceControl” festgelegten Datenquelle als Baumansicht. Zusätzlich wird im Control der Datenquelle angegeben, dass keine DokumentBibliotheken, Listen, Unterordner und Diskussionsforen in der Baumansicht angezeigt werden.

  • Damit die Datenquelle nun auch mit der Root-Website der aktuellen SiteCollection befüllt werden kann, ist folgende Codezeile im Code behind der User Control (.ascx.cs-Datei) in der Page_Load Methode einzufügen. 
    image
    CustomTreeViewDataSource.RootWebId = SPContext.Current.Site.RootWeb.ID.ToString();
    Dadurch wird Beim Laden des WebParts der Kontext der aktuellen SiteCollection ermittelt und dessen Root-Website als Wurzelknoten in die Datenquelle (SPHierarchyDataSourceControl) der TreeView festgelegt. Dies geschieht über die ID der Root-Website.
  • Anschließend kann die Solution Debuggt/Deployt werden.
  • Wenn das WebPart auf einer beliebigen aspx-Page einer SharePoint Website hinzugefügt werden soll, ist dies nun über den Standardweg in der Weboberfläche möglich (zu finden unter der Standardkategorie “Custom”).
  • Das WebPart kann aber auch direkt in der Masterpage implementiert werden. Dazu muss diese im SharePoint Designer geöffnet und das WebPart an gewünschter Stelle, z.B. in der Current Navigation oberhalb des “PlaceHolderQuickLaunchBottom” Controls, hinzugefügt werden. Dies geschieht über das Ribbon –> Insert –> WebPart –> Custom –> Titel des WebParts
    image  image
  • Nun muss die Masterpage nur noch gespeichert und ggf. veröffentlicht werden.
  • Die Ergebnisse der beiden Varianten (Einbindung in aspx-Page bzw. Masterpage) entsprechen dann der folgenden Abbildung:
    image
Kommentare sind geschlossen