Extendiendo la búsqueda avanzada de Alfresco Share

La aplicación Share de Alfresco nos permite la recuperación de archivos mediante una interfaz de búsqueda avanzada que en ocasiones puede resultar insuficiente. Por ejemplo, no nos permite buscar archivos por “Categorías” o “Etiquetas” o limitar la búsqueda en un determinado directorio, tarea que si podemos realizar con la herramienta “Explorer”.
A continuación explicamos las modificaciones necesarias en nuestro Alfresco que nos permitirán esta funcionalidad en Share.

Por un lado, para incluir los filtros de “Categorías” y “Etiquetas” no hay que programar nada, ya que son características de los archivos que ya vienen implementadas en Alfresco Share y lo único que tenemos que hacer es mostrarlas en la Búsqueda. Para ello modificamos el archivo
C:\Alfresco\tomcat\webapps\share\WEB-INF\classes\alfresco\share-form-config.xml y añadimos el siguiente código:

En la línea 322 deberá quedar

  1. <!-- Search form -->
  2. <form id="search">
  3. <field-visibility>
  4. <show id="cm:name" />
  5. <show id="cm:title" force="true" />
  6. <show id="cm:description" force="true" />
  7. <show id="cm:categories" force="true" />
  8. <show id="cm:<span data-scayt_word="taggable" data-scaytid="383">taggable</span>" force="true" />
  9. <show id="<span data-scayt_word="mimetype" data-scaytid="386">mimetype</span>" />
  10. <show id="cm:modified" />
  11. <show id="cm:modifier" />
  12. </field-visibility>
  13. <appearance>
  14. <field id="cm:categories">
  15. <control>
  16. <<span data-scayt_word="control-param" data-scaytid="387">control-param</span> name="<span data-scayt_word="compactMode" data-scaytid="397">compactMode</span>">true</<span data-scayt_word="control-param" data-scaytid="388">control-param</span>>
  17. </control>
  18. </field>
  19. <field id="cm:<span data-scayt_word="taggable" data-scaytid="384">taggable</span>">
  20. <control>
  21. <<span data-scayt_word="control-param" data-scaytid="389">control-param</span> name="<span data-scayt_word="compactMode" data-scaytid="398">compactMode</span>">true</<span data-scayt_word="control-param" data-scaytid="390">control-param</span>>
  22. <<span data-scayt_word="control-param" data-scaytid="391">control-param</span> name="<span data-scayt_word="params" data-scaytid="399">params</span>">aspect=cm:<span data-scayt_word="taggable" data-scaytid="385">taggable</span></<span data-scayt_word="control-param" data-scaytid="392">control-param</span>>
  23. <<span data-scayt_word="control-param" data-scaytid="393">control-param</span> name="<span data-scayt_word="createNewItemUri" data-scaytid="400">createNewItemUri</span>">/<span data-scayt_word="api" data-scaytid="401">api</span>/tag/workspace/<span data-scayt_word="SpacesStore" data-scaytid="402">SpacesStore</span></<span data-scayt_word="control-param" data-scaytid="394">control-param</span>>
  24. <<span data-scayt_word="control-param" data-scaytid="395">control-param</span> name="<span data-scayt_word="createNewItemIcon" data-scaytid="403">createNewItemIcon</span>">tag</<span data-scayt_word="control-param" data-scaytid="396">control-param</span>>
  25. </control>
  26. </field>

