Navegação gerenciada no SharePoint

Tópico de visão geral conceitual

Saiba mais sobre a funcionalidade de navegação gerida condicionada por taxonomia no SharePoint.

Observação

A navegação gerida é uma funcionalidade dos sites de publicação Clássicos. Não é suportado na experiência Moderna do 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, a funcionalidade de navegação gerida permite-lhe estruturar a navegação no site que é orientada por metadados geridos e criar URLs compatíveis com SEO derivados da estrutura de navegação gerida. 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 gerida estão incorporadas na taxonomia e nas bibliotecas de publicação 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 de servidor .NET, o espaço de nomes Microsoft.SharePoint.Publishing.Navigation contém objetos de termos, conjuntos de termos e outros objetos de classe que espelho classe Term e TermSet no espaço de nomes de navegação Microsoft.SharePoint.Taxonomy, fornecendo métodos e propriedades concebidos 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

Quando navega pela primeira vez para um site do SharePoint, poderá reparar que o formato do URL foi alterado. Em vez de um endereço com uma /Pages/default.aspx extensão, o URL da página termina apenas /com . A navegação gerida fornece um esquema para URLs amigáveis consistentes em páginas de sites, categorias e itens.

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 pode utilizar para personalizar termos, conjuntos de termos e outros elementos de metadados no arquivo de termos para utilização em cenários de navegação do site. Estas APIs estão disponíveis nos modelos de programação .NET client, .NET server e JavaScript.

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

Pode utilizar as classes e métodos de taxonomia do servidor .NET nos espaços de nomes Microsoft.SharePoint.Taxonomy e Microsoft.SharePoint.Publishing.Navigation para criar um novo conjunto de nomes 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