Modificar presentación de resultado de búsqueda

cancel
Showing results for 
Search instead for 
Did you mean: 
fcamposmx2000
Member II

Modificar presentación de resultado de búsqueda

Estoy buscando información relativa a como personalizar el resultado de una búsqueda en alfresco, es decir que cuando yo busque en el espacio de alfresco, la tabla que me aparece no contenga algunas columnas que tiene, como fecha de modificación, dueño, etc., y en su lugar poner otra información del archivo, pero no he encontrado como hacerlo, ni siquiera un ejemplo básico.

Cualquier información se agradecerá enormemente.

Saludos cordiales.
4 Replies
pjcaracuel_2349
Active Member II

Re: Modificar presentación de resultado de búsqueda

Buenas,

Para lo que pides si lo que usas es Alfresco Explorer, no te quedará mas remedio que construir tu propia pagina de resultados. Lo unico que he encontrado por ahi es:

https://forums.alfresco.com/en/viewtopic.php?f=12&t=14642

Si usas Alfresco Share, la personalizacion de la pagina de resultados es mucho mas facil.

Saludos
fcamposmx2000
Member II

Re: Modificar presentación de resultado de búsqueda

Muchas gracias veré que puedo sacar de ahí.
toxicosmos
Member II

Re: Modificar presentación de resultado de búsqueda

Hola,

yo uso Alfresco Share, y tengo la misma necesidad. Tenéis algún ejemplo de como personalizar la página de resultados de búsqueda?

En concreto me gustaría mostrar las coincidencias encontradas en el interior de los documentos encontrados. Como hace Google por ejemplo.

Muchas gracias
mauri
Member II

Re: Modificar presentación de resultado de búsqueda

(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 = '<h3 class="itemname">
<a href="' + B
+ '" class="theme-color-1">' + p(K)
+ "</a>";
var J = O.getData("title");
if (J && J !== K) {
G += '<span class="title">(' + p(J)
+ ")</span>"
}
G += "</h3>
";
var F = O.getData("description");
if (F) {
G += '<div class="details meta">
' + p(F)
+ "</div>
"
}



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.

NotaSmiley Tongueara ver los cambios, hay que reiniciar Alfresco