Ahora bien, para incluir la búsqueda limitada en un directorio es muy distinto, al no tratarse de una característica propia de los archivos de Alfresco.
Lo primero que hacemos es modificar el formulario de búsqueda avanzada para incluir los campos necesarios. En C:\Alfresco\tomcat\webapps\share\WEB-INF\classes\alfresco\site-webscripts\org\alfresco\components\search\advsearch.get.html.ftl añadimos:

  1. <#-- <span data-scayt_word="carpeta" data-scaytid="436">carpeta</span> entry box -->
  2. <div class="<span data-scayt_word="carpeta-box" data-scaytid="440">carpeta-box</span>">
  3. <div>${<span data-scayt_word="msg" data-scaytid="441">msg</span>("<span data-scayt_word="Buscar" data-scaytid="443">Buscar</span> en <span data-scayt_word="carpeta" data-scaytid="437">carpeta</span>")}:</div>
  4. <input type="text" class="terms" name="${el}-search-text" id="${el}<span data-scayt_word="carpeta" data-scaytid="438">carpeta</span>" value="${(<span data-scayt_word="page.url.args" data-scaytid="444">page.url.args</span>["<span data-scayt_word="st" data-scaytid="445">st</span>"]!"")?html}" <span data-scayt_word="maxlength" data-scaytid="446">maxlength</span>="1024" />
  5. <#-- <span data-scayt_word="subcarpetas" data-scaytid="447">subcarpetas</span> check box -->
  6. <div>
  7. <INPUT TYPE=CHECKBOX name="${el}<span data-scayt_word="-subcarpetas" data-scaytid="450">-subcarpetas</span>" id="${el}<span data-scayt_word="subcarpetas" data-scaytid="448">subcarpetas</span>"> <span data-scayt_word="Incluir" data-scaytid="451">Incluir</span> <span data-scayt_word="subcarpetas" data-scaytid="449">subcarpetas</span><P>
  8. </div>
  9. <#-- folder button -->
  10. <div class="<span data-scayt_word="yui-u" data-scaytid="452">yui-u</span> align-right">
  11. <span id="${el}-folder-button-1" class="<span data-scayt_word="yui-button" data-scaytid="453">yui-button</span> <span data-scayt_word="yui-push-button" data-scaytid="454">yui-push-button</span> search-icon">
  12. <span class="first-child">
  13. <button type="button">${<span data-scayt_word="msg" data-scaytid="442">msg</span>('<span data-scayt_word="Seleccionar" data-scaytid="455">Seleccionar</span> <span data-scayt_word="carpeta" data-scaytid="439">carpeta</span>')}</button>
  14. </span>
  15. </span>
  16. </div>
  17. </div>

Y modificamos la hoja de estilos para conservar la misma apariencia, en C:\Alfresco\tomcat\webapps\share\components\search\search.css añadimos:

  1. .search <span data-scayt_word=".carpeta-box" data-scaytid="466">.carpeta-box</span>
  2. {
  3. background-color: #<span data-scayt_word="F5FFF2" data-scaytid="468">F5FFF2</span>;
  4. margin-left: <span data-scayt_word="1.5em" data-scaytid="469">1.5em</span>;
  5. border: <span data-scayt_word="1px" data-scaytid="470">1px</span> solid #<span data-scayt_word="C2C2C2" data-scaytid="471">C2C2C2</span>;
  6. padding: <span data-scayt_word="1em" data-scaytid="472">1em</span>;
  7. width: <span data-scayt_word="800px" data-scaytid="473">800px</span>;
  8. }
  9.  
  10. .search <span data-scayt_word=".carpeta-box" data-scaytid="467">.carpeta-box</span> .terms
  11. {
  12. width: <span data-scayt_word="60em" data-scaytid="474">60em</span>;
  13. }

Para elegir el directorio en el que vamos a realizar la búsqueda vamos a usar un “Picker” o “Selector” que ya está implementado en el Share y que realiza la misma funcionalidad que estamos buscando. Para poder utilizarlo y modificarlo a nuestro antojo lo que hacemos es copiarnos los archivos que implementan el “Selector” en los directorios de búsqueda avanzada.
Copiamos los archivos global-folder.js, global-folder-min.js y global-folder.css de C:\Alfresco\tomcat\webapps\share\modules\documentlibrary a
C:\Alfresco\tomcat\webapps\share\components\search

Y todos los global-folder.get* de C:\Alfresco\tomcat\webapps\share\WEB-INF\classes\alfresco\site-webscripts\org\alfresco\modules\documentlibrary a
C:\Alfresco\tomcat\webapps\share\WEB-INF\classes\alfresco\site-webscripts\org\alfresco\components\search

Por último para poder usar el “Selector” añadimos en C:\Alfresco\tomcat\webapps\share\WEB-INF\classes\alfresco\site-webscripts\org\alfresco\components\search\advsearch.get.head.ftl el siguiente código

  1. <@script type="text/<span data-scayt_word="javascript" data-scaytid="538">javascript</span>" <span data-scayt_word="src" data-scaytid="539">src</span>="${<span data-scayt_word="page.url.context" data-scaytid="540">page.url.context</span>}/res/components/search/<span data-scayt_word="global-folder.js" data-scaytid="542">global-folder.js</span>"></@script>
  2. <@link <span data-scayt_word="rel" data-scaytid="543">rel</span>="<span data-scayt_word="stylesheet" data-scaytid="544">stylesheet</span>" type="text/<span data-scayt_word="css" data-scaytid="545">css</span>" <span data-scayt_word="href" data-scaytid="546">href</span>="${<span data-scayt_word="page.url.context" data-scaytid="541">page.url.context</span>}/res/components/search/<span data-scayt_word="global-folder.css" data-scaytid="547">global-folder.css</span>" />

