Share via


Navigation gérée dans SharePoint

Rubrique de présentation conceptuelle

Découvrez la fonctionnalité de navigation managée pilotée par la taxonomie dans SharePoint.

Présentation de la navigation gérée

Une navigation bien conçue informe les utilisateurs de votre site beaucoup le business, produits et services qui offre un site Web. En mettant à jour la taxonomie derrière la barre de navigation, les entreprises peuvent du lecteur et faire face à modifier, sans avoir à recréer la navigation de leur site dans le processus. Dans SharePoint, la fonctionnalité de navigation managée vous permet de concevoir une navigation de site pilotée par des métadonnées gérées et de créer des URL conviviales SEO dérivées de la structure de navigation managée. Navigation gérée propose une alternative à la fonctionnalité de navigation de SharePoint traditionnelle — la navigation structurée — qui repose sur la structure de SharePoint. Car la navigation gérée est pilotée par la taxonomie, vous pouvez l'utiliser pour concevoir la navigation de site autour des concepts d'entreprise importants sans modifier la structure de vos sites ou des composants d'un site.

Fonctionnement de la navigation gérée

Navigation gérée fournit une infrastructure pour les pages générées dynamiquement et fournit une URL compatible SEO associée. Chaque page générée est représenté dans la hiérarchie de navigation. Au lieu de demander des pages distinctes pour être créé pour chaque catégorie de la taxonomie, l'infrastructure fournit un mécanisme de création de modèles et l'héritage des autorisations qui crée les pages d'arrivée pour chaque lien de navigation. Vous pouvez utiliser la fonctionnalité de pages de rubrique pour personnaliser l'expérience de la page d'accueil.

Les API de navigation managée sont intégrées aux bibliothèques de taxonomie et de publication dans SharePoint. Des métadonnées gérées composants, tels que les ensembles de termes et le magasin de termes sont utilisés pour activer axée sur la taxonomie navigation de votre site. Dans la bibliothèque de classes de serveur .NET, l’espace de noms Microsoft.SharePoint.Publishing.Navigation contient des termes, des ensembles de termes et d’autres objets de classe qui reflètent la classe Term et la classe TermSet dans l’espace de noms de navigation Microsoft.SharePoint.Taxonomy , fournissant des méthodes et des propriétés spécifiquement conçues pour associer ces éléments de métadonnées aux éléments de navigation. Autres classes, comme TaxonomySiteMapNode , permettent de fournir des métadonnées avec différents éléments de navigation de site, telles que les nœuds de plan de site et d'autres composants de navigation de votre site. Autres classes activer la mise en cache et le contexte pour la navigation gérée.

Vous pouvez afficher les liens de navigation axée sur la taxonomie dans le volet de Navigation globale. La Navigation globale est une couche de navigation avec une ou plusieurs couches de toujours présent, qui s'affiche en haut d'un site et affiche les catégories de contenu de niveau supérieur de souvent. Vous pouvez également afficher ces liens dans le contrôle de navigation actuelle qui apparaît souvent sur le côté gauche d'une page. Le contrôle de navigation actuelle représente le niveau suivant de la hiérarchie pour la catégorie sélectionnée dans la Navigation globale, ou un ensemble de liens qui appartiennent à cette catégorie.

URL conviviales et le fournisseur de navigation gérée

Lorsque vous accédez à un site SharePoint pour la première fois, vous remarquerez peut-être que le format de l’URL a changé. Au lieu d’une adresse avec une /Pages/default.aspx extension, l’URL de la page se termine par uniquement /. Navigation gérée fournit un modèle d'URL conviviales qui est cohérente entre les sites, la catégorie et pages d'élément.

Le fournisseur de navigation gérée permet cette expérience. Lorsque vous accédez à la racine d'un site qui utilise le fournisseur de navigation gérée, la Page d'accueil Site définition des contrôles de la page qui a chargé et affichées dans le navigateur, mais l'URL que vous voyez (et qui apparaît dans les résultats de recherche) est réécrit dans ce format convivial.

N'importe quelle page, notamment la Page d'accueil de votre site, peut avoir une URL conviviale. Selon la configuration de votre site, la plupart des pages obtiennent automatiquement une URL conviviale. URL conviviales peuvent être localisées.

API de Navigation gérée

L’API de taxonomie fournit plusieurs nouvelles méthodes et propriétés dans SharePoint que vous pouvez utiliser pour personnaliser des termes, des ensembles de termes et d’autres éléments de métadonnées dans le magasin de termes à utiliser dans des scénarios de navigation de site. Ces API est disponibles dans le .NET client .NET server, Silverlight et JavaScript modèles de programmation.

L'exemple de code : Personnalisation gérée navigation avec l'API de modèle (CSOM) d'objet client .NET

Lorsque vous utilisez le modèle d'objet client .NET pour la taxonomie, vous pouvez créer un nouveau terme de navigation ensemble si un terme de stocker existe pour la collection de sites actuelle ou convertir un ensemble de termes existants en un seul que prend en charge la navigation gérée.

