Partager via


Ajout de liens à Lancement rapide

Dernière modification : mercredi 20 octobre 2010

S’applique à : SharePoint Foundation 2010

Dans cet article
Navigation dans la structure du menu
Ajout d’un élément sous un titre intégré
Spécification d’un emplacement sur le menu
Ajout d’un titre personnalisé

Dans un site Web Microsoft SharePoint Foundation, Lancement rapide désigne le menu statique affiché sur le côté gauche de la plupart des pages de contenu. Le modèle objet SharePoint Foundation représente le menu Lancement rapide sous forme d’une hiérarchie d’objets SPNavigationNode, chaque objet représentant un lien hypertexte sur le menu.

L’ajout d’un nouveau lien au menu revient à construire un objet représentant le lien et à l’ajouter à l’endroit approprié dans la hiérarchie.

Au niveau supérieur du menu Lancement rapide figurent les titres. Vous pouvez en obtenir la collection en récupérant d’abord l’objet retourné par la propriété Navigation du site Web, puis en obtenant la propriété QuickLaunch de cet objet. La propriété QuickLaunch retourne un objet SPNavigationNodeCollection qui contient l’ensemble des objets SPNavigationNode représentant les titres.

SPNavigationNodeCollection ql = web.Navigation.QuickLaunch;
Dim ql As SPNavigationNodeCollection = web.Navigation.QuickLaunch

Au niveau inférieur suivant, nous trouvons les éléments. Chaque objet SPNavigationNode qui représente un titre possède une propriété Children qui peut contenir une collection de nœuds représentant les éléments sous un titre. S’il ne figure aucun élément sous un titre, la propriété Children du nœud du titre renvoie une collection vide.

foreach (SPNavigationNode heading in web.Navigation.QuickLaunch)
{
    foreach (SPNavigationNode item in heading.Children)
    {

        // Do something.
    }
}
For Each heading As SPNavigationNode In web.Navigation.QuickLaunch
    For Each item As SPNavigationNode In heading.Children

        ' Do something.
    Next
Next

Le titre et chaque élément situé en-dessous sont les objets SPNavigationNode qui représentent des liens hypertexte. Le texte affiché pour chaque lien est encapsulé dans la propriété Title de l’objet, et l’URL du lien se trouve dans la propriété Url de l’objet. Les valeurs de ces propriétés sont indépendantes de la cible du lien. Si celui-ci pointe vers un site Web et que le titre ou l’URL du site change, le titre et l’URL définis dans le nœud de navigation ne sont pas automatiquement modifiés.

Par défaut, le menu Lancement rapide est configuré pour n’afficher que deux niveaux. Vous pouvez personnaliser Lancement rapide de telle sorte que les niveaux additionnels apparaissent sur le menu statique ou sur les menus volants. Pour plus d’informations, voir Procédure : personnaliser l'affichage du menu de lancement rapide.

Ajout d’un élément sous un titre intégré

Pour insérer un lien sous l’un des titres standard de Lancement rapide, tels que Listes ou Bibliothèques, appelez la méthode AddToQuickLaunch. Cette méthode accepte deux arguments : un objet SPNavigationNode qui représente le nouveau lien, et une valeur d’énumération SPQuickLaunchHeading qui spécifie le titre qui doit recevoir le lien.

La méthode AddToQuickLaunch se trouve dans la classe SPNavigation, dont une instance est retournée par la propriété Navigation de la classe SPWeb.

Pour ajouter un élément sous un titre intégré

  1. (Facultatif) Vérifiez l’existence d’un lien à la même cible en appelant la méthode GetNodeByUrl de l’objet retourné par la propriété Navigation du site Web.

    Si la structure de navigation du site Web n’inclut pas un lien qui pointe vers l’URL, la méthode GetNodeByUrl renvoie null.

  2. Créez un nœud pour représenter le lien en appelant l’un des constructeurs de la classe SPNavigationNode.

    La classe possède deux constructeurs :

    • Le premier constructeur accepte deux arguments : une chaîne qui contient le texte affiché pour le lien, et une chaîne qui contient l’URL que le lien doit résoudre. Utilisez ce constructeur uniquement pour les liens internes – liens au contenu de la même collection de sites. L’URL doit être relative au serveur.

    • Le second constructeur accepte trois arguments. Les deux premiers arguments sont identiques à ceux de l’autre constructeur. Le troisième argument est une valeur boolean qui indique si le lien est externe ou interne. Passez true pour le lien vers un site Web externe, et passez une URL absolue dans le second argument. Si le lien est interne, passez false et une URL relative au serveur.

    Notes

    Un objet SPNavigationNode n’est pas totalement initialisé jusqu’à ce qu’il soit ajouté à une collection. Si l’objet n’est pas encore membre d’une collection, les propriétés en lecture seule telles que la propriété Id et la propriété ParentId renvoient null.

  3. Appelez la méthode AddToQuickLaunch, en passant le nouveau nœud comme premier argument et une valeur d’énumération SPQuickLaunchHeading comme second argument.

    La méthode AddToQuickLaunch renvoie une instance initialisée de la classe SPNavigationNode. Vous pouvez utiliser cet objet pour obtenir et définir d’autres propriétés du nœud. Vous devez appeler la méthode Update après avoir modifié les propriétés de l’objet.