Ahora nos queda implementar la funcionalidad que buscamos en los correspondientes “Javascripts”. Comenzamos por el script C:\Alfresco\tomcat\webapps\share\components\search\advsearch.js
En la línea 38 hacemos la declaración

  1. /**
  2. * Alfresco Slingshot aliases
  3. */
  4. <span data-scayt_word="var" data-scaytid="563">var</span> $html = <span data-scayt_word="Alfresco.util.encodeHTML" data-scaytid="564">Alfresco.util.encodeHTML</span>,
  5. $<span data-scayt_word="hasEventInterest" data-scaytid="565">hasEventInterest</span> = <span data-scayt_word="Alfresco.util.hasEventInterest" data-scaytid="566">Alfresco.util.hasEventInterest</span>;

Registramos el nuevo botón que hemos añadido, en la línea 135 ha de aparecer

  1. // search <span data-scayt_word="YUI" data-scaytid="589">YUI</span> button and menus
  2. <span data-scayt_word="this.widgets.searchButton1" data-scaytid="575">this.widgets.searchButton1</span> = <span data-scayt_word="Alfresco.util.createYUIButton" data-scaytid="576">Alfresco.util.createYUIButton</span>(this, "search-button-1", <span data-scayt_word="this.onSearchClick" data-scaytid="579">this.onSearchClick</span>);
  3. <span data-scayt_word="this.widgets.searchButton2" data-scaytid="581">this.widgets.searchButton2</span> = <span data-scayt_word="Alfresco.util.createYUIButton" data-scaytid="577">Alfresco.util.createYUIButton</span>(this, "search-button-2", <span data-scayt_word="this.onSearchClick" data-scaytid="580">this.onSearchClick</span>);
  4. <span data-scayt_word="this.widgets.folderButton1" data-scaytid="582">this.widgets.folderButton1</span> = <span data-scayt_word="Alfresco.util.createYUIButton" data-scaytid="578">Alfresco.util.createYUIButton</span>(this, "folder-button-1", <span data-scayt_word="this.onFolderClick" data-scaytid="583">this.onFolderClick</span>);


