Navegação gerenciada no SharePoint

Tópico de visão geral conceitual

Saiba mais sobre o recurso de navegação gerenciada controlado por taxonomia no SharePoint.

Apresentando a navegação gerenciada

Uma navegação bem projetada informa os usuários do seu site muito sobre os negócios, produtos e serviços que oferece o site. Atualizando a taxonomia por trás do painel de navegação, empresas podem unidade e acompanhe alteração sem recriar sua navegação de site no processo. No SharePoint, o recurso de navegação gerenciada permite projetar a navegação do site que é impulsionada por metadados gerenciados e criar URLs amigáveis ao SEO derivadas da estrutura de navegação gerenciada. Navegação gerenciada oferece uma alternativa para o recurso de navegação tradicional do SharePoint — estruturados navegação — que baseia-se na estrutura do SharePoint. Porque a navegação gerenciada é orientada por taxonomia, você pode usá-lo à navegação do site de design em torno de conceitos importantes de negócios sem alterar a estrutura dos sites ou componentes do site.

Funciona como gerenciada de navegação

Navegação gerenciada fornece uma estrutura para páginas geradas dinamicamente e fornece uma URL amigável para a SEO associada. Cada página gerada é representada na hierarquia de navegação. Em vez de exigir que as páginas separadas a ser criado para cada categoria na taxonomia, o framework oferece um mecanismo de modelagem e herança que cria as páginas de aterrissagem para cada link de navegação. Você pode usar o recurso de páginas de tópico para personalizar a experiência de página de aterrissagem.

As APIs de navegação gerenciada são incorporadas à taxonomia e à publicação de bibliotecas no SharePoint. Componentes, como conjuntos de termos e o repositório de termos são usados para habilitar orientado a taxonomia navegação do seu site de metadados gerenciados de. Na biblioteca de classes do servidor .NET, o namespace Microsoft.SharePoint.Publishing.Navigation contém termos, conjunto de termos e outros objetos de classe que espelham a classe Term e a classe TermSet no namespace de navegação Microsoft.SharePoint.Taxonomy , fornecendo métodos e propriedades especificamente projetadas para associar esses itens de metadados a elementos de navegação. Outras classes, como TaxonomySiteMapNode , permitem que você fornecer metadados com vários elementos de navegação do site, como nós de mapa do site e outras partes de navegação do seu site. Outras classes de habilitar o cache e contexto de navegação gerenciada.

Você pode exibir os links de navegação orientada a taxonomia no painel de navegação Global. Painel de navegação Global é uma camada de navegação com um ou mais camadas do sempre presentes, que frequentemente aparece na parte superior de um site e exibe as categorias de conteúdo de nível superior. Você também pode exibir esses links no atual navegação controle que geralmente aparece no lado esquerdo de uma página. O controle de navegação atual representa o próximo nível da hierarquia para a categoria escolhida na navegação Global ou um conjunto de links que pertencem a essa categoria.

URLs amigáveis e o provedor de navegação gerenciada

Ao navegar até um site do SharePoint pela primeira vez, você poderá notar que o formato de URL foi alterado. Em vez de um endereço com uma /Pages/default.aspx extensão, a URL da página termina com apenas /. Navegação gerenciada fornece um esquema de URLs amigáveis que é consistente em sites, categoria e páginas de item.

O provedor de navegação gerenciada ativa essa experiência. Quando você navega até a raiz de qualquer site que usa o provedor de navegação gerenciada, a página de boas-vindas do Site configurando controles a página que carregou e exibidos no navegador, mas a URL (e que aparece nos resultados da pesquisa) será reconfigurada para esse formato mais amigável.

Qualquer página, incluindo a página de boas-vindas do seu site, pode ter um URL amigável. Dependendo de como configurar seu site, a maioria das páginas automaticamente Obtenha um URL amigável. URLs amigáveis podem ser localizadas.

APIs de navegação gerenciada

A API de taxonomia fornece vários novos métodos e propriedades no SharePoint que você pode usar para personalizar termos, conjuntos de termos e outros elementos de metadados no armazenamento de termos para uso em cenários de navegação do site. Essas APIs estão disponíveis na .NET client, .NET server, Silverlight e JavaScript modelos de programação.

Exemplo de código: Personalizando navegação com o modelo (CSOM) do objeto .NET client API gerenciada

Quando você usa o modelo de objeto do cliente .NET para taxonomia, você pode criar um novo termo de navegação definido se armazenar um termo existe para o conjunto de sites atual, ou converter um conjunto de termos existente em uma que suporta a navegação gerenciada.

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();
    }
}

Exemplo de código: Personalizando navegação com o modelo de objeto do .NET server API gerenciada

Você pode usar as classes e métodos de taxonomia do servidor .NET nos namespaces Microsoft.SharePoint.Taxonomy e Microsoft.SharePoint.Publishing.Navigation para criar um novo conjunto de termos de navegação.

///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();
    }
}

Confira também