Vorgehensweise: Hinzufügen einer Unterwebsite zur Leiste für häufig verwendete Hyperlinks oder zum Menü "Schnellstart"
Letzte Änderung: Montag, 1. November 2010
Gilt für: SharePoint Foundation 2010
Wenn Sie auf der Benutzeroberfläche von Microsoft SharePoint Foundation eine Unterwebsite erstellen, können Sie angeben, ob Links zur neuen Website im Bereich Schnellstartleiste und der Leiste für häufig verwendete Hyperlinks der übergeordneten Website angezeigt werden sollen. Sie können auch Links an beiden Stellen hinzufügen, indem Sie entsprechenden Code zur Änderung der SPWeb.Navigation.TopNavigationBar-Eigenschaft der übergeordneten Website und ihrer SPWeb.Navigation.QuickLaunch-Eigenschaft schreiben.
Einfügen eines Links in die Leiste für häufig verwendete Hyperlinks
Im SharePoint Foundation-Objektmodell wird die Navigationsstruktur der Leiste für häufig verwendete Hyperlinks durch eine Instanz der SPNavigationNodeCollection-Klasse dargestellt. Greifen Sie zum Abrufen der Auflistung zunächst auf die SPWeb.Navigation-Eigenschaft der Website zu, die ein SPNavigation-Objekt zurückgibt, und anschließend auf die TopNavigationBar-Eigenschaft dieses Objekts zu.
![]() |
---|
Wenn eine Website für die Verwendung der Leiste für häufig verwendete Hyperlinks ihrer übergeordneten Website konfiguriert ist, gibt die TopNavigationBar-Eigenschaft null zurück. |
Wenn Sie über eine Auflistung von Navigationsknoten verfügen, erstellen Sie ein SPNavigationNode-Objekt zum Darstellen des neuen Links, und rufen Sie dann eine Methode der SPNavigationNodeCollection-Klasse auf, um den Knoten der Leiste für häufig verwendete Hyperlinks hinzuzufügen.
So fügen Sie auf der Leiste für häufig verwendete Hyperlinks der übergeordneten Website einen Link zu einer Unterwebsite hinzu
Rufen Sie einen Verweis auf das SPWeb-Objekt ab, das die Unterwebsite darstellt.
SPWeb child = site.OpenWeb("parent/child");
Dim child As SPWeb = site.OpenWeb("parent/child")
Prüfen Sie, ob die Unterwebsite tatsächlich eine Unterwebsite ist, indem Sie den Wert der IsRootWeb-Eigenschaft überprüfen. Prüfen Sie ferner, ob die übergeordnete Website keine Leiste für häufig verwendete Hyperlinks aufweist, indem Sie den Wert ihrer UseShared-Eigenschaft überprüfen.
if (!child.IsRootWeb && !child.ParentWeb.Navigation.UseShared)
If Not child.IsRootWeb AndAlso Not child.ParentWeb.Navigation.UseShared Then
Rufen Sie das SPNavigationNodeCollection-Objekt ab, das die Leiste für häufig verwendete Hyperlinks der übergeordneten Website darstellt.
SPNavigationNodeCollection topnav = child.ParentWeb.Navigation.TopNavigationBar;
Dim topnav As SPNavigationNodeCollection = child.ParentWeb.Navigation.TopNavigationBar
Suchen Sie einen vorhandenen Link zur Unterwebsite, indem Sie die Auflistung auf ein SPNavigationNode-Objekt mit einer Url-Eigenschaft abfragen, deren Wert dem Wert der SPWeb.ServerRelativeUrl-Eigenschaft der Unterwebsite entspricht.
SPNavigationNode node = topnav .Cast<SPNavigationNode>() .FirstOrDefault(n => n.Url.Equals(child.ServerRelativeUrl));
Dim node As SPNavigationNode = topnav.Cast(Of SPNavigationNode)().FirstOrDefault( _ Function(n) n.Url.Equals(child.ServerRelativeUrl))
Falls kein Link vorhanden ist, erstellen Sie ein SPNavigationNode-Objekt zum Darstellen eines Links, und rufen Sie eine Methode der SPNavigationNodeCollection-Klasse auf, um den Link der Leiste für häufig verwendete Hyperlinks der übergeordneten Website hinzuzufügen.
if (node == null) { node = new SPNavigationNode(child.Title, child.ServerRelativeUrl); node = topnav.AddAsLast(node); }
If node Is Nothing Then node = New SPNavigationNode(child.Title, child.ServerRelativeUrl) node = topnav.AddAsLast(node) End If
Beispiel
Das folgende Beispiel veranschaulicht das Hinzufügen eines Links zu einer Unterwebsite in der Navigationsstruktur der übergeordneten Website. Das Beispiel gehört zu einem größeren Projekt, in dem ein Feature mit dem Gültigkeitsbereich "Website" zum Hinzufügen des Links verwendet wird. Das Feature enthält einen Ereignishandler, der die SPFeatureReceiver-Klasse implementiert, und Code zum Erstellen des Links und zu dessen Hinzufügung zur übergeordneten Website in der FeatureActivated-Methode des Featureempfängers.
Wenn die Website, in der das Feature aktiviert wird, Unterwebsites hat, sucht die Methode nach einer Unterwebsite mit dem Namen "ourwiki". Wenn diese Unterwebsite vorhanden ist, ruft die Methode einen Verweis darauf ab. Wenn keine Unterwebsites vorhanden sind oder es Unterwebsites gibt, von denen jedoch keine "ourwiki" heißt, erstellt die Methode eine solche Unterwebsite.
Als Nächstes fügt die Methode den Navigationslink zur Unterwebsite hinzu. Wenn die aktuelle Website eine eigene Leiste für häufig verwendete Hyperlinks hat (d. h. nicht die Leiste der übergeordneten Website verwendet), wird der Link der Leiste für häufig verwendete Hyperlinks der aktuellen Website hinzugefügt. Andernfalls wird der Link dem Menü Schnellstart der aktuellen Website hinzugefügt.
Sowohl Schnellstart als auch die Leiste für häufig verwendete Hyperlinks werden von SPNavigationNodeCollection-Objekten dargestellt. Deshalb ist der Code an dieser Stelle unabhängig davon identisch, welche Auflistung das Ziel des Navigationslinks ist. Im Beispiel wird zunächst geprüft, ob ein Link zur Unterwebsite bereits in der Auflistung der Navigationsknoten vorhanden ist. Falls nicht, erstellt der Code einen Link und fügt ihn hinzu.
![]() |
---|
Im Beispielcode werden mehrere Typen ohne Qualifizierung verwendet. Damit der Code ordnungsgemäß kompiliert wird, muss Ihre Featureempfängerklasse die folgenden Namespaces importieren: |
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
// Get the website where the feature is activated.
SPWeb parentWeb = properties.Feature.Parent as SPWeb;
if (parentWeb == null)
return;
SPWeb childWeb = null;
string childName = "ourwiki";
// If a subsite by that name exists, open it.
string[] webs = parentWeb.Webs.Names;
if (webs != null && Array.IndexOf(webs, childName) >= 0)
{
childWeb = parentWeb.Webs[childName];
}
// Otherwise, create the subsite.
if (childWeb == null)
{
string title = "Wiki";
string desc = "A place to capture knowledge.";
uint lcid = parentWeb.Language;
string templateName = "WIKI#0";
childWeb = parentWeb.Webs.Add(childName, title, desc, lcid, templateName, false, false);
}
// Let the subsite use the parent site's top link bar.
childWeb.Navigation.UseShared = true;
// Get a collection of navigation nodes.
SPNavigationNodeCollection nodes = null;
if (parentWeb.Navigation.UseShared)
{
// Parent site does not have its own top link bar
// so use the parent's Quick Launch.
nodes = parentWeb.Navigation.QuickLaunch;
}
else
{
// Parent site has its own top link bar,
// so use it.
nodes = parentWeb.Navigation.TopNavigationBar;
}
// Check for an existing link to the subsite.
SPNavigationNode node = nodes
.Cast<SPNavigationNode>()
.FirstOrDefault(n => n.Url.Equals(childWeb.ServerRelativeUrl));
// No link, so add one.
if (node == null)
{
// Create the node.
node = new SPNavigationNode(childWeb.Title, childWeb.ServerRelativeUrl);
// Add it to the collection.
node = nodes.AddAsLast(node);
}
childWeb.Dispose();
parentWeb.Dispose();
}
Public Overrides Sub FeatureActivated(ByVal properties As SPFeatureReceiverProperties)
'Get the website where the feature is activated.
Dim parentWeb As SPWeb = TryCast(properties.Feature.Parent, SPWeb)
If parentWeb Is Nothing Then
Return
End If
Dim childWeb As SPWeb = Nothing
Dim childName As String = "ourwiki"
' If a subsite by that name exists, open it.
Dim webs As String() = parentWeb.Webs.Names
If webs IsNot Nothing AndAlso Array.IndexOf(webs, childName) >= 0 Then
childWeb = parentWeb.Webs(childName)
End If
' Otherwise, create the subsite.
If childWeb Is Nothing Then
Dim title As String = "Wiki"
Dim desc As String = "A place to capture knowledge."
Dim lcid As UInteger = parentWeb.Language
Dim templateName As String = "WIKI#0"
childWeb = parentWeb.Webs.Add(childName, title, desc, lcid, _
templateName, False, False)
End If
' Let the subsite use the parent site's top link bar.
childWeb.Navigation.UseShared = True
' Get a collection of navigation nodes.
Dim nodes As SPNavigationNodeCollection = Nothing
If parentWeb.Navigation.UseShared Then
' Parent site does not have its own top link bar
' so use the parent's Quick Launch.
nodes = parentWeb.Navigation.QuickLaunch
Else
' Parent site has its own top link bar,
' so use it.
nodes = parentWeb.Navigation.TopNavigationBar
End If
' Check for an existing link to the subsite.
Dim node As SPNavigationNode = nodes.Cast(Of SPNavigationNode)().FirstOrDefault( _
Function(n) n.Url.Equals(childWeb.ServerRelativeUrl))
' No link, so add one.
If node Is Nothing Then
' Create the node.
node = New SPNavigationNode(childWeb.Title, childWeb.ServerRelativeUrl)
' Add it to the collection.
node = nodes.AddAsLast(node)
End If
childWeb.Dispose()
parentWeb.Dispose()
End Sub
Einfügen eines Links in das Menü "Schnellstart"
Im SharePoint Foundation-Objektmodell wird jeder Navigationslink im Menü Schnellstart von einer Instanz der SPNavigationNode-Klasse dargestellt. Die oberste Ebene der Struktur des Menüs Schnellstart ist eine Auflistung von SPNavigationNode-Objekten, die von einer Instanz der SPNavigationNodeCollection-Klasse dargestellt werden. Die Knoten auf dieser ersten Menüebene sind die Überschriften: Liste, Bibliotheken, Websites usw. Jede Überschrift hat eine SPNavigationNode.Children-Eigenschaft, die eine Auflistung von Knoten zurückgibt, die die Links unter der Überschrift darstellen.
Zum Einfügen eines Links unter der Überschrift Websites können Sie die AddToQuickLaunch-Methode aufrufen und die Überschrift Websites angeben. Die Methode akzeptiert zwei Argumente: ein SPNavigationNode-Objekt, das den neuen Link darstellt, und einen Wert der SPQuickLaunchHeading-Aufzählung, der die Überschrift angibt, die den Link erhalten soll.
SPNavigation nav = web.ParentWeb.Navigation;
SPNavigationNode node = new SPNavigationNode(web.Title, web.ServerRelativeUrl);
node = nav.AddToQuickLaunch(node, SPQuickLaunchHeading.Sites);
Dim nav As SPNavigation = web.ParentWeb.Navigation
Dim node As SPNavigationNode = New SPNavigationNode(web.Title, web.ServerRelativeUrl)
node = nav.AddToQuickLaunch(node, SPQuickLaunchHeading.Sites)
Sie sollten allerdings prüfen, ob unter der Überschrift Websites nicht bereits ein Link zur Unterwebsite vorhanden ist. Eine Möglichkeit der Überprüfung wird nachfolgend erklärt.
So fügen Sie auf der Schnellstartleiste der übergeordneten Website einen Link zu einer Unterwebsite hinzu
Rufen Sie einen Verweis auf das SPWeb-Objekt ab, das die Unterwebsite darstellt.
SPWeb child = site.OpenWeb("parent/child");
Dim child As SPWeb = site.OpenWeb("parent/child")
Vergewissern Sie sich, dass die Unterwebsite auch tatsächlich eine Unterwebsite und nicht die Stammwebsite der Sammlung ist.
if (!child.IsRootWeb)
If Not child.IsRootWeb Then
Rufen Sie das SPNavigation-Objekt der übergeordneten Website ab.
SPNavigation nav = web.ParentWeb.Navigation;
Dim nav As SPNavigation = web.ParentWeb.Navigation
Rufen Sie die Überschrift Websites im Menü Schnellstart ab, indem Sie die GetNodeById-Methode aufrufen und das ganzzahlige Äquivalent von SPQuickLaunchHeading.Sites übergeben.
SPNavigationNode sitesHeading = nav.GetNodeById((int)SPQuickLaunchHeading.Sites);
Dim sitesHeading As SPNavigationNode = nav.GetNodeById(CInt(SPQuickLaunchHeading.Sites))
Hinweis
Wenn das Menü Schnellstart noch nicht die Überschrift Websites enthält, gibt der Aufruf von GetNodeById den Wert null zurück.
Suchen Sie nach einem vorhandenen Link zur Unterwebsite, indem Sie die untergeordneten Elemente der Überschrift Websites für ein SPNavigationNode-Objekt abrufen, das eine Url-Eigenschaft mit einem Wert hat, der dem der SPWeb.ServerRelativeUrl-Eigenschaft der Unterwebsite entspricht.
SPNavigationNode newNode = null; if (sitesHeading != null) { newNode = sitesHeading .Children .Cast<SPNavigationNode>() .FirstOrDefault(n => n.Url == web.ServerRelativeUrl); }
Dim newNode As SPNavigationNode = Nothing If sitesHeading IsNot Nothing Then newNode = sitesHeading.Children.Cast(Of SPNavigationNode)().FirstOrDefault( _ Function(n) n.Url = web.ServerRelativeUrl) End If
Falls kein Link vorhanden ist, erstellen Sie ein SPNavigationNode-Objekt zum Darstellen eines Links, und rufen Sie die AddToQuickLaunch-Methode auf, um ihn dem Menü Schnellstart unter der Überschrift Websites der übergeordneten Website hinzuzufügen.
if (newNode == null) { // Create the link. newNode = new SPNavigationNode(web.Title, web.ServerRelativeUrl); // Add it to the parent site's Quick Launch. newNode = nav.AddToQuickLaunch(newNode, SPQuickLaunchHeading.Sites); }
If newNode Is Nothing Then ' Create the link. newNode = New SPNavigationNode(web.Title, web.ServerRelativeUrl) ' Add it to the parent site's Quick Launch. newNode = nav.AddToQuickLaunch(newNode, SPQuickLaunchHeading.Sites) End If
Beispiel
Das folgende Beispiel ist eine Konsolenanwendung, die das Einfügen eines Links zu einer Unterwebsite im Menü Schnellstart der übergeordneten Website veranschaulicht. Sie können ähnlichen (entsprechend angepassten) Code der FeatureActivated-Methode eines Featurempfängers hinzufügen, der zum Erstellen einer Unterwebsite dient.
using System;
using System.Linq;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Navigation;
namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
using (SPSite site = new SPSite("https://localhost"))
{
// Get the subsite.
using (SPWeb web = site.OpenWeb("parent/child"))
{
if (!web.IsRootWeb)
{
// Get the parent site's navigator.
SPNavigation nav = web.ParentWeb.Navigation;
// Get the Sites heading.
SPNavigationNode sitesHeading = nav.GetNodeById((int)SPQuickLaunchHeading.Sites);
// Check if a link to the child already exists.
SPNavigationNode newNode = null;
if (sitesHeading != null)
{
newNode = sitesHeading
.Children
.Cast<SPNavigationNode>()
.FirstOrDefault(n => n.Url == web.ServerRelativeUrl);
}
// No link, so create one.
if (newNode == null)
{
// Create the link.
newNode = new SPNavigationNode(web.Title, web.ServerRelativeUrl);
// Add it to the parent site's Quick Launch.
newNode = nav.AddToQuickLaunch(newNode, SPQuickLaunchHeading.Sites);
}
Console.WriteLine("A link to {0} is on the Quick Launch for {1}", newNode.Title, nav.Web.Title);
}
}
}
Console.Write("\nPress ENTER to continue....");
Console.ReadLine();
}
}
}
Imports System
Imports Microsoft.SharePoint
Imports Microsoft.SharePoint.Navigation
Module ConsoleApp
Sub Main()
Using site As New SPSite("https://localhost")
Using web As SPWeb = site.OpenWeb("parent/child")
If Not web.IsRootWeb Then
' Get the parent site's navigator.
Dim nav As SPNavigation = web.ParentWeb.Navigation
' Get the Sites heading.
Dim sitesHeading As SPNavigationNode = nav.GetNodeById(CInt(SPQuickLaunchHeading.Sites))
' Check if a link to the child already exists.
Dim newNode As SPNavigationNode = Nothing
If sitesHeading IsNot Nothing Then
newNode = sitesHeading.Children.Cast(Of SPNavigationNode)().FirstOrDefault( _
Function(n) n.Url = web.ServerRelativeUrl)
End If
' No link, so create one.
If newNode Is Nothing Then
' Create the link.
newNode = New SPNavigationNode(web.Title, web.ServerRelativeUrl)
' Add it to the parent site's Quick Launch.
newNode = nav.AddToQuickLaunch(newNode, SPQuickLaunchHeading.Sites)
End If
Console.WriteLine("A link to {0} is on the Quick Launch for {1}", newNode.Title, nav.Web.Title)
End If
End Using
End Using
Console.Write(vbCrLf & "Press ENTER to continue....")
Console.Read()
End Sub
End Module
Siehe auch
Aufgaben
Gewusst wie: Anpassen der Anzeige der Schnellstartleiste
Gewusst wie: Anzeigen oder Ausblenden der Schnellstartleiste
Konzepte
Hinzufügen von Hyperlinks zur Leiste für häufig verwendete Hyperlinks
Gewusst wie: Freigeben der Leiste für häufig verwendete Hyperlinks zwischen Websites