Debemos modificar la función onSearchClick para la inclusión de los nuevos parámetros en la consulta de búsqueda, para ello la función quedará así

  1. /**
  2. * Event handler that gets fired when user clicks the Search button.
  3. *
  4. * @method <span data-scayt_word="onSearchClick" data-scaytid="600">onSearchClick</span>
  5. * <span data-scayt_word="@param" data-scaytid="631">@param</span> e {object} <span data-scayt_word="DomEvent" data-scaytid="633">DomEvent</span>
  6. * <span data-scayt_word="@param" data-scaytid="632">@param</span> <span data-scayt_word="obj" data-scaytid="634">obj</span> {object} Object passed back from <span data-scayt_word="addListener" data-scaytid="636">addListener</span> method
  7. */
  8. <span data-scayt_word="onSearchClick" data-scaytid="601">onSearchClick</span>: function <span data-scayt_word="ADVSearch_onSearchClick" data-scaytid="637">ADVSearch_onSearchClick</span>(e, <span data-scayt_word="obj" data-scaytid="635">obj</span>)
  9. {
  10. // retrieve form data structure directly from the runtime
  11. <span data-scayt_word="var" data-scaytid="602">var</span> <span data-scayt_word="formData" data-scaytid="638">formData</span> = <span data-scayt_word="this.currentForm.runtime.getFormData" data-scaytid="608">this.currentForm.runtime.getFormData</span>();
  12.  
  13. // add DD type to form data structure
  14. <span data-scayt_word="formData.datatype" data-scaytid="609">formData.datatype</span> = <span data-scayt_word="this.currentForm.type" data-scaytid="610">this.currentForm.type</span>;
  15.  
  16.  
  17. <span data-scayt_word="var" data-scaytid="603">var</span> valor="<span data-scayt_word="inicial" data-scaytid="640">inicial</span>";
  18.  
  19. //<span data-scayt_word="cogemos" data-scaytid="641">cogemos</span> el <span data-scayt_word="nombre" data-scaytid="642">nombre</span> de la <span data-scayt_word="carpeta" data-scaytid="611">carpeta</span>
  20. valor = <span data-scayt_word="Dom.get" data-scaytid="614">Dom.get</span>(<span data-scayt_word="this.id" data-scaytid="617">this.id</span> + "<span data-scayt_word="carpeta" data-scaytid="612">carpeta</span>").value;
  21.  
  22. //<span data-scayt_word="miramos" data-scaytid="643">miramos</span> el checkbox de <span data-scayt_word="las" data-scaytid="620">las</span> <span data-scayt_word="subcarpetas" data-scaytid="621">subcarpetas</span>
  23.  
  24. <span data-scayt_word="var" data-scaytid="604">var</span> check=<span data-scayt_word="Dom.get" data-scaytid="615">Dom.get</span>(<span data-scayt_word="this.id" data-scaytid="618">this.id</span> + "<span data-scayt_word="subcarpetas" data-scaytid="622">subcarpetas</span>").checked;
  25.  
  26. if(check==true){
  27.  
  28. valor+="/";
  29. }
  30.  
  31.  
  32.  
  33. // build and execute <span data-scayt_word="url" data-scaytid="644">url</span> for search page
  34. <span data-scayt_word="var" data-scaytid="605">var</span> <span data-scayt_word="cadena" data-scaytid="647">cadena</span>=<span data-scayt_word="YAHOO.lang.JSON.stringify" data-scaytid="623">YAHOO.lang.JSON.stringify</span>(<span data-scayt_word="formData" data-scaytid="639">formData</span>);
  35.  
  36. //le <span data-scayt_word="quitamos" data-scaytid="648">quitamos</span> la } del final
  37. <span data-scayt_word="var" data-scaytid="606">var</span> <span data-scayt_word="cadena2" data-scaytid="649">cadena2</span>=<span data-scayt_word="cadena.substring" data-scaytid="624">cadena.substring</span>(0,<span data-scayt_word="cadena.length-1" data-scaytid="625">cadena.length-1</span>);
  38.  
  39. //le <span data-scayt_word="metemos" data-scaytid="653">metemos</span> el <span data-scayt_word="campo" data-scaytid="654">campo</span> <span data-scayt_word="carpeta" data-scaytid="613">carpeta</span> y la }
  40. <span data-scayt_word="cadena2" data-scaytid="650">cadena2</span>=<span data-scayt_word="cadena2" data-scaytid="651">cadena2</span>+",\"<span data-scayt_word="carpeta_" data-scaytid="655">carpeta_</span>\":\""+valor+"\"}";
  41.  
  42.  
  43. <span data-scayt_word="var" data-scaytid="607">var</span> <span data-scayt_word="url" data-scaytid="645">url</span> = <span data-scayt_word="YAHOO.lang.substitute" data-scaytid="626">YAHOO.lang.substitute</span>(<span data-scayt_word="Alfresco.constants.URL_PAGECONTEXT" data-scaytid="627">Alfresco.constants.URL_PAGECONTEXT</span> + "{site}search?t={terms}&q={query}",
  44. {
  45. site: (<span data-scayt_word="this.options.siteId.length" data-scaytid="628">this.options.siteId.length</span> !== 0 ? ("site/" + <span data-scayt_word="this.options.siteId" data-scaytid="629">this.options.siteId</span> + "/") : ""),
  46. terms: <span data-scayt_word="encodeURIComponent" data-scaytid="656">encodeURIComponent</span>(<span data-scayt_word="Dom.get" data-scaytid="616">Dom.get</span>(<span data-scayt_word="this.id" data-scaytid="619">this.id</span> + "-search-text").value),
  47. query: <span data-scayt_word="encodeURIComponent" data-scaytid="657">encodeURIComponent</span>(<span data-scayt_word="cadena2" data-scaytid="652">cadena2</span>)
  48. });
  49.  
  50. <span data-scayt_word="window.location.href" data-scaytid="630">window.location.href</span> = <span data-scayt_word="url" data-scaytid="646">url</span>;
  51. },