public class NavigationTermSetTests
{
    public void CreateNavigationTermSet()
    {
        ClientContext clientContext = new ClientContext(TestConfig.ServerUrl);

        TaxonomySession taxonomySession = TaxonomySession.GetTaxonomySession(clientContext);
        taxonomySession.UpdateCache();

        clientContext.Load(taxonomySession, ts => ts.TermStores);
        clientContext.ExecuteQuery();

        if (taxonomySession.TermStores.Count == 0)
            throw new InvalidOperationException("The Taxonomy Service is offline or missing");

        TermStore termStore = taxonomySession.TermStores[0];
        clientContext.Load(termStore,
        ts => ts.Name,
        ts => ts.WorkingLanguage);

        // Does the TermSet object already exist?
        TermSet existingTermSet;

        // Handles an error that occurs if the return value is null.
        ExceptionHandlingScope exceptionScope = new ExceptionHandlingScope(clientContext);
        using (exceptionScope.StartScope())
        {
            using (exceptionScope.StartTry())
            {
                existingTermSet = termStore.GetTermSet(TestConfig.NavTermSetId);
            }
            using (exceptionScope.StartCatch())
            {
            }
        }
        clientContext.ExecuteQuery();

        if (!existingTermSet.ServerObjectIsNull.Value)
        {
            Log("CreateNavigationTermSet(): Deleting old TermSet");
            existingTermSet.DeleteObject();
            termStore.CommitAll();
            clientContext.ExecuteQuery();
        }

        Log("CreateNavigationTermSet(): Creating new TermSet");

        // Creates a new TermSet object.
        TermGroup siteCollectionGroup = termStore.GetSiteCollectionGroup(clientContext.Site,
            createIfMissing: true);
        TermSet termSet = siteCollectionGroup.CreateTermSet("Navigation Demo", TestConfig.NavTermSetId,
            termStore.WorkingLanguage);

        termStore.CommitAll();
        clientContext.ExecuteQuery();

        NavigationTermSet navTermSet = NavigationTermSet.GetAsResolvedByWeb(clientContext,
            termSet, clientContext.Web, "GlobalNavigationTaxonomyProvider");

        navTermSet.IsNavigationTermSet = true;
        navTermSet.TargetUrlForChildTerms.Value = "~site/Pages/Topics/Topic.aspx";

        termStore.CommitAll();
        clientContext.ExecuteQuery();

        NavigationTerm term1 = navTermSet.CreateTerm("Term 1", NavigationLinkType.SimpleLink, Guid.NewGuid());
        term1.SimpleLinkUrl = "http://www.bing.com/";

        Guid term2Guid = new Guid("87FAA433-4E3E-4500-AA5B-E04330B12ACD");
        NavigationTerm term2 = navTermSet.CreateTerm("Term 2", NavigationLinkType.FriendlyUrl,
            term2Guid);

        NavigationTerm childTerm = term2.CreateTerm("Term 2 child", NavigationLinkType.FriendlyUrl, Guid.NewGuid());

        childTerm.GetTaxonomyTerm().TermStore.CommitAll();
        clientContext.ExecuteQuery();
    }
}

L'exemple de code : Personnalisation gérée navigation avec l'API de modèle objet serveur .NET

Vous pouvez utiliser les classes et méthodes de taxonomie de serveur .NET dans les espaces de noms Microsoft.SharePoint.Taxonomy et Microsoft.SharePoint.Publishing.Navigation pour créer un ensemble de termes de navigation.

///Create a navigation term set.
using (SPSite site = new SPSite(TestConfig.ServerUrl))
{
    using (SPWeb web = site.OpenWeb())
    {
        TaxonomySession taxonomySession = new TaxonomySession(site, updateCache: true);

        /// Use the first TermStore object in the list.
        if (taxonomySession.TermStores.Count == 0)
            throw new InvalidOperationException("The Taxonomy Service is offline or missing");

        TermStore termStore = taxonomySession.TermStores[0];

        /// Does the TermSet object already exist?
        TermSet existingTermSet = termStore.GetTermSet(TestConfig.NavTermSetId);
        if (existingTermSet != null)
        {
            Log("CreateNavigationTermSet(): Deleting old TermSet");
            existingTermSet.Delete();
            termStore.CommitAll();
        }

        Log("CreateNavigationTermSet(): Creating new TermSet");

        /// Create a new TermSet object.
        Group siteCollectionGroup = termStore.GetSiteCollectionGroup(site);
        TermSet termSet = siteCollectionGroup.CreateTermSet("Navigation Demo", TestConfig.NavTermSetId);

        NavigationTermSet navTermSet = NavigationTermSet.GetAsResolvedByWeb(termSet, web,
            StandardNavigationProviderNames.GlobalNavigationTaxonomyProvider);

        navTermSet.IsNavigationTermSet = true;
        navTermSet.TargetUrlForChildTerms.Value = "~site/Pages/Topics/Topic.aspx";

        NavigationTerm term1 = navTermSet.CreateTerm("Term 1", NavigationLinkType.SimpleLink);
        term1.SimpleLinkUrl = "http://www.bing.com/";

        Guid term2Guid = new Guid("87FAA433-4E3E-4500-AA5B-E04330B12ACD");
        NavigationTerm term2 = navTermSet.CreateTerm("Term 2", NavigationLinkType.FriendlyUrl,
            term2Guid);

        /// Verify that the NavigationTermSetView is being applied correctly.
        Assert.AreEqual(web.ServerRelativeUrl + "/term-2", term2.GetResolvedDisplayUrl(null).ToString());

        string expectedTargetUrl = web.ServerRelativeUrl
            + "/Pages/Topics/Topic.aspx?TermStoreId=" + termStore.Id.ToString()
            + "&TermSetId=" + TestConfig.NavTermSetId.ToString()
            + "&TermId=" + term2Guid.ToString();
        Assert.AreEqual(expectedTargetUrl, term2.GetResolvedTargetUrl(null, null).ToString());

        NavigationTerm childTerm = term2.CreateTerm("Term 2 child", NavigationLinkType.FriendlyUrl);
        Assert.AreEqual(web.ServerRelativeUrl + "/term-2/term-2-child", childTerm.GetResolvedDisplayUrl(null).ToString());

        /// Commit changes.
        childTerm.GetTaxonomyTerm().TermStore.CommitAll();
    }
}

Voir aussi