Forum Ametys

Forum de la communauté Ametys

You are not logged in.

#1 10/11/2016 16:23:03

APitrou
Guest
Registered: 22/06/2016
Posts: 44

[Résolu] Pagination de la page search

Bonjour,
y a t'il un moyen d'augmenter le nombre de résultats par page (limité à 50) lorsque l'on utilise l'outil search ?

Bonne journée

Last edited by APitrou (28/03/2017 16:02:54)

Offline

#2 10/11/2016 18:39:38

Laurence Aumeunier
Expert Team
Registered: 10/08/2010
Posts: 154

Re: [Résolu] Pagination de la page search

Bonjour,

C'est possible mais pas simplement ...
Cela nécessite de créer un plugin dans votre application, d'y définir votre propre outil de recherche (en copiant celui défini par défaut) dans le fichier plugin.xml, de le configurer avec un nombre de résultat par page de 100 (par exemple), de définir ensuite un bouton qui ouvre votre outil de recherche (toujours dans plugin.xml) et enfin de déclarer l'utilisatiion de votre bouton à la place de celui par défaut (fichier WEB-INF/param/cms-ribbon.xml).

Si vous pensez que ca en vaut la peine, je peux détailler.


Laurence Aumeunier
Ametys Expert

Offline

#3 10/11/2016 18:55:50

APitrou
Guest
Registered: 22/06/2016
Posts: 44

Re: [Résolu] Pagination de la page search

Merci de votre réponse.

Oui, car je travaille actuellement au sein de l'université du Maine pour harmoniser toutes les instances d'Ametys.
Et lors de mes fusions d'une ancienne instance en 3.3, j'ai découvert au sein d'un site une duplication d'une page du à un bug de copier /coller ce qui à créer des milliers de pages et 38000 contenu (survenu en 2014).

J'ai réussit à supprimer non sans mal les pages dans le repository JCR mais cela m'a laissé 38000 contenus orphelin sur les bras.

Donc les supprimer 50 par 50 est fastidieux et me prendra plus de 2 jours de travail complet. Alors que si je peux monter le chiffre en pagination tout en augmentant les ressources de mon serveur allouer à l'application, je vais pouvoir le nettoyer très rapidement.

Cela m'évitera 2 jours de travail temps plein.

Lundi je me penche sur la duplication du plugin et son paramétrage et cela sera un acquis pour plus tard.

Bon week end.

Last edited by APitrou (10/11/2016 18:57:32)

Offline

#4 10/11/2016 19:12:05

Raphaël Franchet
Expert Team
From: Toulouse
Registered: 10/08/2010
Posts: 1,111

Re: [Résolu] Pagination de la page search

de mémoire, si c'est juste temporaire, il y a possibilité de taper une commande dans la console javascript pour augmenter la variable en question

mais bon, si vous avez 38000 contenus orphelin à supprimer, peut être faut il plutôt écrire un script JCR ???


Raphael Franchet
Expert Ametys

Offline

#5 10/11/2016 19:17:42

Raphaël Franchet
Expert Team
From: Toulouse
Registered: 10/08/2010
Posts: 1,111

Re: [Résolu] Pagination de la page search

Pour la version "facile", lancez le CMS, ouvrez la console javascript de votre navigateur et tapez

org.ametys.cms.tool.search.SearchTool.prototype.PAGE_SIZE = 200

puis ouvrez l'outil de recherche : il renvoie désormais les résultats 200 par 200

Mais je vous recommande chaudement d'explorer la voie du script JCR...


Raphael Franchet
Expert Ametys

Offline

#6 10/11/2016 19:50:19

Laurence Aumeunier
Expert Team
Registered: 10/08/2010
Posts: 154

Re: [Résolu] Pagination de la page search

Voici un exemple de script JCR à exécuter dans la console JCR pour supprimer tous les contenus orphelins.

A manipuler avec précaution !
Attention à bien cibler les contenus à supprimer. Dans ce script par exemple je ne cible que le contenu de type Article.
Si vous avez 38000 contenus l'exécution du script va être trop longue, je vous conseille de les supprimer 100 par 100 dans un premier temps et d'éventuellement augmenter le max si ca se passe bien.
Je vous conseille également d'exécuter ce script d'abord en laissant l'instruction "deleteContent" (ligne 36) commentée, puis de la décommenter quand vous serez sûr de supprimer les bons contenus.

var qm = session.getWorkspace().getQueryManager();

function isOrphan(contentId)
{
  var query = qm.createQuery("//element(*, ametys:zoneItem)[@ametys-internal:content='" + contentId + "']", javax.jcr.query.Query.XPATH);
  var nodes = query.execute().getNodes();
  return !nodes.hasNext();
}

function deleteContent (content)
{
  if (content.hasProperty("ametys-internal:workflowRef"))
  {
      var workflowNode = content.getProperty("ametys-internal:workflowRef").getNode();
      workflowNode.remove();
  }
  content.remove();
  session.save();
}

// Recherche des Article
var contentType = "org.ametys.web.default.Content.article";
var query = qm.createQuery("//element(*, ametys:content)[@ametys-internal:contentType='" + contentType + "']", javax.jcr.query.Query.XPATH);

var nodes = query.execute().getNodes();

var count = 0;
var max = 100;
while(nodes.hasNext() && count < max)
{
    var content = nodes.next();
    if (isOrphan(content.getUUID()))
    {
        var title = content.getProperty('ametys:title').getString();
        var lang = content.getProperty('ametys-internal:language').getString();
        var site = "no site";
        if (content.hasProperty("ametys:site"))
        {
            site = content.getProperty('ametys:site').getString();
        }
        println ("Suppression du contenu " + title + "(" + lang + " - " + site + ")");
        // A décommenter quand on est sur !
        // deleteContent(content);
        count++;
    }
}

println (count + " contenus supprimés");

Laurence Aumeunier
Ametys Expert

Offline

#7 14/11/2016 15:42:35

APitrou
Guest
Registered: 22/06/2016
Posts: 44

Re: [Résolu] Pagination de la page search

Merci beaucoup pour vos conseils et vos scripts.
J'ai testé l'astuce org.ametys.cms.tool.search.SearchTool.prototype.PAGE_SIZE = 200 qui est pas mal mais qui met autant de temps que faire la manipulation 4 fois, l'avantage est la répétition et de pouvoir faire autre chose pendant ce temps là.

Pour le script, cela fonctionne très très bien, j'ai même poussé le vice à supprimer 20 000 par 20 000 sans problèmes (le site voisin avait lui 68 000 contenu dupliqué....)

Encore merci, vous m'avez sauvé de nombreuses heures de nettoyage !!!  big_smile  Je vais pouvoir enfin les mettre à jour puis fusionné sur mon repository principal.

Offline

Board footer

Powered by FluxBB