Partager via


Procédure : partager la barre de liens supérieure entre les sites

Dernière modification : mardi 5 octobre 2010

S’applique à : SharePoint Foundation 2010

Dans Microsoft SharePoint Foundation, vous pouvez offrir à l’utilisateur une expérience de navigation inter-sites cohérente en spécifiant l’héritage du site parent, ce qui est particulièrement important lorsque vous devez fournir la navigation entre des sous-sites homologues. Dans ce cas, chaque sous-site créé sous le site partage une barre de liens supérieure, et est lui-même représenté parmi les liens. Sans héritage de navigation, chaque site aurait sa propre navigation. Vous devez implémenter la navigation partagée via la barre de liens supérieure du site parent.

Le partage d’une barre de liens supérieure entre sites simplifie l’expérience de l’utilisateur, car elle lui permet de naviguer plus facilement d’un site à l’autre. Bien que la navigation partagée simplifie la navigation, elle ne doit pas remplacer une planification rigoureuse. En effet, le contrôle de navigation partagée représente une structure de site « plate » (non hiérarchique) et risque d’induire l’utilisateur en erreur concernant la hiérarchie réelle des sites créés au sein d’une collection de sites.

Utilisation de l’interface utilisateur pour partager la barre de liens supérieure

L’implémentation d’un contrôle de navigation partagée entre sites au sein d’une collection de sites s’effectue via l’interface utilisateur. Vous pouvez spécifier de partager la barre de liens supérieure au cours de la création de chaque site ou après la création de chaque site.

Pour ajouter la barre de liens supérieure du site parent à un sous-site tout en créant ce sous-site

  1. Sur la page Créer, cliquez sur Autres options.

  2. Dans la section Héritage de navigation, après Utiliser la barre de liens supérieure du site parent ? cliquez sur Oui.

  3. Cliquez sur Créer.

Pour ajouter la barre de liens supérieure du site parent à un sous-site existant

  1. Naviguez jusqu’au sous-site.

  2. Cliquez sur Actions du site, puis sur Paramètres du site.

  3. Dans la page Paramètres du site, dans la section Aspect, cliquez sur Barre de liens supérieure.

  4. Dans la page Barre de liens supérieure, cliquez sur Utiliser les liens du site parent, puis cliquez sur OK dans la boîte de message qui s’affiche.

Utilisation du modèle objet pour partager la barre de liens supérieure

Les opérations de navigation dans un site Web sont contrôlées par les paramètres stockés dans l’objet SPNavigation renvoyé par la propriété Navigation de l’objet SPWeb qui représente le site.

L’utilisation par un site Web de la barre de liens supérieure du site parent dépend de la valeur de la propriété UseShared de l’objet SPNavigation. Si UseShared renvoie la valeur true, le sous-site hérite de la barre de liens supérieure de son site parent ; dans le cas contraire, le sous-site possède sa propre barre de liens, qui lui est unique.

Notes

Le site Web racine d’une collection de sites ne peut pas hériter d’une barre de liens supérieure, car il ne possède pas de site Web parent à partir duquel il peut hériter. Pour cette raison, SPWeb.Navigation.UseShared renvoie false chaque fois que SPWeb.IsRootWeb renvoie true. Une exception est levée si vous définissez la propriété UseShared du site Web racine avec la valeur true.

Lorsque vous créez dans le code un site Web, il n’est pas possible de créer le site et d’ajouter au site la barre de liens supérieure du site parent dans le même appel. Vous devez d’abord créer le site Web, puis ajouter la barre de liens supérieure au site parent. Pour obtenir un exemple, voir la méthode SPWebCollection.Add.

Pour ajouter la barre de liens supérieure du site parent à un sous-site

  1. Obtenez une référence à l’objet SPWeb qui représente le sous-site.

    SPWeb child = site.OpenWeb("parent/child");
    
    Dim child As SPWeb = site.OpenWeb("parent/child")
    
  2. Vérifiez que SPWeb.IsRootWeb renvoie false.

    if (!child.IsRootWeb)
    
    If Not child.IsRootWeb Then
    
  3. Obtenez la propriété Navigation du sous-site et, sur l’objet renvoyé, définissez la propriété UseShared avec la valeur true.

    child.Navigation.UseShared = true;
    
    child.Navigation.UseShared = True
    

Exemple

L’exemple suivant est une application console qui ajoute à un sous-site la barre de liens supérieure d’un site Web parent. L’application modifie aussi la barre de liens supérieure du site Web parent en ajoutant un lien au sous-site. La propriété TopNavigationBar d’un objet SPNavigation renvoie un objet SPNavigationNodeCollection. L’ajout d’un nœud à la barre de liens supérieure revient simplement à créer un objet SPNavigationNode et à l’ajouter à la collection SPNavigationNodeCollection qui représente la barre de liens supérieure.

Notez qu’avant d’ajouter un lien, l’application contrôle que le parent n’hérite pas des liens. Au cas où le parent hériterait bel et bien de liens, sa SPNavigationNodeCollection a la valeur null et il n’est pas possible d’ajouter un lien. Si la collection n’a pas la valeur null, l’application vérifie s’il existe déjà un lien à l’enfant sur la barre de liens supérieure du parent. Si le parent ne possède pas de lien à l’enfant, un lien est ajouté.

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 child = site.OpenWeb("parent/child"))
                {
                    // Verify that this is not the root of a site collection.
                    if (!child.IsRootWeb)
                    {
                        // Use links from parent on the child's top link bar.
                        child.Navigation.UseShared = true;

                        // If the parent web's top link bar is not inherited,
                        // add a link to the child on the parent's top link bar.
                        if (!child.ParentWeb.Navigation.UseShared)
                        {
                            // Get the parent's top link bar.
                            SPNavigationNodeCollection topnav = child.ParentWeb.Navigation.TopNavigationBar;

                            // Query for an existing link to the child.
                            SPNavigationNode node = topnav
                                .Cast<SPNavigationNode>()
                                .FirstOrDefault(n => n.Url.Equals(child.ServerRelativeUrl));

                            // No link, so add one.
                            if (node == null)
                            {
                                // Truncate long a title.
                                string linkTitle = child.Title;
                                if (linkTitle.Length > 15)
                                    linkTitle = linkTitle.Substring(0, 12) + "...";

                                // Create the node.
                                node = new SPNavigationNode(linkTitle, child.ServerRelativeUrl);

                                // Add it.
                                node = topnav.AddAsLast(node);
                            }
                        }
                    }
                }
            }
            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 child As SPWeb = site.OpenWeb("parent/child")

                ' Verify that this is not the root of a site collection.
                If Not child.IsRootWeb Then

                    ' Use links from parent on the child's top link bar.
                    child.Navigation.UseShared = True

                    ' If the parent web's top link bar is not inherited,
                    ' add a link to the child on the parent's top link bar.
                    If Not child.ParentWeb.Navigation.UseShared Then

                        ' Get the parent's top link bar.
                        Dim topnav As SPNavigationNodeCollection = child.ParentWeb.Navigation.TopNavigationBar

                        ' Query for an existing link to the child.
                        Dim node As SPNavigationNode = topnav.Cast(Of SPNavigationNode)().FirstOrDefault(Function(n) n.Url.Equals(child.ServerRelativeUrl))

                        ' No link, so add one.
                        If node Is Nothing Then
                            ' Truncate long a title.
                            Dim linkTitle As String = child.Title
                            If linkTitle.Length > 15 Then
                                linkTitle = linkTitle.Substring(0, 12) + "..."
                            End If

                            ' Create the node.
                            node = New SPNavigationNode(linkTitle, child.ServerRelativeUrl)

                            ' Add it.
                            node = topnav.AddAsLast(node)
                        End If

                    End If

                End If

            End Using

        End Using

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

End Module

Voir aussi

Tâches

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

Concepts

Contrôles de navigation