Creamos la función que se debe ejecutar cuando se produzca el evento del botón “Seleccionar carpeta” , tenemos que añadir

  1. /**
  2. * Event handler that gets fired when user clicks the Folder button.
  3. *
  4. * @method <span data-scayt_word="onFolderClick" data-scaytid="690">onFolderClick</span>
  5. * <span data-scayt_word="@param" data-scaytid="672">@param</span> e {object} <span data-scayt_word="DomEvent" data-scaytid="674">DomEvent</span>
  6. * <span data-scayt_word="@param" data-scaytid="673">@param</span> <span data-scayt_word="obj" data-scaytid="675">obj</span> {object} Object passed back from <span data-scayt_word="addListener" data-scaytid="677">addListener</span> method
  7. */
  8. <span data-scayt_word="onFolderClick" data-scaytid="691">onFolderClick</span>: function <span data-scayt_word="ADVSearch_onFolderClick" data-scaytid="692">ADVSearch_onFolderClick</span>(e, <span data-scayt_word="obj" data-scaytid="676">obj</span>)
  9. {
  10.  
  11. if (!<span data-scayt_word="this.widgets.destinationDialog" data-scaytid="678">this.widgets.destinationDialog</span>)
  12. {
  13. <span data-scayt_word="this.widgets.destinationDialog" data-scaytid="679">this.widgets.destinationDialog</span> = new <span data-scayt_word="Alfresco.module.DoclibGlobalFolder" data-scaytid="680">Alfresco.module.DoclibGlobalFolder</span>(<span data-scayt_word="this.id" data-scaytid="681">this.id</span> + "<span data-scayt_word="-destinationDialog" data-scaytid="693">-destinationDialog</span>");
  14. <span data-scayt_word="this.widgets.destinationDialog.setOptions" data-scaytid="682">this.widgets.destinationDialog.setOptions</span>(
  15. {
  16. title: <span data-scayt_word="this.msg" data-scaytid="684">this.msg</span>("<span data-scayt_word="Seleccione" data-scaytid="694">Seleccione</span> <span data-scayt_word="una" data-scaytid="685">una</span> <span data-scayt_word="carpeta" data-scaytid="686">carpeta</span>")
  17. });
  18.  
  19. }
  20.  
  21.  
  22.  
  23. <span data-scayt_word="var" data-scaytid="687">var</span> <span data-scayt_word="pathNodeRef" data-scaytid="695">pathNodeRef</span> ;
  24. <span data-scayt_word="this.widgets.destinationDialog.setOptions" data-scaytid="683">this.widgets.destinationDialog.setOptions</span>(
  25. {
  26. <span data-scayt_word="pathNodeRef" data-scaytid="696">pathNodeRef</span>: <span data-scayt_word="pathNodeRef" data-scaytid="697">pathNodeRef</span> ? new <span data-scayt_word="Alfresco.util.NodeRef" data-scaytid="688">Alfresco.util.NodeRef</span>(<span data-scayt_word="pathNodeRef" data-scaytid="698">pathNodeRef</span>) : null
  27. });
  28.  
  29. <span data-scayt_word="this.widgets.destinationDialog.showDialog" data-scaytid="689">this.widgets.destinationDialog.showDialog</span>();
  30.  
  31. },

Y por último recoger el directorio seleccionado por el usuario

  1. /**
  2. * Folder selected in destination dialog
  3. *
  4. * @method <span data-scayt_word="onDestinationSelected" data-scaytid="742">onDestinationSelected</span>
  5. * <span data-scayt_word="@param" data-scaytid="706">@param</span> layer
  6. * {object} Event fired
  7. * <span data-scayt_word="@param" data-scaytid="707">@param</span> <span data-scayt_word="args" data-scaytid="744">args</span>
  8. * {array} Event parameters (depends on event type)
  9. */
  10. <span data-scayt_word="onDestinationSelected" data-scaytid="743">onDestinationSelected</span>: function <span data-scayt_word="ACJC_onDestinationSelected" data-scaytid="748">ACJC_onDestinationSelected</span>(layer, <span data-scayt_word="args" data-scaytid="745">args</span>)
  11. {
  12. // Check the event is directed towards this instance
  13. if ($<span data-scayt_word="hasEventInterest" data-scaytid="708">hasEventInterest</span>(<span data-scayt_word="this.widgets.destinationDialog" data-scaytid="709">this.widgets.destinationDialog</span>, <span data-scayt_word="args" data-scaytid="746">args</span>))
  14. {
  15. <span data-scayt_word="var" data-scaytid="710">var</span> <span data-scayt_word="selectedFolder" data-scaytid="749">selectedFolder</span> = <span data-scayt_word="args" data-scaytid="747">args</span>[1]<span data-scayt_word=".selectedFolder" data-scaytid="751">.selectedFolder</span>;
  16. if (<span data-scayt_word="selectedFolder" data-scaytid="750">selectedFolder</span> !== null)
  17. {
  18. <span data-scayt_word="var" data-scaytid="711">var</span> path=<span data-scayt_word="selectedFolder.path" data-scaytid="712">selectedFolder.path</span>;
  19.  
  20. if(<span data-scayt_word="path.charAt" data-scaytid="713">path.charAt</span>(0)=='/'){
  21.  
  22. path=<span data-scayt_word="path.substring" data-scaytid="714">path.substring</span>(1,<span data-scayt_word="path.lenght" data-scaytid="715">path.lenght</span>);
  23. }
  24. <span data-scayt_word="Dom.get" data-scaytid="716">Dom.get</span>(<span data-scayt_word="this.id" data-scaytid="717">this.id</span> + "<span data-scayt_word="carpeta" data-scaytid="718">carpeta</span>").value=path;
  25. }
  26. }
  27. },