Notes

La solution la plus rapide pour ajouter une liste ou une bibliothèque de documents existante au menu Lancement rapide consiste à obtenir un objet SPList qui représente la liste ou la bibliothèque, puis à définir la propriété OnQuickLaunch avec la valeur true. Un élément de la liste ou de la bibliothèque est automatiquement ajouté sous le titre approprié. Pour plus d’informations sur les titres Lancement rapide, voir l’énumération SPQuickLaunchHeading. Si le titre n’apparaît pas encore dans le menu Lancement rapide, il est ajouté.

Exemple

L’application console suivante ajoute un élément sous le titre Listes du menu Lancement rapide.

using System;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Navigation;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            using (SPSite site = new SPSite("https://localhost"))
            {
                using (SPWeb web = site.OpenWeb())
                {
                    // Get the Links list or create it if it does not exist.
                    SPList list = web.Lists.TryGetList("Links");

                    if (list == null || list.BaseTemplate != SPListTemplateType.Links)
                    {
                        // Create the list.
                        Guid listId = web.Lists.Add("Links", "Interesting hyperlinks", SPListTemplateType.Links);
                        list = web.Lists.GetList(listId, false);
                    }

                    // Check for an existing link to the list.
                    SPNavigationNode listNode = web.Navigation.GetNodeByUrl(list.DefaultViewUrl);
 
                    // No link, so create one.
                    if (listNode == null)
                    {
                        // Create the node.
                        listNode = new SPNavigationNode(list.Title, list.DefaultViewUrl);

                        // Add it to Quick Launch.
                        listNode = web.Navigation.AddToQuickLaunch(listNode, SPQuickLaunchHeading.Lists);
                    }
                }
            }
            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()

                ' Get the Links list or create it if it does not exist.
                Dim list As SPList = web.Lists.TryGetList("Links")

                If list Is Nothing OrElse list.BaseTemplate <> SPListTemplateType.Links Then

                    ' Create the list.
                    Dim listId As Guid = web.Lists.Add("Links", "Interesting hyperlinks", SPListTemplateType.Links)
                    list = web.Lists.GetList(listId, False)
                End If

                ' Check for an existing link to the list.
                Dim listNode As SPNavigationNode = web.Navigation.GetNodeByUrl(list.DefaultViewUrl)

                ' No link, so create one.
                If listNode Is Nothing Then

                    ' Create the node.
                    listNode = New SPNavigationNode(list.Title, list.DefaultViewUrl)

                    ' Add it to Quick Launch.
                    listNode = web.Navigation.AddToQuickLaunch(listNode, SPQuickLaunchHeading.Lists)
                End If

            End Using

        End Using

        Console.Write(vbCrLf & "Press ENTER to continue....")
        Console.Read()
    End Sub

End Module

Spécification d’un emplacement sur le menu

La méthode AddToQuickLaunch décrite dans la précédente section ajoute un nouveau lien comme dernier élément sous le titre spécifié du menu Lancement rapide. Vous pouvez obtenir un contrôle encore plus fin de l’emplacement en utilisant l’une des différentes méthodes de la classe SPNavigationNodeCollection. Le tableau suivant décrit brièvement ces méthodes.

Méthode

Description

Add

Ajoute un nouveau nœud après le nœud spécifié dans la collection.

AddAsFirst

Ajoute un nouveau nœud comme premier nœud de la collection.

AddAsLast

Ajoute un nouveau nœud comme dernier nœud de la collection.

La procédure suivante explique comment utiliser la méthode Add pour insérer un lien immédiatement après un élément spécifié du menu Lancement rapide.

