Navegación administrada en SharePoint
Obtenga información sobre la característica de navegación administrada controlada por taxonomía en SharePoint.
Presentación de la navegación administrada
Una navegación bien diseñada dice mucho a los usuarios de la empresa y los productos y servicios que el sitio web ofrece. Si actualizan la taxonomía que hay tras la navegación, las empresas pueden controlar los cambios y estar al tanto de ellos sin que sea necesario volver a crear la navegación del sitio en el proceso. En SharePoint, la característica de navegación administrada le permite diseñar la navegación del sitio controlada por metadatos administrados y crear direcciones URL compatibles con SEO que se derivan de la estructura de navegación administrada. La navegación administrada constituye una alternativa a la característica de navegación tradicional de SharePoint (navegación estructurada), basada en la estructura de SharePoint. Dado que la navegación administrada se controla mediante la taxonomía, se puede usar para diseñar la navegación del sitio en torno a conceptos empresariales importantes sin cambiar la estructura de los sitios o los componentes del sitio.
Funcionamiento de la navegación administrada
La navegación administrada ofrece un marco para las páginas generadas dinámicamente y proporciona una dirección URL asociada compatible con SEO. Cada página generada aparece representada en la jerarquía de la navegación. En lugar de obligar a que haya páginas independientes por cada categoría en la taxonomía, el marco ofrece un mecanismo de plantillas y herencia que crea las páginas de aterrizaje de cada vínculo de navegación. Puede usar la característica de páginas de tema para personalizar la experiencia de página de aterrizaje.
Las API de navegación administrada están integradas en la taxonomía y las bibliotecas de publicación en SharePoint. Los componentes de metadatos administrados, como los conjuntos y los almacenes de términos, se usan para permitir la navegación controlada mediante taxonomía en el sitio. En la biblioteca de clases de servidor .NET, el espacio de nombres Microsoft.SharePoint.Publishing.Navigation contiene objetos term, term set y otros objetos de clase que reflejan la clase Term y la clase TermSet en el espacio de nombres de navegación Microsoft.SharePoint.Taxonomy , proporcionando métodos y propiedades diseñados específicamente para asociar esos elementos de metadatos a elementos de navegación. Otras clases, como TaxonomySiteMapNode , permiten ofrecer metadatos con diversos elementos de navegación de sitio, como nodos de mapa de sitio y otras partes de la navegación del sitio. Otras clases hacen posible el almacenamiento en caché y el contexto para la navegación administrada.
En la navegación global se pueden mostrar los vínculos de navegación controlados mediante taxonomía. La navegación global es una capa de navegación con una o varias capas siempre presentes que, a menudo, aparece en la parte superior de un sitio y que refleja las categorías de contenido de nivel superior. Estos vínculos también se pueden mostrar en el control de navegación actual que suele mostrarse a la izquierda de la página. Este control representa el siguiente nivel en la jerarquía para la categoría seleccionada en la navegación global, o bien un conjunto de vínculos que pertenecen a dicha categoría.
Direcciones URL fáciles de usar y el proveedor de navegación administrada
Al ir a un sitio de SharePoint por primera vez, es posible que observe que el formato de dirección URL ha cambiado. En lugar de una dirección con una /Pages/default.aspx
extensión, la dirección URL de la página termina con solo /
. La navegación administrada proporciona un esquema de direcciones URL fáciles de usar coherente en todos los sitios, categorías y páginas de elementos.
El proveedor de navegación administrada hace posible esta experiencia. Cuando se navega a la raíz de un sitio que usa el proveedor de navegación administrada, la opción Página de bienvenida del sitio controla la página que se carga y muestra en el explorador, pero la dirección URL que se ve (y que recogen los resultados de la búsqueda) se vuelve a escribir con este formato, más fácil de usar.
Cualquier página, incluida la página principal del sitio, puede tener una dirección URL fácil de usar. Según cómo se configure el sitio, la mayoría de las páginas obtiene una automáticamente una dirección URL fácil de usar. Además, este tipo de direcciones se puede localizar.
API de navegación administrada
La API de taxonomía proporciona varios métodos y propiedades nuevos en SharePoint que puede usar para personalizar términos, conjuntos de términos y otros elementos de metadatos en el almacén de términos para su uso en escenarios de navegación del sitio. Estas API están disponibles en los modelos de programación de cliente de .NET, de servidor de .NET, de Silverlight y de JavaScript.
Ejemplo de código: Personalizar la navegación administrada con API del modelo de objetos de cliente de .NET (CSOM)
Cuando se usa el modelo de objetos de cliente de .NET para la taxonomía, se puede crear un conjunto de términos de navegación si existe un almacén de términos para la colección de sitios actual, o bien convertir un conjunto de términos existente en uno que admita la navegación administrada.
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();
}
}
Ejemplo de código: Personalizar la navegación administrada con API del modelo de objetos de servidor de .NET (CSOM)
Puede usar las clases y métodos de taxonomía del servidor .NET en los espacios de nombres Microsoft.SharePoint.Taxonomy y Microsoft.SharePoint.Publishing.Navigation para crear un nuevo conjunto de términos de navegación.
///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();
}
}