Una vez hemos terminado de editar el script advseacrh.js tenemos que comprimirlo usando algún compressor de Javascript y de esta forma obtener el advseacrh-min.js que es el que realmente se ejecuta en el cliente.
Por ultimo sólo nos queda modificar la consulta que se envía a “Lucene” para incorporarle los nuevos parámetros. Para ello modificamos el script C:\Alfresco\tomcat\webapps\alfresco\WEB-INF\classes\alfresco\templates\webscripts\org\alfresco\slingshot\search\search.lib.js de la siguiente forma:

En la línea 718 añadimos

  1. else if (<span data-scayt_word="p.indexOf" data-scaytid="771">p.indexOf</span>("<span data-scayt_word="carpeta_" data-scaytid="772">carpeta_</span>") === 0){
  2. <span data-scayt_word="nombre_carpeta" data-scaytid="773">nombre_carpeta</span> = <span data-scayt_word="propValue" data-scaytid="774">propValue</span>;
  3.  
  4. }

 

En la línea 759 realizamos el procesamiento de los nuevos parámetros

 

  1. if(<span data-scayt_word="nombre_carpeta" data-scaytid="780">nombre_carpeta</span>!=""){
  2. /*************<span data-scayt_word="tratamiento" data-scaytid="837">tratamiento</span> del path*********************/
  3.  
  4. //<span data-scayt_word="comprobamos" data-scaytid="838">comprobamos</span> <span data-scayt_word="si" data-scaytid="790">si</span> <span data-scayt_word="quremos" data-scaytid="839">quremos</span> <span data-scayt_word="buscar" data-scaytid="791">buscar</span> en <span data-scayt_word="subcarpetas" data-scaytid="792">subcarpetas</span>
  5. <span data-scayt_word="var" data-scaytid="793">var</span> sub=0;
  6. if(<span data-scayt_word="nombre_carpeta.charAt" data-scaytid="802">nombre_carpeta.charAt</span>(<span data-scayt_word="nombre_carpeta.length-1" data-scaytid="804">nombre_carpeta.length-1</span>)=="/"){
  7. sub=1;
  8. <span data-scayt_word="nombre_carpeta" data-scaytid="781">nombre_carpeta</span>=<span data-scayt_word="nombre_carpeta.substring" data-scaytid="806">nombre_carpeta.substring</span>(0,<span data-scayt_word="nombre_carpeta.length-1" data-scaytid="805">nombre_carpeta.length-1</span>);
  9. }
  10.  
  11. <span data-scayt_word="var" data-scaytid="794">var</span> array=<span data-scayt_word="nombre_carpeta.split" data-scaytid="809">nombre_carpeta.split</span>("/");
  12. <span data-scayt_word="var" data-scaytid="795">var</span> <span data-scayt_word="ncarpetas" data-scaytid="840">ncarpetas</span>=<span data-scayt_word="array.length" data-scaytid="810">array.length</span>;
  13.  
  14. <span data-scayt_word="var" data-scaytid="796">var</span> <span data-scayt_word="path2" data-scaytid="843">path2</span>="";
  15. if(<span data-scayt_word="ncarpetas" data-scaytid="841">ncarpetas</span>==1){
  16. if(<span data-scayt_word="nombre_carpeta" data-scaytid="782">nombre_carpeta</span>=="<span data-scayt_word="Sitios" data-scaytid="850">Sitios</span>"||<span data-scayt_word="nombre_carpeta" data-scaytid="783">nombre_carpeta</span>=="<span data-scayt_word="sitios" data-scaytid="852">sitios</span>")
  17. <span data-scayt_word="path2" data-scaytid="844">path2</span>="app:company_home//<span data-scayt_word="st" data-scaytid="811">st</span>:sites";
  18. else if(<span data-scayt_word="nombre_carpeta" data-scaytid="784">nombre_carpeta</span>=="<span data-scayt_word="Espacios" data-scaytid="854">Espacios</span> <span data-scayt_word="personales" data-scaytid="856">personales</span> de <span data-scayt_word="usuario" data-scaytid="813">usuario</span>")
  19. <span data-scayt_word="path2" data-scaytid="845">path2</span>="app:company_home//app:user_homes";
  20. else if(<span data-scayt_word="nombre_carpeta" data-scaytid="785">nombre_carpeta</span>=="<span data-scayt_word="Diccionario" data-scaytid="858">Diccionario</span> de <span data-scayt_word="datos" data-scaytid="860">datos</span>")
  21. <span data-scayt_word="path2" data-scaytid="846">path2</span>="app:company_home//app:dictionary";
  22. else if(<span data-scayt_word="nombre_carpeta" data-scaytid="786">nombre_carpeta</span>=="<span data-scayt_word="Espacio" data-scaytid="862">Espacio</span> de <span data-scayt_word="invitado" data-scaytid="864">invitado</span>")
  23. <span data-scayt_word="path2" data-scaytid="847">path2</span>="app:company_home//app:guest_home";
  24. else {
  25. //<span data-scayt_word="quitamos" data-scaytid="815">quitamos</span> los <span data-scayt_word="espacios" data-scaytid="866">espacios</span> y los <span data-scayt_word="sustituimos" data-scaytid="868">sustituimos</span> <span data-scayt_word="por" data-scaytid="817">por</span> <span data-scayt_word="_x0020_" data-scaytid="870">_x0020_</span>
  26.  
  27. <span data-scayt_word="var" data-scaytid="797">var</span> tam=<span data-scayt_word="nombre_carpeta.length" data-scaytid="819">nombre_carpeta.length</span>;
  28.  
  29. for(i=0;i<tam;i++){
  30.  
  31. if(<span data-scayt_word="nombre_carpeta.charAt" data-scaytid="803">nombre_carpeta.charAt</span>(i)==" "){
  32.  
  33. <span data-scayt_word="var" data-scaytid="798">var</span> aux=<span data-scayt_word="nombre_carpeta.substring" data-scaytid="807">nombre_carpeta.substring</span>(0,i);
  34. aux+="<span data-scayt_word="_x0020_" data-scaytid="871">_x0020_</span>";
  35. aux+=<span data-scayt_word="nombre_carpeta.substring" data-scaytid="808">nombre_carpeta.substring</span>(i+1,tam);
  36. <span data-scayt_word="nombre_carpeta" data-scaytid="787">nombre_carpeta</span>=aux;
  37. tam=<span data-scayt_word="nombre_carpeta.length" data-scaytid="820">nombre_carpeta.length</span>;
  38. }
  39. }
  40. //<span data-scayt_word="document.write" data-scaytid="821">document.write</span>(<span data-scayt_word="nombre_carpeta" data-scaytid="788">nombre_carpeta</span>);
  41.  
  42. <span data-scayt_word="path2" data-scaytid="848">path2</span>="app:company_home//cm:"+<span data-scayt_word="nombre_carpeta" data-scaytid="789">nombre_carpeta</span>;
  43. }
  44. path=<span data-scayt_word="path2" data-scaytid="849">path2</span>;
  45.  
  46. }
  47.  
  48. else{
  49. <span data-scayt_word="var" data-scaytid="799">var</span> aux="";
  50. for(i=0;i<<span data-scayt_word="ncarpetas" data-scaytid="842">ncarpetas</span>;i=i+1){
  51.  
  52. if(array[i]=="<span data-scayt_word="Sitios" data-scaytid="851">Sitios</span>" || array[i]=="<span data-scayt_word="sitios" data-scaytid="853">sitios</span>"){
  53.  
  54. aux+="/<span data-scayt_word="st" data-scaytid="812">st</span>:sites";
  55. }
  56. else if(array[i]=="<span data-scayt_word="Espacios" data-scaytid="855">Espacios</span> <span data-scayt_word="personales" data-scaytid="857">personales</span> de <span data-scayt_word="usuario" data-scaytid="814">usuario</span>"){
  57. aux+="/app:user_homes";
  58. }
  59. else if(array[i]=="<span data-scayt_word="Diccionario" data-scaytid="859">Diccionario</span> de <span data-scayt_word="datos" data-scaytid="861">datos</span>"){
  60. aux+="/app:dictionary";
  61.  
  62. }
  63. else if(array[i]=="<span data-scayt_word="Espacio" data-scaytid="863">Espacio</span> de <span data-scayt_word="invitado" data-scaytid="865">invitado</span>"){
  64. aux+="/app:guest_home";
  65.  
  66. }
  67. else{
  68.  
  69. //<span data-scayt_word="quitamos" data-scaytid="816">quitamos</span> los <span data-scayt_word="espacios" data-scaytid="867">espacios</span> y los <span data-scayt_word="sustituimos" data-scaytid="869">sustituimos</span> <span data-scayt_word="por" data-scaytid="818">por</span> <span data-scayt_word="_x0020_" data-scaytid="872">_x0020_</span>
  70.  
  71. <span data-scayt_word="var" data-scaytid="800">var</span> tam=array[i].length;
  72.  
  73. for(j=0;j<tam;j++){
  74.  
  75. if(array[i]<span data-scayt_word=".charAt" data-scaytid="874">.charAt</span>(j)==" "){
  76.  
  77. <span data-scayt_word="var" data-scaytid="801">var</span> <span data-scayt_word="aux2" data-scaytid="875">aux2</span>=array[i]<span data-scayt_word=".substring" data-scaytid="879">.substring</span>(0,j);
  78. <span data-scayt_word="aux2" data-scaytid="876">aux2</span>+="<span data-scayt_word="_x0020_" data-scaytid="873">_x0020_</span>";
  79. <span data-scayt_word="aux2" data-scaytid="877">aux2</span>+=array[i]<span data-scayt_word=".substring" data-scaytid="880">.substring</span>(j+1,tam);
  80. array[i]=<span data-scayt_word="aux2" data-scaytid="878">aux2</span>;
  81. tam=array[i].length;
  82. }
  83. }
  84. aux+="/cm:"+array[i];
  85. }
  86.  
  87.  
  88. }
  89.  
  90.  
  91. path="app:company_home"+aux;
  92. }
  93.  
  94. if(sub==1){
  95. path+="/";
  96. }
  97.  
  98. }

