SharePoint 2013. Etiquetas de navegación administradas

Una de las grandes novedades de los sitios de publicación en SharePoint 2013 es la Navegación Administradas por Metadatos, que nos permite configurar nuestros sitios para que utilicen la jerarquía de términos para definir la navegación de nuestro sitio, incluyendo una Frienly Url para estas. Vean este artículo de mi blog.

Estos términos pueden ser usados como etiquetas y, por ejemplo, crearnos un campo de metadatos en el tipo de contenido de Página de Artículo para etiquetarla. Si tenemos unas páginas de autores de artículos, nos interesaría poder etiquetar estos artículos, con el autor que lo ha creado para que, desde la misma página de artículos, podamos poner un enlace que nos lleva a la información del autor. Quedaría tal como sigue:

www.misitio.com/articulos/article1

www.misitio.com/articulos/article2

www.misitio.com/autores/alberto-diaz-martin

www.misitio.com/autores/santiago-porras

Por defecto, para los campos de tipo Taxonomía tenemos un control que permite visualizar o editar esta información desde una página de publicación, y lo que estamos buscando es que, en el modo de visualización, no solo nos renderice el nombre del autor (valor de la etiqueta), si no que nos añade el enlace a la Friendly Url que le corresponde.

 

Para esto, nos vamos a crear un control de campo (FieldControl) que reciba el campo que queremos mostrar y localice en el almacenamiento de términos, la Friendly Url que le corresponde.

Nuestro control va a heredar el Microsoft.SharePoint.WebControls.BaseFieldControl y sobreescribir el método RenderFieldForDisplay que es el que se encarga de renderizar el valor del campo en modo no edición.

protected override void RenderFieldForDisplay(HtmlTextWriter output)

{

    //Obtenemos el campo y su valor de tipo TaxonomyField

    TaxonomyField field = this.Field as TaxonomyField;

    var tagValue = ListItem[field.Title] as TaxonomyFieldValue;

 

    if (tagValue != null)

    {

        //Obtenemos el Término de la taxonomía que corresponda con el valor del campo

        var taxSession = new TaxonomySession(SPContext.Current.Site);

        var taxTermStore = taxSession.DefaultSiteCollectionTermStore;

        var termSet = taxTermStore.GetTermSet(field.TermSetId);

        var term = termSet.GetTerm(new Guid(tagValue.TermGuid));

 

        //Obtenemos el Término de Navegación

        var navTerm = NavigationTerm.GetAsResolvedByWeb(term,

            SPContext.Current.Web,

            StandardNavigationProviderNames.GlobalNavigationTaxonomyProvider);

 

        //Obtenemos el valor de la FriendlyUrl

        var url = “#”;

        if (navTerm != null)

        {

            url = navTerm.GetWebRelativeFriendlyUrl();

        }

         output.Write(“<a href='” + url + “‘>”);

        output.Write(tagValue.Label);

        output.Write(“</a>”);

    }

    else

    {

        base.RenderFieldForDisplay(output);

    }

}

 

Lo que tenemos que hacer es obtener el Term del valor de nuestro campo de Taxonomía para utilizar la nueva clase NavigationTerm que nos permite obtener la información de navegación de un término, del que obtenemos la url que estamos buscando.

Así, con este control y para cualquier término de navegación, nos devolvería su correspondiente Friendly Url, utilizándolo en nuestro Page Layout.

<%@ Register Tagprefix=”GSCControls” Namespace=”GSC.Publishing.Controls” Assembly=”GSC.Publishing.Controls, Version=1.0.0.0, Culture=neutral, PublicKeyToken=XXXXXXXXXXXXXX” %>

<GSCControls:TaxonomyNavigationControl FieldName=”ef3be664-8ac8-49de-b164-253fe97ad209″ runat=”server” />

 

Saludos a todos…

Un pensamiento en “SharePoint 2013. Etiquetas de navegación administradas”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *