AnsweredAssumed Answered

Ordenación alfabética de los sitios en Share

Question asked by nemrp on May 11, 2011
Buenas.

Aquí estoy de nuevo para hacer un aporte. Es pequeñito, pero bueno, quizás pueda servirle a alguien. Hay que tener en cuenta que tan sólo lo he probado en Alfresco Share 3.4.0, aunque teniendo en cuenta que los cambios no son bruscos y no se usa nada que no esté fuera de javascript debería funcionar para otras versiones anteriores sin problemas.

Este cambio es visible en la pantalla de "Sitios", accediendo desde el perfil del usuario.

Paso a comentar los pasos a seguir.

  1. Copiar el archivo javascript

  2. Como sabéis, y si no es así lo comento ahora, hay que realizar una copia de los archivos que vamos a modificar y no sobreescribir los existentes en el sitio donde esté desplegada la aplicación. Si se hace así, todo son ventajas.

    Así pues, se copia el archivo "user-sites.get.js", que está en "\webapps\share\WEB-INF\classes\alfresco\site-webscripts\org\alfresco\components\profile\", a la ubicación "\shared\classes\alfresco\web-extension\site-webscripts\org\alfresco\components\profile\". Si esta nueva ubicación nio existe se debe crear.

  3. Idenficar la creación del array de sitios

  4. Al abrir el archivo se observa que el array de sitios se guarda directamente en el objeto "model" (objeto que se devuelve a la plantilla ftl para que ésta tome los datos que van en él). Evidentemente, como se quiere hacer una ordenación previa, hay que modificar este comportamiento. Es decir, antes de que el array de sitios de guarde en el model, hay que tratarlo (ordenarlo) previamente. Así pues, las siguientes líneas deben ser modificadas (en mi caso prefiero comentarlas y escribir bajo ellas las modificaciones).

    // Se comenta la siguiente linea para que sea sustituida por la de mas abajo, para evitar
    // que se guarde directamente el array "sites" en el objeto "model".
    //model.sites = [];
    sites = [];

    // Create javascript objects from the server response
      
    // Se comenta la siguiente linea para que sea sustituida por la de mas abajo, para evitar
    // que se guarde directamente el resultado de la llamada a "eval"en el objeto "model".
    //model.sites = eval('(' + result + ')');
    model.sites = sites;

  5. Ordenación del array de sitios

  6. para ordenar el array de sitios hay que crearse una función (yo lo he hecho al principio del archivo) que se encargue de esta cuestión. De manera, que la función sería como sigue.

    // Funcion que permite ordenar los sitios alfabeticamente.
    function sortByTitle(site1, site2)
    {
       var site1Title = site1.title.toUpperCase();
       var site2Title = site2.title.toUpperCase();
       return (site1Title > site2Title) ? 1 : (site1Title < site2Title) ? -1 : 0;
    }
    NOTA: Se pasan las cadenas de texto a mayúsculas para que la comparación se realice exactamente. Si no se hace así (también se pueden pasar a minúsculas con "toLowerCase") la comparación de títulos de sitios no se realiza correctamente.

    Para ordenar los sitios sólo queda hacer una llamada a esta función. La llamada debe hacerse antes de guardar el array de sitios en el objeto "model" y justo después de obtener dicho array.

    // Se anaden las dos siguientes lineas para obtener el array de sitios y ordenarlos
    // alfabeticamente en funcion del titulo de cada uno de ellos.
    sites = eval('(' + result + ')');
    sites.sort(sortByTitle);
Bien, hasta aquí el "paso a paso" y para aquell@s que quieran ir directamente al código, copiarlo y pegarlo en su archivo lo dejo a continuación. Pero no está de más ver cómo se ha construido, ¿eh? :wink:.

/**
* User Profile Component - User Sites list
*/

// Funcion que permite ordenar los sitios alfabeticamente.
function sortByTitle(site1, site2)
{
   var site1Title = site1.title.toUpperCase();
   var site2Title = site2.title.toUpperCase();
   return (site1Title > site2Title) ? 1 : (site1Title < site2Title) ? -1 : 0;
}

// Call the repo for sites the user is a member of
var userId = page.url.templateArgs["userid"];
if (userId == null)
{
   userId = user.name;
}
var result = remote.call("/api/people/" + encodeURIComponent(userId) + "/sites?size=100");

// Se comenta la siguiente linea para que sea sustituida por la de mas abajo, para evitar
// que se guarde directamente el array "sites" en el objeto "model".
//model.sites = [];
sites = [];

if (result.status == 200)
{
   // Se anaden las dos siguientes lineas para obtener el array de sitios y ordenarlos
   // alfabeticamente en funcion del titulo de cada uno de ellos.
   sites = eval('(' + result + ')');
   sites.sort(sortByTitle);
  
   // Create javascript objects from the server response
  
   // Se comenta la siguiente linea para que sea sustituida por la de mas abajo, para evitar
   // que se guarde directamente el resultado de la llamada a "eval"en el objeto "model".
   //model.sites = eval('(' + result + ')');
   model.sites = sites;
}
model.numSites = model.sites.length;
Un saludo.

Outcomes