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 .
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 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 :
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 :
Revoici le premier exemple avec ce qui a été supprimé (<color blue>à raison</color> ou <color red>à tord</color>) :
À mon humble avis :
[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
Donc, en l'état actuel (version du 09/11/2014), le commutateur hidestart
est inutilisable et il faut donc bidouiller le code .
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é :
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 :
Donc :
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 :