Extension:Page Forms/Formulaires de page et modèles
Page Forms est en son cœur, un système pour modifier les appels de modèle dans les pages wiki. (Bien qu'on puisse aussi modifier des sections de pages). Voir Modèles pour une explication complète des modèles dans MediaWiki.
Pourquoi Page Forms prend-il en charge la modification des modèles et des sections de pages, mais pas, disons, les balises de catégories de forme libre dans les pages ? C'est parce que la philosophie de Page Forms est que toutes les données vraies de MediaWiki - y compris les données mêmes, les informations de catégorie et autres - doivent être stockées dans des modèles. Ceci pour plusieurs raisons :
- Les modèles expliquent clairement quelles informations appartiennent à quelles pages, et évitent les ambiguïtés sur la structure des données
- Les modèles masquent la syntaxe complexe impliquée dans l'affichage et le stockage des informations, ce qui facilite l'édition
- Les modèles permettent de modifier plus facilement la structure et l'affichage, car un changement sur un grand nombre de pages peut potentiellement être centralisé en un seul endroit, sans la nécessité de modifier partout.
Page Forms fournit un certain nombre de fonctionnalités qui aident spécifiquement à la création et à l'affichage des modèles, sans lien avec l'édition de formulaires.
Ils sont tous décrits sur cette page.
Il n'y a aucune raison technique pour que toutes ces fonctionnalités soient définies dans Page Forms ; théoriquement, #arraymap
et #arraymaptemplate
pourraient être ajoutés à l'extension ParserFunctions , ou peut-être que toutes les fonctionnalités devraient entrer dans une nouvelle extension.
Il y a certainement un argument de commodité si on les garde dans Page Forms .
En tout cas, il n'est pas envisagé actuellement de les déplacer.
Simplification de l'affichage du modèle
Page Forms définit deux fonctions d'analyse syntaxique, #template_params
et #template_display
, qui ensemble peuvent considérablement simplifier le code nécessaire à l'affichage d'un appel de modèle - et peuvent également simplifier la définition de tous les formulaires qui utilisent un tel modèle.
#template_params
La fonction #template_params
doit être placée dans la balise <noinclude>
d'un modèle.
Elle contient les paramètres attendus pour ce modèle, ainsi que les détails supplémentaires pour chacun d'eux.
Un exemple d'appel de cette fonction pour un modèle appelé "Recipe", est :
{{#template_params:
Cuisine
|Cooking time (label=Temps de cuisson (en minutes);display=nonempty)
|Ingredients (holds template=Recipe ingredient)
|Instructions (display=nonempty)
}}
Les détails autorisés (on pourrait les appeler « paramètres de paramètres ») sont :
label
- spécifie le texte qui doit être utilisé pour étiqueter la valeur de ce paramètre, tant sur les pages que sur les formulaires. Si aucune étiquette n'est définie, le nom du paramètre est utilisé comme étiquette.display
- s'il vautnonempty
, le paramètre n'est affiché que si sa valeur n'est pas vide.holds template
- spécifie que ce paramètre est destiné à contenir une série d'appels de modèle (c'est-à-dire un modèle à plusieurs instances).cargo field
- si l'extension Cargo est installée, il spécifie le champ de la table Cargo du modèle auquel ce paramètre correspond. Si ce paramètre n'est pas initialisé, le code cherche un champ de même nom que celui du paramètre.
L'ajout d'un appel de #template_params
à un modèle aide de la manière suivante :
- La fonction affiche la liste des paramètres de manière bien formatée sur la page du modèle.
- Ces informations aident à l'affichage du modèle (voir la section suivante).
- Certaines de ces informations sont également utilisées par les formulaires, ce qui simplifie la définition des formulaires.
#template_display
La fonction #template_display
doit être placée dans la balise <includeonly>
d'un modèle.
Elle gère l'affichage pour l'appel du modèle.
Dans de nombreux cas, à condition que #template_params
ait été appelé, le #template_display
peut être assez simple.
Pour un modèle avec l'appel #template_params
ci-dessus, par exemple, l'appel de #template_display
pourrait simplement ressembler à :
{{#template_display:}}
Si, d'autre part, il n'y a pas d'appel à #template_params
, alors l'appel de #template_display
doit ressembler à :
{{#template_display:
Cuisine={{{Cuisine|}}}
|Cooking time={{{Cooking time|}}}
|Ingredients={{{Ingredients|}}}
|Instructions={{{Instructions|}}}
}}
Mais cela n'est pas recommandé.
Il y a deux paramètres prédéfinis que #template_display
peut avoir :
_format
- spécifie le format dans lequel l'affichage doit être fait; les options sontinfobox
(par défaut),table
,sections
ettext
.infobox
affiche une boîte d'information (infobox) sur le côté droit de la page, à la manière de Wikipedia;table
affiche une table qui couvre toute la page;sections
donne à chaque paramètre le nom d'un entête de section, avec la valeur en dessous de celle-ci; ettext
affiche toutes les données du modèle en texte, avec le noms des paramètres en gras._title
- specifies the title that should go at the top of the box, if the default infobox format is used. If set to empty, no title row is shown. (By default, the title is the name of the page, or the page's display title if one is specified.)
Pour afficher toutes les données sous forme de table de page complète, il vous suffit d'appeler :
{{#template_display:_format=table}}
Valeur multiple pour le même champ
Page Forms définit également les fonctions d'analyseur #arraymap
et #arraymaptemplate
, qui fournissent un support pour avoir plusieurs valeurs pour un seul champ, délimitées par une virgule ou un autre caractère.
Ces fonctions d'analyse associent un certain traitement de texte à chaque valeur.
Cela peut être aussi simple que de transformer chaque valeur en lien, bien qu'il puisse y avoir un traitement plus complexe, comme transformer chaque valeur en une balise de catégorie, une balise d'image, une balise de propriété Semantic MediaWiki, etc.
#arraymap
et #arraymaptemplate
peuvent également être utilisés en dehors d'un contexte de modèle, bien que cette page ne couvre pas vraiment cet usage.
#arraymap
L'appel générique pour cette fonction est :
{{#arraymap:valeur | délimiteur | variable | formule | nouveau_délimiteur | conjonction}}
La fonction sépare la valeur par le délimiteur puis, pour chacun, applique le même mappage que formule fait sur variable, puis relie toutes les valeurs en utilisant nouveau_delimiteur - sauf pour la valeur finale, qui est jointe par conjonction s'il est défini.
Par exemple: si vous avez un formulaire qui remplit le champ 'Authors'
, et que vous voulez que les valeurs de ce champ soient séparées par des virgules et que chacune soit un lien, vous pouvez écrire ce qui suit dans le modèle :
{{#arraymap:{{{Authors|}}}|,|x|[[x]]}}
Cette fonction mappe principalement une syntaxe de lien sur chaque valeur délimitée par les virgules dans le champ.
(S'ils ne sont pas définis, le paramètre délimiteur vaut par défaut ,
et nouveau_délimiteur vaut par défaut ,
; notez l'espace supplémentaire).
L'utilisateur peut ainsi saisir toutes les valeurs sur la même ligne, avec ou sans espaces autour des virgules.
(Notez, au fait, que le x
est utilisé ici comme une variable interne; toute autre chaîne pourrait être utilisée aussi bien, comme @@@@
).
Le paramètre 'nouveau_délimiteur' est particulièrement utile si aucune des valeurs résultantes n'est actuellement affichée, car par défaut ceci ne serait rendu que comme une suite de virgules. Un exemple commun est que la valeur originale contient une liste de noms de catégories, et que chaque nom est transformé en une balise de catégorie, mais n'est pas réellement affiché.
Pour éviter d'afficher des virgules dans ce cas, vous devez définir la valeur nouveau_délimiteur égale à une espace.
Utiliser seulement |
à la fin ne fonctionnera pas, parce que l'analyseur de MediaWiki va l'ignorer - au lieu de cela, l'approche la plus simple est d'utiliser \s
, qui est traduit par une espace.
Voici comment on pourrait appeler une telle chose :
{{#arraymap:{{{Categories|}}}|,|x|[[Category:x]]|\s}}
Vous pouvez faire ressembler davantage la sortie au langage naturel en incluant une valeur de conjonction pour le délimiteur final, de sorte que la sortie ressemble par exemple à A, B and C
, au lieu de A, B, C
seulement.
Voici un exemple pour le faire :
{{#arraymap:{{{Authors|}}}|,|x|[[x]]|, <nowiki />|and}}
Si vous utilisez les pages 'CreateTemplate' ou 'CreateClass' pour créer un modèle, et que vous spécifiez qu'un champ peut prendre plus d'une valeur, alors un appel de #arraymap
sera automatiquement ajouté au modèle généré.
#arraymaptemplate
Il existe quelques types de cartographie assez complexes pour ne pas être placés dans la fonction #arraymap
.
Pour cela, vous pouvez utiliser la fonction similaire #arraymaptemplate
à la place.
Pour utiliser cette fonction, créez d'abord un modèle qui prend un seul champ (il doit être mentionné dans le modèle comme {{{1}}}
) et appliquez la cartographie que vous souhaitez à ce champ.
Ensuite, appliquez #arraymaptemplate
sur le champ du modèle principal comme vous le feriez avec #arraymap
, en utilisant le format suivant :
{{#arraymaptemplate:valeur | modèle | délimiteur | nouveau_délimiteur}}
... où modèle est le nom du modèle de cartographie en question.
Par exemple: pour afficher une liste d'auteurs (séparés par des virgules) avec une liste numérotée, vous pouvez d'abord créer un modèle appelé "Numbered author", avec le contenu suivant :
# [[A pour auteur::{{{1}}}]]
...puis appelez ceci :
{{#arraymaptemplate:{{{authors|}}}|Numbered author|,|\n}}
<span id="Using_\s
_and_\n
_in_the_delimiter">
Utiliser \s
et \n
dans le délimiteur
Pour les deux paramètres #arraymap
et #arraymaptemplate
, la chaîne \s
de la valeur délimiteur ou de nouveau_délimiteur sera convertie en espace, tandis que la chaîne \n
de l'un ou l'autre des paramètres sera converti en une nouvelle ligne.
Il convient de noter que, si vous voulez qu'une rupture de ligne réelle apparaisse entre les valeurs, vous devez avoir deux nouvelles lignes (c.-à-d. \n\n
) comme délimiteur, car MediaWiki nécessite deux nouvelles lignes pour afficher un passage à la ligne.
Pages spéciales basées sur des modèles
Page Forms définit trois pages spéciales qui se rapportent aux modèles :
- Special:Templates, qui liste tous les modèles du wiki,
- Special:CreateTemplate, et
- Special:CreateClass.
Seules Special:CreateTemplate et Special:CreateClass permettent de générer automatiquement des modèles.