Pour insérer un lien après un élément existant du menu

  1. Obtenez le nœud du titre sous lequel vous voulez placer le lien en appelant la méthode GetNodeById de la classe SPNavigation.

    // Get the Libraries heading.
    SPNavigationNode heading = web.Navigation.GetNodeById((int)SPQuickLaunchHeading.Documents);
    
    ' Get the Libraries heading.
    Dim heading As SPNavigationNode = web.Navigation.GetNodeById(CInt(SPQuickLaunchHeading.Documents))
    
  2. Obtenez le nœud de l’élément après lequel vous voulez placer le lien en interrogeant la collection retournée par la propriété Children du nœud du titre.

    // If a node for Shared Documents exists, the new node will go after it.
    SPList sharedDocs = web.Lists.TryGetList("Shared Documents");
    SPNavigationNode sharedDocsNode = null;
    if (sharedDocs != null)
        sharedDocsNode = librariesHeading
            .Children
            .Cast<SPNavigationNode>()
            .FirstOrDefault(n => n.Url == sharedDocs.DefaultViewUrl);
    
    ' If a node for Shared Documents exists, the new node will go after it.
    Dim sharedDocs As SPList = web.Lists.TryGetList("Shared Documents")
    Dim sharedDocsNode As SPNavigationNode = Nothing
    If sharedDocs IsNot Nothing Then
        sharedDocsNode = librariesHeading.Children.Cast(Of SPNavigationNode)().FirstOrDefault( _
            Function(n) n.Url = sharedDocs.DefaultViewUrl)
    End If
    
  3. Construisez un objet SPNavigationNode pour représenter le nouveau lien.

    SPNavigationNode newNode = new SPNavigationNode(list.Title, list.DefaultViewUrl);
    
    Dim newNode As SPNavigationNode = New SPNavigationNode(list.Title, list.DefaultViewUrl)
    
  4. Ajoutez le lien en appelant la méthode Add, en passant le nouveau nœud comme premier argument et le nœud après lequel l’ajouter comme second argument.

    newNode = heading.Children.Add(newNode, sharedDocsNode);
    
    newNode = heading.Children.Add(newNode, sharedDocsNode)
    

Notes

Un objet SPNavigationNode n’est pas complètement initialisé tant qu’il n’est pas ajouté à une collection. Si l’objet n’est pas encore membre d’une collection, les propriétés en lecture seule telles que la propriété Id et la propriété ParentId retournent null.

Exemple

L’exemple suivant montre comment ajouter un lien à un emplacement spécifique du menu Lancement rapide. L’exemple fait partie d’un projet plus large qui utilise un Composant fonctionnel de site Web pour créer une bibliothèque de documents intitulée Meeting Notes (Notes de réunion). Le Composant comprend un gestionnaire d’événements qui implémente la classe SPFeatureReceiver. Dans la méthode FeatureActivated du récepteur du Composant, vous trouverez le code permettant de créer la bibliothèque Meeting Notes (Notes de réunion) et de lui ajouter un lien sous le titre Bibliothèques. Si le menu propose un lien vers la bibliothèque Documents partagés, le nouveau lien est inséré immédiatement après. Dans le cas contraire, le code crée le lien vers Meeting Notes (Notes de réunion) comme premier élément après le titre Bibliothèques.

Notes

L’exemple de code utilise plusieurs types sans qualification. Pour que le code se compile correctement, la classe du récepteur du Composant doit importer les espaces de noms suivants :

