{{tag>dokuwiki wiki plugins pagequery}}
== Adaptation du plugin Pagequery ==
Ce plugin très puissant permet de créer et d'afficher de manière esthétique et hautement configurable une liste de pages basée sur une requête plus ou moins complexe.
Bon la syntaxe et la pléthore d'options possibles font un peu peur 8-O.\\
Voici la syntaxe utilisée pour l'index sur la page d'accueil de ce wiki :
{{pagequery>*;
sort=ns:asc,name:asc;
display={title};
group;
cols=5;
border;
snippet;
hidejump;
bullet=square;
layout=column;
filter=!ns:(user);
}}
Le paramètre ''display'' n'est pas très bien documenté sur la page officielle du plugin. Il récupère les métadonnées des pages et voici [[doku>devel:metadataune liste de ce qui existe]].
Et une autre pour un espace de nom spécifié (cette fois basé sur les noms des pages et pas leur titre) :
{{pagequery>@:espace:de:nom *;
sort=ns:asc,name:asc;
group;
cols=5;
proper;
border;
snippet=quote,5,c20;
hidejump;
bullet=square;
layout=column;
}}
Ne sachant pas comment //Pagequery// gère les droits d'accès, il me semble judicieux de cacher l'espace de nom //user//, d'où le dernier commutateur.
Et voici un exemple du résultat avec le code initial :
{{ info:logiciels:doku:plugins:pagequery_example.jpg?nolink |}}
Mouais :-/.\\
Pas terrible avec tous ces liens ''Accueil'' qui se baladent un peu partout lorsque le lien de l'espace de nom pointe sur cette même page.\\
//Pagequery// propose un commutateur fait justement pour cela: //hidestart//. Mais le résultat est **très loin** d'être satisfaisant :
{{ info:logiciels:doku:plugins:pagequery_hidestart.jpg?nolink |}}
Revoici le premier exemple avec ce qui a été supprimé (à raison ou à tord) :
{{ info:logiciels:doku:plugins:pagequery_hidestart_suppressions.jpg?nolink |}}
À mon humble avis :
* si la racine du wiki (''[accueil]'') est incluse dans la requête, elle devrait toujours être présente (éventuellement masquée par un hypothétique commutateur //hideroot//) **et** être un lien vers la page d'accueil du wiki
* les espaces de nom qui ne contienne qu'une page d'accueil ne devraient pas être supprimés.
Donc, en l'état actuel (version du 09/11/2014), le commutateur ''hidestart'' est inutilisable et il faut donc bidouiller le code :-|.
====== La bidouille ======
Sur un wiki très fourni, cette bidouille va beaucoup ralentir le chargement de la page car il s'agit de passer en revue tous les éléments de la requête //Pagequery//.
Il faut modifier le fichier ''syntax.php'' du plugin en ajoutant sous la ligne suivante (actuellement n°317) :
$sorted_results = $pq->mgroup($sort_array, $keys, $group_opts);
Ceci :
// Bidouille
$prevpagetarget = "nopagetestedyet";
// Pour chaque élément récolté par la requête
foreach ($sorted_results as $key => $page) {
// Noter le lien sur lequel pointe l'élément en court
$newpagetarget = $page[2];
// Eléments de comparaison
$startns = array (1, "[".$conf['start']."]", "", "", "", "");
$userns = array (1, "user", "", "", "", "");
// Si l'élément en court est identique à $startns
if ($page == $startns) {
// Lien à intégrer
$newpagetarget = $conf['start'];
// Intégration du lien
$sorted_results[$key] = array (1, "[".$conf['start']."]", $newpagetarget, "", "", "");
// Si le lien de l'élément en court est identique = celui de l'élément précédent
} elseif (($newpagetarget == $prevpagetarget) or ($page == $userns)) {
// suppression de l'élément en court
unset($sorted_results[$key]);
}
// Le lien de l'élément en court deviens le prochain lien précédent
$prevpagetarget = $newpagetarget;
}
Et le tour est joué :
{{ info:logiciels:doku:plugins:pagequery_resultat_bidouille.jpg?nolink |}}
====== [hidepages] : DokuWiki à la rescousse ======
Dans le cas plus simples où il suffit d'exclure un espace de nom ou un nom de page précis (comme les pages ''topbar.txt'' ou ''sidebar.txt''), il est plus simple de se reposer sur l'option générale //[hidepages]// qui est justement prévue pour masquer des éléments correspondants à une //expression régulière// aux plugins conçus pour générer des listes de pages.
**Pourquoi ne pas procéder ainsi pour l'espace '':user'' ?**\\
Si l'on utilise cette possibilité, aucun plugin ne pourra plus lister le contenu de cet espace de nom ou de ces sous espaces, même en le désignant comme cible dans la syntaxe.
Voici les pages à exclure ici :
{{ info:logiciels:doku:plugins:pagequery_hidepages.jpg?nolink |}}
Donc :
* toutes les pages dont le nom est //topbar//
* toutes les pages de l'espace //:tag// (normalement, cet espace de nom virtuel utilisé par le [[doku>plugin:tag]] ne contiens aucune page mais tout n'est pas toujours normal sur ce wiki 0-8).
Je suis loin d'être à l'aise avec les expression régulière mais celle-ci était à ma portée :
topbar$|^:tag:
Et voici le résultat :
{{ info:logiciels:doku:plugins:pagequery_resultat_final.jpg?nolink |}}