(versión alfresco-community-4.2.e)
Para poder personalizar la forma en la que se muestra los resultados de búsqueda hay que modificar los siguientes ficheros:
Search.lib.js
search.get.json.ftl
Situados en:
C:\Alfresco\tomcat\webapps\alfresco\WEB-INF\classes\alfresco\templates\webscripts\org\alfresco\slingshot\search\
Y el fichero Search-min.js, en la carpeta:
C:\Alfresco\tomcat\webapps\share\components\search
En el fichero searchi-lib.js tenemos que buscar la función getDocumentItem
function getDocumentItem(siteId, containerId, pathParts, node, populate)
{
// PENDING: how to handle comments? the document should
// be returned instead
// check whether this is a valid folder or a file
var item = t = null;
if (node.qnamePath.indexOf(COMMENT_QNAMEPATH) == -1 &&
!(node.qnamePath.match(DISCUSSION_QNAMEPATH+"$") == DISCUSSION_QNAMEPATH))
{
if (node.isContainer || node.isDocument)
{
if (!populate) return {};
item =
{
site: getSiteData(siteId),
container: containerId,
nodeRef: node.nodeRef.toString(),
tags: ((t = node.tags) !== null) ? t : [],
name: node.name,
displayName: node.name,
title: node.properties["cm:title"],
description: node.properties["cm:description"] + node.properties["ej:authorisedBy"] + "siempre aprendiendo algo nuevo",
modifiedOn: node.properties["cm:modified"],
modifiedByUser: node.properties["cm:modifier"],
createdOn: node.properties["cm:created"],
createdByUser: node.properties["cm:creator"],
mimetype: node.mimetype,
path: pathParts.join("/"),
};
item.modifiedBy = getPersonDisplayName(item.modifiedByUser);
item.createdBy = getPersonDisplayName(item.createdByUser);
}
if (node.isContainer)
{
item.type = "folder";
item.size = -1;
}
else if (node.isDocument)
{
item.type = "document";
item.size = node.size;
}
}
return item;
}
En esta función, se cargan todos los datos de los objetos que se han encontrado para devolverlo en una lista de ítems y crear posteriormente el mensaje JSON. Yo por ejemplo, he añadido al campo descripción una propiedad ["ej:authorisedBy"] de un tipo que yo mismo me he definido y un poco de texto al estilo “Hola mundo”.
description: node.properties["cm:description"] + node.properties["ej:authorisedBy"] + "Siempre aprendiendo algo nuevo",
Esta información se pasa al fichero search.get.json.ftl donde se codifica el mensaje JSON
<#escape x as jsonUtils.encodeJSONString(x)>
{
"totalRecords": ${data.paging.totalRecords?c},
"totalRecordsUpper": ${data.paging.totalRecordsUpper?c},
"startIndex": ${data.paging.startIndex?c},
"items":
[
<#list data.items as item>
{
"nodeRef": "${item.nodeRef}",
"type": "${item.type}",
"name": "${item.name!''}",
"displayName": "${item.displayName!''}",
<#if item.title??>
"title": "${item.title}",
#if>
"description": "${item.description!''}",
"modifiedOn": "${xmldate(item.modifiedOn)}",
"modifiedByUser": "${item.modifiedByUser}",
"modifiedBy": "${item.modifiedBy}",
"size": ${item.size?c},
"mimetype": "${item.mimetype!''}",
<#if item.site??>
"site":
{
"shortName": "${item.site.shortName}",
"title": "${item.site.title}"
},
"container": "${item.container}",
#if>
<#if item.path??>
"path": "${item.path}",
#if>
"tags": [<#list item.tags as tag>"${tag}"<#if tag_has_next>,#if>#list>]
}<#if item_has_next>,#if>
#list>
]
}
#escape>
Como solo he añadido más información dentro de la propiedad descripción de cada item, no me hace falta modificar el archivo search.get.json.ftl, pero si queréis añadir más propiedades a los items tendréis que modificarlo.
Finalmente, en el script search-min.js, está la función que se va encargar de recoger la lista de ítems y plasmar toda su información en el HTML. Esta función es renderCellDescription.
renderCellDescription = function v(L, O, H, C) {
c.addClass(L.parentNode, "description");
var A = O.getData("site");
var B = y._getBrowseUrlForRecord(O);
var K = O.getData("displayName");
var G = '' + p(K)
+ "";
var J = O.getData("title");
if (J && J !== K) {
G += '(' + p(J)
+ ")"
}
G += "
";
var F = O.getData("description");
if (F) {
G += '"
}
…
El fichero search-min.js es una versión “comprimida” de search.js y un poco ininteligible por lo que puede ser buena idea leer el fichero search.js antes de ponerse a hacer algún cambio. Al final, el fichero que se ejecuta es search-min.js.
Nota:Para ver los cambios, hay que reiniciar Alfresco



0 comentarios:
Publicar un comentario