public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
    // Get the website where the feature is activated.
    SPWeb web = properties.Feature.Parent as SPWeb;
    if (web == null)
        return;

    // Get the Meeting Notes document library.
    SPList meetingNotes = web.Lists.TryGetList("Meeting Notes");
    if (meetingNotes == null)
    {
        // Create the library if it does not exist.
        Guid listId = web.Lists.Add("Meeting Notes", "An archive for meeting notes.", SPListTemplateType.DocumentLibrary);
        meetingNotes = web.Lists.GetList(listId, false);
    }

    // Check for an existing Quick Launch node for Meeting Notes.
    SPNavigationNode meetingNotesNode = web.Navigation.GetNodeByUrl(meetingNotes.DefaultViewUrl);

    // If a Meeting Notes node exists on Quick Launch, nothing more to do.
    if (meetingNotesNode != null)
        return;

    // Still here, so create a node for Meeting Notes.
    meetingNotesNode = new SPNavigationNode(meetingNotes.Title, meetingNotes.DefaultViewUrl);

    // Get the Libraries heading.
    SPNavigationNode librariesHeading = web.Navigation.GetNodeById((int)SPQuickLaunchHeading.Documents);

    // If the Libraries heading does not exist or it exists but has no items below it,
    // then Meeting Notes will be the first item.
    if (librariesHeading == null || librariesHeading.Children.Count == 0)
    {
        web.Navigation.AddToQuickLaunch(meetingNotesNode, SPQuickLaunchHeading.Documents);
        return;
    }

    // The Libraries heading exists. Now check for an item linking to Shared Documents.
    // If a node for Shared Documents exists, Meeting Notes will go after it.
    SPList sharedDocs = web.Lists.TryGetList("Shared Documents");
    SPNavigationNode sharedDocsNode = null;
    if (sharedDocs != null)
        sharedDocsNode = librariesHeading
            .Children
            .Cast<SPNavigationNode>()
            .FirstOrDefault(n => n.Url == sharedDocs.DefaultViewUrl);

    // A node for Shared Documents does not exist. Make Meeting Notes the first item.
    if (sharedDocsNode == null)
    {
        librariesHeading.Children.AddAsFirst(meetingNotesNode);
        return;
    }

    // A node for Shared Documents exists. Place Meeting Notes after it.
    librariesHeading.Children.Add(meetingNotesNode, sharedDocsNode);

    web.Dispose();
}
Public Overrides Sub FeatureActivated(ByVal properties As SPFeatureReceiverProperties)

    'Get the website where the feature is activated.
    Dim web As SPWeb = TryCast(properties.Feature.Parent, SPWeb)
    If web Is Nothing Then
        Return
    End If

    ' Get the Meeting Notes document library.
    Dim meetingNotes As SPList = web.Lists.TryGetList("Meeting Notes")
    If meetingNotes Is Nothing Then

        ' Create the library if it does not exist.
        Dim listId As Guid = web.Lists.Add("Meeting Notes", "An archive for meeting notes.", SPListTemplateType.DocumentLibrary)
        meetingNotes = web.Lists.GetList(listId, False)

    End If

    ' Check for an existing Quick Launch node for Meeting Notes.
    Dim meetingNotesNode As SPNavigationNode = web.Navigation.GetNodeByUrl(meetingNotes.DefaultViewUrl)

    ' If a Meeting Notes node exists on Quick Launch, nothing more to do.
    If meetingNotesNode IsNot Nothing Then
        Return
    End If

    ' Still here, so create a node for Meeting Notes.
    meetingNotesNode = New SPNavigationNode(meetingNotes.Title, meetingNotes.DefaultViewUrl)

    ' Get the Libraries heading.
    Dim librariesHeading As SPNavigationNode = web.Navigation.GetNodeById(CInt(SPQuickLaunchHeading.Documents))

    ' If the Libraries heading does not exist or it exists but has no items below it,
    ' then Meeting Notes will be the first item.
    If librariesHeading Is Nothing OrElse librariesHeading.Children.Count = 0 Then
        web.Navigation.AddToQuickLaunch(meetingNotesNode, SPQuickLaunchHeading.Documents)
        Return
    End If

    ' The Libraries heading exists. Now check for an item linking to Shared Documents.
    ' If a node for Shared Documents exists, Meeting Notes will go after it.
    Dim sharedDocs As SPList = web.Lists.TryGetList("Shared Documents")
    Dim sharedDocsNode As SPNavigationNode = Nothing
    If sharedDocs IsNot Nothing Then
        sharedDocsNode = librariesHeading.Children.Cast(Of SPNavigationNode)().FirstOrDefault( _
            Function(n) n.Url = sharedDocs.DefaultViewUrl)
    End If

    ' A node for Shared Documents does not exist. Make Meeting Notes the first item.
    If sharedDocsNode Is Nothing Then
        librariesHeading.Children.AddAsFirst(meetingNotesNode)
        Return
    End If

    ' A node for Shared Documents exists. Place Meeting Notes after it.
    librariesHeading.Children.Add(meetingNotesNode, sharedDocsNode)

    web.Dispose()
End Sub

Ajout d’un titre personnalisé

Les titres du menu Lancement rapide sont des objets SPNavigationNode. La collection de tous les titres est retournée par la propriété QuickLaunch de l’objet Navigation du site Web. Vous pouvez ajouter un titre personnalisé en construisant un nouveau nœud de navigation et en l’ajoutant à la collection par l’appel d’une méthode de la classe SPNavigationNodeCollection, telle que la méthode AddAsLast.

Pour ajouter un titre personnalisé au Lancement rapide

  1. Construisez un objet SPNavigationNode pour représenter le nœud de navigation du nouveau titre.

    string headingTitle = "Resources";
    string headingUrl = web.Navigation.Home.Url;
    SPNavigationNode heading = new SPNavigationNode(headingTitle, headingUrl);
    
    Dim headingTitle As String = "Resources"
    Dim headingUrl As String = web.Navigation.Home.Url
    Dim heading As SPNavigationNode = New SPNavigationNode(headingTitle, headingUrl)
    
  2. Obtenez la collection de nœuds de navigation retournée par la propriété QuickLaunch de l’objet lui-même retourné par la propriété SPWeb.Navigation du site Web.

    SPNavigationNodeCollection quickLaunch = web.Navigation.QuickLaunch;
    
    Dim quickLaunch As SPNavigationNodeCollection = web.Navigation.QuickLaunch
    
  3. Ajoutez le nouveau nœud de titre à la collection en appelant une méthode de la classe SPNavigationNodeCollection.

    heading = quickLaunch.AddAsLast(heading);
    
    heading = quickLaunch.AddAsLast(heading)
    

    L’exemple appelle la méthode AddAsLast. Deux autres méthodes sont disponibles : la méthode AddAsFirst et la méthode Add.

  4. (Facultatif) Ajoutez les éléments sous le nouveau titre en obtenant la collection retournée par la propriété Children du nouveau titre, puis en appelant à nouveau une méthode de la classe SPNavigationNodeCollection.

    SPNavigationNode item = new SPNavigationNode(itemTitle, itemUrl);
    item = heading.Children.AddAsLast(item);
    
    Dim item As SPNavigationNode = New SPNavigationNode(itemTitle, itemUrl)
    item = heading.Children.AddAsLast(item)
    

Exemple

L’exemple suivant est une application console qui crée un menu Lancement rapide pour Ressources et ajoute un élément sous le nouveau titre.

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"))
            {
                using (SPWeb web = site.OpenWeb())
                {
                    string headingTitle = "Resources";
                    string headingUrl = web.Navigation.Home.Url;
                    string itemTitle = "SharePoint Developer Center";
                    string itemUrl = "https://msdn.microsoft.com/sharepoint";

                    // Get the Quick Launch headings.
                    SPNavigationNodeCollection ql = web.Navigation.QuickLaunch;

                    // If a Resources heading exists, get it.
                    SPNavigationNode heading = ql
                        .Cast<SPNavigationNode>()
                        .FirstOrDefault(n => n.Title == headingTitle);

                    // If the Resources heading does not exist, create it.
                    if (heading == null)
                    {
                        heading = new SPNavigationNode(headingTitle, headingUrl);
                        heading = ql.AddAsLast(heading);
                    }

                    // If the heading has a SharePoint Dev Center item, get it.
                    SPNavigationNode item = heading
                        .Children
                        .Cast<SPNavigationNode>()
                        .FirstOrDefault(n => n.Url == itemUrl);

                    // If the item does not exist, create it.
                    if (item == null)
                    {
                        item = new SPNavigationNode(itemTitle, itemUrl, true);
                        item = heading.Children.AddAsLast(item);
                    }
                 }
            }
            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()

                Dim headingTitle As String = "Resources"
                Dim headingUrl As String = web.Navigation.Home.Url
                Dim itemTitle As String = "SharePoint Developer Center"
                Dim itemUrl As String = "https://msdn.microsoft.com/sharepoint"

                ' Get the Quick Launch headings.
                Dim ql As SPNavigationNodeCollection = web.Navigation.QuickLaunch

                ' If a Resources heading exists, get it.
                Dim heading As SPNavigationNode = ql.Cast(Of SPNavigationNode)().FirstOrDefault( _
                    Function(n) n.Title = headingTitle)

                ' If the Resources heading does not exist, create it.
                If heading Is Nothing Then
                    heading = New SPNavigationNode(headingTitle, headingUrl)
                    heading = ql.AddAsLast(heading)
                End If

                ' If the heading has a SharePoint Dev Center item, get it.
                Dim item As SPNavigationNode = heading.Children.Cast(Of SPNavigationNode)().FirstOrDefault( _
                    Function(n) n.Url = itemUrl)

                ' If the item does not exist, create it.
                If item Is Nothing Then
                    item = New SPNavigationNode(itemTitle, itemUrl, True)
                    item = heading.Children.AddAsLast(item)
                End If

            End Using
        End Using

        Console.Write(vbCrLf & "Press ENTER to continue....")
        Console.Read()
    End Sub

End Module

Voir aussi

Tâches

Comment : afficher ou masquer le menu Lancement rapide

Procédure : personnaliser l'affichage du menu de lancement rapide

Procédure : ajouter un sous-site à la barre de liens supérieure ou au menu Lancement rapide