jueves, 27 de enero de 2011

Customizar los resultados de nuestras búsquedas (III)

Hola de nuevo!

Esta vez voy a acabar de explicar la customización de resultados de las búsquedas en SharePoint, añadiendo campos que nos interesen de los items indexados.

La última parte es corta pero un poco engorrosa, y es que toca manipular el xslt de los resultados.

Para ello, editamos la página de búsqueda como hemos hecho en las anteriores partes de la customización y editamos el Search Core Result.

Si habéis seguido los pasos anteriores ya tendremos añadida correctamente la columna en las Selected Columns del webpart.

El siguiente paso es abrir el xslt mediante el botón "Editor XSL" de las características del webpart:


Una vez tenemos abierto el xslt podemos crear funciones (o templates, como técnicamente es llamado) que nos permitan customizar los resultados. En mi caso he creado una función que devuelve las urls de los viewforms de los documentos y si no es un documento, entonces la vista por defecto, es decir, he indexado un nuevo campo que es el tipo de contenido, y si éste es de tipo STS_ListItem_DocumentLibrary entonces cambio la url del link del item que nos muestra la búsqueda. En resumen, la función que hace esto sería algo así:


<xsl:template name="DisplayViewPropertiesLink2">

  <xsl:param name="itemUrl" />

  <xsl:param name="siteUrl" />

  <xsl:param name="contentclass" />

  <xsl:if test="$contentclass='STS_ListItem_DocumentLibrary'">

    <xsl:variable name="docLibLoc" select="substring-before(substring-after($itemUrl, concat($siteUrl, '/')), '/')" />

    <xsl:variable name="viewform" select="concat($siteUrl, '/', $docLibLoc, '/Forms/DispForm.aspx?id=')"/>

<xsl:value-of select="$viewform"/>

  </xsl:if>

</xsl:template>




Y la llamada a esta template sería así:


<xsl:variable name="basename2">

    <xsl:call-template name="DisplayViewPropertiesLink2">

        <xsl:with-param name="itemUrl" select="url" />

        <xsl:with-param name="siteUrl" select="sitename" />

        <xsl:with-param name="contentclass" select="contentclass" />

    </xsl:call-template>

  </xsl:variable>



Dónde basename2 es lo que el template me retorna!

Espero que os haya gustado y sobretodo que os sea útil ;D

No hay comentarios:

Publicar un comentario