Partager via


Personnaliser les fournisseurs et les contrôles de navigation

Dernière modification : dimanche 4 avril 2010

S’applique à : SharePoint Server 2010

Pour personnaliser la navigation, vous devez utiliser la navigation de site ASP.NET, car elle offre une solution standard, cohérente et facilement gérée. Pour plus d’informations, voir le Centre pour développeurs Microsoft ASP.NET sur MSDN.

Personnalisation des contrôles d'affichage Web (Menu, TreeView et SiteMapPath)

Vous pouvez personnaliser l’apparence des contrôles d’affichage standard à l’aide de feuilles de style en cascade (CSS). Vous pouvez également écrire vos propres contrôles ASP.NET et les utiliser dans la navigation . Pour plus d’informations, voir la documentation de classe System.Web.UI.WebControls.Menu.

Notes

SharePoint Server 2010 fournit également des composants de navigation par défaut que vous pouvez personnaliser, tels que le composant WebPart Contenu par requête et le composant WebPart Table des matières. Vous pouvez configurer ces deux contrôles pour présenter une sélection personnalisée de liens.

Les contrôles de navigation System.Web.UI.WebControls.TreeView et System.Web.UI.WebControls.Menu sont liés à des sources de données ASP.NET, ce qui fournit une couche abstraite entre les contrôles de navigation Web et le fournisseur de navigation sous-jacent.

Implémentation de fournisseurs de plan de site

Pour implémenter votre propre fournisseur de plan de site, vous pouvez dériver une classe de fournisseur personnalisée à partir de n’importe quel fournisseur de plan de site par défaut. SharePoint Server 2010 comprend plusieurs fournisseurs par défaut. Vous pouvez également dériver une classe de fournisseur personnalisée de la classe SiteMapProvider dans l’espace de noms System.Web. Toutefois, la dérivation des fournisseurs de plan de site SharePoint Server 2010 présente plusieurs avantages supplémentaires, notamment la mise en cache des nœuds de navigation et le découpage de sécurité. Par conséquent, vous devez utiliser l’infrastructure de mise en cache et de découpage de sécurité de SharePoint Server 2010 plutôt que d’écrire vos propres mécanismes de mise en cache et de découpage de sécurité dans un fournisseur personnalisé en dérivant des fournisseurs par défaut.

Bien que les classes du fournisseur de plan de site comportent environ vingt méthodes abstraites ou virtuelles, seul un petit nombre d’entre elles doivent être substituées et implémentées dans un fournisseur de plan de site personnalisé.

L’exemple de code suivant dérive de la classe PortalSiteMapProvider et montre comment ajouter des éléments au fournisseur de plan de site.

public class CustomNavProviderWithList : PortalSiteMapProvider
    {
        public override SiteMapNodeCollection GetChildNodes(System.Web.SiteMapNode node)
        {
            PortalSiteMapNode portalNode = node as PortalSiteMapNode;
            if (portalNode != null)
            {
                if (portalNode.Type == NodeTypes.Area)
                {
                 
                    SiteMapNodeCollection nodeColl = base.GetChildNodes(portalNode);
                    using (SPSite currentSite = new SPSite(portalNode.Url))
                     {
                       SPWeb currentWeb = currentSite.OpenWeb();
                       SPListCollection lists = currentWeb.Lists;
                       foreach (SPList list in lists)
                       {
                           string listUrl = list.DefaultViewUrl;
                           PortalSiteMapNode childNode = new PortalSiteMapNode(webNode, listUrl, NodeTypes.custom, list.Title, listUrl, null);
                           nodeColl.Add(childNode);
                    }
                  }
                  return nodeColl;
                }
                else
                {
                    return base.GetChildNodes(portalNode);
                }
            }
            else
            {
                return new SiteMapNodeCollection();
            }
        }
    }
Public Class CustomNavProviderWithList
    Inherits PortalSiteMapProvider
        Public Overrides Function GetChildNodes(ByVal node As System.Web.SiteMapNode) As SiteMapNodeCollection
            Dim portalNode As PortalSiteMapNode = TryCast(node, PortalSiteMapNode)
            If portalNode IsNot Nothing Then
                If portalNode.Type = NodeTypes.Area Then

                    Dim nodeColl As SiteMapNodeCollection = MyBase.GetChildNodes(portalNode)
                    Using currentSite As New SPSite(portalNode.Url)
                       Dim currentWeb As SPWeb = currentSite.OpenWeb()
                       Dim lists As SPListCollection = currentWeb.Lists
                       For Each list As SPList In lists
                           Dim listUrl As String = list.DefaultViewUrl
                           Dim childNode As New PortalSiteMapNode(webNode, listUrl, NodeTypes.custom, list.Title, listUrl, Nothing)
                           nodeColl.Add(childNode)
                       Next list
                    End Using
                  Return nodeColl
                Else
                    Return MyBase.GetChildNodes(portalNode)
                End If
            Else
                Return New SiteMapNodeCollection()
            End If
        End Function
End Class

Voir aussi

Référence

Microsoft.SharePoint.Publishing.Navigation

Microsoft.SharePoint.Navigation

Concepts

Procédure : Personnalisation de la navigation

Utiliser les menus et les objets de navigation