Si guardamos todos los cambios, reiniciamos el servicio y borramos las caches de nuestro navegador la Búsqueda avanzada nos habrá quedado con este aspecto:.


 

Comentarios

Version Alfresco ?

Gracias por esta información. Pero la versión de Alfresco que effecuté estos cambios? una comunidad 3.4.x ó 4.0

Versión Alfresco: 3.4

Hola Jean-Joseph,

La versión sobre la que está implementado es la 3.4 Community. En otras versiones no hemos probado.

De todas formas, como siempre, recomendamos hacer un backup del código antes de realizar cualquier cambio en producción.

Un saludo!

Problema con esta modificación

Hola! Gracias por esta aportación muy interesante y creo que imprescindible en cuanto a la busqueda por tags. Estoy modificando los ficheros tal como indicas pero tengo varios problemas: - Primero me salen los campos "Buscar en carpeta", "Incluir Subcarpetas" y "Seleccionar Carpetas" descolocados en la pantalla de busqueda avanzada.

He probado a modificar la posición del código que hay que insertar en advsearch.get.html.ftl, "jugando" con los tags ""div", pero no logro posicionarlos correctamente. Este problema no es crítico, ya seguiré probando... pero podrías especificar exactamente donde hay que incluir el código?

Cuando dices "Añadimos" ¿significa que lo añadimos al final del fichero? - Luego el otro problema más serio es que ahora en la pantalla de busqueda avanzada, cuando le doy a "Buscar", no pasa nada... ¿Podrías dejar estos ficheros modificados en algún sitio para que pueda comparar con las modificaciones que he hecho? (o mandarmelos por correo electronico)

