Ceci est une ancienne révision du document !
Index et recherche de pages
Traduction à terminer
La gestion des index et recherche de pages se fait grâce au plugin pagequery : il s'agit d'un outil de navigation polyvalent pour créer des pages d'index, faire des recherches ou des filtres sur du texte ou des noms de page, et afficher les résultats en colonnes, regroupés, triés. Il propose même des info-bulles pour prévisualiser le contenu.
Comme pagequery a fait un usage éhonté des excellentes fonctions disponibles dans DokuWiki (en particulier search), il n'y a pas de nouvelle syntaxe à apprendre. Mais il apporte un petit quelque chose dans l'arrangement des puissantes options de tri et de regroupement.
Quelques utilisations possibles :
- Faire la liste de toutes les pages de votre wiki dans un bel index alphabétique, ou par année/mois
- Faire une liste des pages récemment modifiées
- Faire la liste des pages qui discutent d'un sujet particulier (grâce à la recherche dans le texte)
- Faire la liste des pages créées par un utilisateur donné
Syntaxe et utilisation
Insérer la mention pageguery dans le texte de la page là où vous voulez que la page apparaisse. Vous pouvez avoir différentes listes pagequery dans la même page1).
Il peut s'agir de la version simple :
{{pagequery>}}
Ou, plus compliqué :
{{pagequery>[query];fulltext;sort=key:direction,key2:direction;group;limit=10;cols=2;spelldate;proper}}
Ou alors à l'ancienne, et vraiment trop compliqué… :
{{pagequery>[query];fulltext;sort=key:direction,key2:direction;group;limit=100;cols=6;spelldate;proper;snippet=5;border=inside;hidestart;case;natsort}}
Remarque : la syntaxe peut être affichée sur plusieurs lignes pour améliorer la lisibilité. Les espaces sont tout simplement ignorés. Par exemple :
{{pagequery>query;
fulltext;
sort=key:direction,key2:direction;
group;
limit=100;
cols=6;
spelldate;
proper;
border=inside;
hidestart;
case;
natsort
}}
La règle générale est que les options sont séparées par des points-virgules (;), les valeurs (par exemple dans un tri ou un filtre) sont séparées par une virgule (,), et les valeurs multi-parties par deux points (:).
Tableau de la syntaxe complexe
| Option | Description | Exemples de syntaxe | Valeur par défaut |
|---|---|---|---|
| query | Place l'expression de recherche immédiatement après le >, par exemple {{ pagequery>help;... }} Par défaut, il cherche seulement dans les noms de pages (ou les identifiants). Pour faire une recherche dans le contenu des pages du wiki, utiliser l'option fulltext ci-dessous | * help test | toutes les pages |
| Vous pouvez utiliser des expressions régulières2) dans les recherches de nom de page. Pour voir toutes les pages, utiliser * ou .* , ou laissez le simplement à blanc.3) | ^p.+ [mots commençants par p] | ||
Note : * en lui-même est juste une commodité. Dans n'importe quelle autre regex, il vous faudra suivre les règles de la regex. |
|||
| namespaces | La recherche sur les noms de page accepte les mêmes options d'espaces de noms que la recherche dans le texte, c'est-à-dire : ^ ou -ns: signifie exclure, @ ou ns: signifie inclure | ^:work @:home:games * | rien |
| Les espaces de noms relatifs (.) et parent (..) sont aussi compatibles4) | |||
Note : si vous utilisez l'option namespace, il vous faudra également fournir une requête de nom de page (au minimum *), parce que, par exemple, la fonction regex ne peut pas distinguer ^work (espace de nom) et ^work (noms de pages commençant par “work”) |
|||
| fulltext | Utilise une recherche sur tout le texte, ce qui autorise toutes les options de recherche DokuWiki. Cette option vous permet de faire tout un tas de recherches compliquées : reportez vous à la page :search pour plus de détails | fulltext | |
| fullregex | Vous permet de faire une recherche sur l'identifiant complet de la page (c'est-à-dire y compris son espace de nom) à l'aide d'expressions régulières. C'est un mode brut pour utilisateurs avancés… mais ça ne fonctionne que sur les identifiants de page. | fullregex | |
| sort | Clés à utiliser pour le tri, par ordre d'application dans le tri. Chaque clé peut être suivie par un ordre de tri préféré, sort=key:direction,key2:direction | sort=a:asc,name:asc sort=cyear,cmonth,name | rien |
| Clés de tri : | |||
| a, ab, abc | Par 1ère lettre, 2 premières lettres ou 3 premières lettres | sort=a sort=ab | |
| name, pagename | Par nom de page5) [non groupé] | sort=name | |
| title, heading | Par titre de page (ou première ligne d'en-tête) [non groupé] | sort=title:desc | |
| id, pageid | Par identifiant complet de page, y compris l'espace de nom [non groupé] | sort=id:asc | |
| ns | Par espace de nom (sans nom de page) | sort=ns | |
| mdate, cdate | Par date de création/modification (complète) [non groupé] | sort=mdate | |
| m[year][month][day] | Par [année][mois][jour] de [m]odification; toutes les combinaisons sont acceptées | sort=myearmonthday sort=mmonthday | |
| c[year][month][day] | Par [année][mois][jour] de [c]réation; toutes les combinaisons sont acceptées | sort=cyearmonthday | |
| creator | Par auteur de page | sort=creator | |
| contributor | Par contributeur(s) à la page. Note : seul le prénom affecte l'ordre de tri6) | sort=contributor:asc | |
| links | Par une liste des liens présents dans cette page (essentiellement pour le filtrage). Les noms (ou identifiants) de toutes les pages liées sont jointes dans une chaîne séparée par des espaces, qui peut être analysée par regex dans l'option filter ci-dessous. |
||
| backlinks | Par une liste des rétro-liens pointant sur cette, ou ces, page(s). A utiliser comme link ci-dessus. |
||
| Sens de tri : | |||
| asc, a | Ordre ascendant, c'est-à-dire a → z, 1 → 10 | sort=name:asc | asc |
| desc, d | Ordre décroissant, c'est-à-dire z → a, 10 → 1 | sort=mdate:desc | |
| Note : par défaut, les dates sont triées par ordre décroissant (les dates les plus récentes en haut), et les textes par ordre ascendant (A - Z) | |||
| filter | Filtre la liste de résultats par n'importe laquelle des clés de tris ci-dessus, à l'aide d'expressions régulière pour inclure ou exclure certaines pages | ||
| include | La syntaxe est identique à celle du sort ci-dessus : filter=<key>:<expression>,<key2>:<expression2> | filter=creator:harry filter=contrib:.*(harry|sally).* |
|
| exclude | Pour exclure des pages des résultats, mettre un ^ ou un ! devant la clé : filter=!<key>:<expression> | filter=!creator:harry |
|
| dates | filter= l'option reconnait désormais les dates réelles et vous permet de les filtrer correctement. Par exemple : filter=cdate:3 years ago->3 months ago |
||
| Une date de début et/ou de fin peut être donnée, séparée par le symbole flèche ->. Ceci utilise la fonction PHP strtotime qui accepte une grande variété de formats, se reporter aux fonctions php de date pour plus d'information. | |||
| Depuis une date donnée jusqu'à maintenant | filter=mdate:24.1.2009-> |
||
| Seulement jusqu'à une date donnée | filter=mdate:->24.12.2012 |
||
| Seulement les trois derniers mois | filter=mdate:3 months ago-> |
||
| group | Affiche un en-tête de groupe pour chaque changement dans la clé de tri.7) | group | non groupé |
| Par exemple, si vous avez trié par [myear] (c'est-à-dire année de modification) alors l'entête du groupe sera inséré à chaque fois que l'année change (2010…2009…2008…etc…) |
|||
Les espaces de noms sont groupés par tous les sous-espaces de noms jusqu'à la limite maxns8) |
|||
| Note : les clés qui sont toutes uniques ne peuvent pas être groupées (c'est-à-dire les noms, les identifiants de page, la date de modification (mdate) ou de création(cdate) ) | |||
| limit | Nombre maximum de résultats à ramener. 0 = ramener tout (défaut) | limit=10 | tout |
| spelldate | Utilise le vrai nom du mois ou du jour à la place de dates numériques.9) | spelldate | dates numériques |
| cols | Nombre de colonnes dans la liste affichée (max = 6) | cols=3 | 1 |
| proper | Affiche les noms des pages et/ou les espaces de noms avec la casse correcte (c'est-à-dire une majuscule à chaque mot et pas de _'s)10). | rien | |
| name | Affiche les noms de page dans la casse correcte | proper=name | |
| header | Affiche les en-têtes de groupe dans la casse correcte | proper=header proper=hdr | |
| both | Les deux options ci-dessus ! | proper=both proper | |
Note : ceci est différent de l'option UseHeading dans DokuWiki et de nombreux autres plugins (voir l'option display ci-dessous) |
|||
| border | Affiche une bordure autour des colonnes du tableau | rien | |
| none | N'affiche aucune bordure (défaut) | border=none | |
| inside | Affiche des bordures seulement entre les colonnes | border=inside | |
| outside | Affiche une bordure autour de tout le tableau pagequery | border=outside | |
| both | Affiche des bordures à la fois autour du tableau et des colonnes | border=both border | |
| hidestart | Ignore toutes les pages start par défaut dans les espaces de nom. | hidestart | montres les pages start |
| Note : les pages start doivent être nommées en accord avec les paramètres de votre configuration pour que cette option fonctionne correctement ! | |||
| display | Comment afficher les liens des pages. Par exemple, vous pouvez afficher juste le nom de la page, le titre de la page, l'identifiant de la page, la date de la page, ou toute autre combinaison des méta-données de la page. | ||
| L'option display= accepte les chaînes de remplacement de style-modèle | display={name} ({cdate}) “Name-of-page (20 Jan 2013)” |
||
| Note : tous les noms de méta-données doivent être entre accolades {}, ou ils seront considérés comme de simples mots ! | |||
| Tous les champs de méta-données de DokuWiki sont acceptés, plus toute méta-colonne pagequery en cours d'utilisation. Pour utiliser les méta-données imbriquées de DokuWiki, utiliser key:subkey. | display={date:created} {title} |
||
| Voir les métadonnées pour une liste des noms de champ que vous pouvez utiliser. | |||
| snippet | Contrôle comment la page de coupures (aperçu) est affichée : | tooltip | |
| tooltip | Comme un pop-up/une info-bulle sur le lien de chaque page | snippet=tooltip snippet | |
| Les trois prochaines options utilisent la syntaxe suivante : <format>,<count>,<extent> | |||
| <format>: l'un des formats listés ci-dessous : inline, plain, quoted | |||
| <count>: pour afficher les premiers <count> objets dans la liste avec un aperçu | tout | ||
| <extent>: peut être un choix entre les [c]aractères, [w]mots, [l]inges, ou [~]<s'arrêter à> par exemple : c? = ? caractères, w? = ? wmots, l? = ? lignes, ~? = chercher jusqu'au caractère/texte/symbole ? | tout | ||
| inline | show in-line with the link | snippet=inline,5,c20 | |
| plain | show as simple text below the link (mimimal formatting) | snippet=plain,10,w30 | |
| quoted | show in tidy quotation box | snippet=quoted,3,l3 | |
| maxns | The number of namespace levels to display. | show all | |
| Display no more than 3 namespace levels, e.g. one:two:three | maxns=3 | ||
maxns=0 ⇒ show all levels (default) | |||
| case | Honour case when sorting, i.e. a..z then A..Z | case | case insensitive |
| natsort | Use PHP's natural sorting functions, e.g. 1,2,10,12 rather than 1,10,12,2 | natsort | normal sorting |
| underline | show a faint underline between each link for clarity | underline | none |
| label | A label to be displayed at the top of the PageQuery list | label=A-Z of All Pages | nothing |
| hidemsg | Hide any empty result messages | hidemsg | visible |
| hidejump | Hide the “Jump To Top” link | hidejump | visible |
| showcount | Show the total count of page links at bottom of list | showcount | hidden |
| layout | choose between table or column layout table: based on html table, compatible with most browsers column: uses new CSS3 column-layout feature, doesn't work in older browsers11) | layout=column | layout=table |
| fontsize | Set the base font size for the pagequery list. You can use any CSS size unit, e.g. 12px, 1.2em, 80%, etc… | fontsize=80% | 90% |
| bullet | Bullet style for list items (links) Choose from none, disc, circle, or square | bullet=square | none |
| Note: All options are optional, and left to its own devices the plugin will default to a long, boring, 1-column list… so you might want to take charge! |
|||
Sorting and Grouping
A few pointers about sorting and grouping successfully. Pagequery offers many sorting options, most of which are designed to be grouped. So if you intend to group your list by its main headers then it makes the most sense to sort from the broadest category to the narrowest.
For example: year ⇒ month ⇒ name. The sorting algorithm will first sort the list of pages by year, then the pages within each year will be sorted by month, and finally the pages within each month will be sorted by name. Sorting the other way around would not make much sense, as all names are unique: hence there would be nothing to “group”!
If you grouped the above sort it would result in the following arrangement:
- Year
- Month
- Name
- Name
- Month2
- Name
- Name
- etc…
The basic rule is: start with the least specific and work your way to the most specific options.
FAQ and Tips
I've added new pages but they do not show up in my nice new pagequery list. Why?
- You need to turn off page caching for the page containing the list. Put
~~NOCACHE~~
somewhere on the page and you should then see instant updates.
I have many default 'start' pages in my wiki and I don't want to see them when I list the contents of namespaces; how can I make them disappear?
- Just add the
hidestartoption. Make sure that the start option in your configuration corresponds to the start page name you are using!
I would much rather see the page title instead of the page name. How can I enable that?
- Put the
display=titleoption somewhere in your pagequery markup
After migrating my wiki contents to a new dokuwiki version, pagequery doesn't list any pages. Only after editing the pages, they show up in pagequery again.
- Use the SearchIndex plugin to rebuild the index of your wiki, or make sure that you copy over the indexes as well as the content. This problem has nothing to do with pagequery itself.
Examples
For example, if you want to list all the pages in a certain namespace by A-Z, the following should do the trick:
{{pagequery>@namespace;fulltext;sort=a,name;group}} [fulltext version]
Or:
{{pagequery>@namespace *;sort=a,name;group;proper;cols=2}} [pagename version: allows regex's]
This would retrieve results from @namespace only (as there is no other search query you would get all the pages), and the list would be sorted by the first letter ('sort=a') then alphabetically ('sort=name') within each letter. The group option will then cause the list to be grouped by the first letter only (you cannot group by name as each one is unique).
If you wanted to see the results in 3 columns and to have the links in “Sentence Case” with no underscores, then add this:
{{pagequery>@namespace *;sort=a,name;group;cols=3;proper}}
Another example, grouping by year created, then month created, then by name, in 2 columns, and displaying the real month name, plus having the links in “Sentence Case” with no underscores, and to top it off: a border around the table columns:
{{pagequery>@namespace *;sort=cyear,cmonth,name;group;spelldate;proper;cols=2;border}}
The same query, but now searching for pages contenting the word “help” (NOTE: fulltext means search in the page “content” not just its “name”:
{{pagequery>@namespace help;fulltext;sort=cyear,cmonth,name;group;spelldate;proper;cols=2}}
Update: Namespaces are now supported when searching by pagename (pageid) only. Use the same syntax as fulltext search, i.e. @namespace|^namespace. I haven't provide support for relative namespaces yet. In addition, you can use regular expressions when searching by pagename.
E.g. Search for all pages in the “drafts” namespace, listing only files beginning with a number, sorted by name:
{{pagequery>@drafts [0-9]+.*;sort=name}}
Or, all files in the “happy:go:lucky” namespace, sorted by year, then date created, in proper case, in 2 columns, and display the page's title, not the name in the listing:
{{pagequery>@happy:go:lucky *;sort=cyear,cdate;group;proper;display={title};cols=2}}
Hopefully these examples will help to understand the workings of pagequery.
filter ci-dessous