Muchas gracias por tu respuesta

Problema con esta modificación

Hola, Perdona, puedes olvidar mi último comentario, ya me he aclarado y me funciona la modificación. Muchas gracias de todos modos!

Proyecto

Hola Jesus, segui el tutorial al pie de la letra, sin embargo cuando reinicio el servidor me tira un error de parseo en el archivo share-form-config.xml, diciendo que no puede ir un caracter '<' en el id. Es decir no puede tener porque al parsearlo me lo invalida, de hecho hasta lo intente validar con el esquema fdk desde eclipse y me tiraba el mismo error.
Por cierto no tienes el codigo fuente de esta modificacion empaquetada??
Muchas gracias por todo,
Saludos
Alberto

He seguido el tutorial al pie

He seguido el tutorial al pie de la letra. He conseguido que se vea bien la interfaz y cuando pulso en Seleccionar carpeta aparece el componente de selección de carpetas. Sin embargo al pulsar en el botón aceptar del selector de carpetas la carpeta selecciona no se me escribe en el campo carpeta del formulario del buscador. He revisado varias veces todos los pasos y tengo todo igual que en el tutorial. ¿Alguna idea de que está fallando?

Enviar un comentario nuevo

El contenido de este campo se mantiene privado y no se mostrará públicamente.
  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • Etiquetas HTML permitidas: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Saltos automáticos de líneas y de párrafos.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <pre>, <c>, <cpp>, <csharp>, <css>, <drupal5>, <drupal6>, <html>, <java>, <javascript>, <jquery>, <mysql>, <php>, <python>, <robots>, <ruby>, <sql>, <tsql>, <vb>, <vbnet>, <xml>. The supported tag styles are: <foo>, [foo]. PHP source code can also be enclosed in <?php ... ?> or <% ... %>.

Más información sobre opciones de formato

CAPTCHA
Esta pregunta se hace para comprobar que es usted una persona real e impedir el envío automatizado de mensajes basura.
CAPTCHA de imagen
Escriba los caracteres que se muestran en la imagen.