# Perfectionnement en Lua/Créer un modèle Lua

Au cours des chapitres précédentes, nous avons ébauché un module ; capable d’afficher le contenu de la librairie Scribunto mw.site. Nous créons désormais un modèle, qui doit permettre aux utilisateurs d’appeler les fonctions contenues dans notre module.
L’objectif est de permettre à l’utilisateur d’extraire, toutes les informations contenues dans la librairie ; en utilisant un modèle. La difficulté consiste à échanger les arguments entre utilisateur, modèle, module et librairie.
Nous poursuivons l’étude de l’objet frame, en manipulant les arguments du modèle appelant.

## Prérequis

Ce chapitre suppose que vous ayez assimilé la leçon Introduction au Lua, ainsi que les premières leçons de perfectionnement où nous préparons le code qui sert de point de départ à cette nouvelle leçon.

## Créer un modèle utilisant un script Lua

* Accéder au Module:Bac à sable.
* Supprimer le code existant.
* Ajouter le code suivant et enregistrer la page :

### Création d’un modèle

Nous aboutissons à la finalité des modules Scribunto. Leur utilité consiste effectivement à faciliter la programmation ou l’édition, des modèles qui utilisaient auparavant une syntaxe difficile.
Les modèles Lua sont des modèles qui appellent simplement un module Scribunto et dont les arguments sont traités par le module Scribuntu et son code Lua.
La Wikiversité dispose d’un modèle dédié aux tests :

#### Modèle Bac à sable

* Rendez-vous sur la page Modèle:Bac à sable
* Vérifiez l’historique du modèle,
* Si personne ne l’utilise en ce moment éditez le modèle et remplacez le code existant par le code suivant :
{{#invoke:Bac à sable|site}}

#### Tester votre nouveau modèle

* Rendez-vous sur "votre page de test".
* Ajouter le code suivant et enregistrer la page:
Si votre site ne dispose pas d’un modèle semblable ; la procédure consiste à créer le modèle de test dans vos pages personnelles :

#### Modèle dans vos pages perso

* Éditez votre page de test, ou éditez cette page de discussion.
* Ajoutez le lien suivant puis enregistrez :
    {{Utilisateur:Youni Verciti/Site}}
* Le modèle appelé, n’existe pas, cliquez sur le lien rouge.
* Sur la page du nouveau modèle, placez l’appel au module de la façon suivante :
    {{#Invoke:Bac à sable|site}}
* Enregistrez la nouvelle page en renseignant le résumé :
    Modèle de test pour [[Projet:Laboratoire/Lua/Perfectionnement/Créer un modèle Lua]]
* Pour tester votre nouveau modèle, retournez sur "votre page de test" ; le même lien qui vous a permis de créer le nouveau modèle, affiche désormais son résultat.

### Le résultat doit correspondre à ceci

* siteName: Wikiversité
* currentVersion: 1.43.0-wmf.24 (72fea51)
* scriptPath: /w
* server: //fr.wikiversity.org
* stylePath: /w/skins

## Comprendre le nouveau modèle

{{Invoke#Bac à sable|site}} Le modèle contient uniquement l’appel au module …, mais il doit nécessairement désigner une fonction … .
Actuellement notre modèle affiche le résultat de la fonction … mais est incapable de transmettre ses arguments à notre module. Si nous essayons d’appeler la fonction namespaces en utilisant le modèle : {{Site|namespaces}} le modèle continue à retourner le résultat de la fonction site.
Nous devons modifier la fonction principale site pour lui permettre de convertir les arguments du modèle en arguments valides pour le code du module. Nous utilisons la fonction getParent de l’objet frame pour obtenir la table des arguments du modèle.
Par précaution le code suivant permet de vérifier comment scribunto ordonne les arguments de l’objet parent (le modèle).

## Conclusion

Félicitation! Vous êtes capable de créer, tester et comprendre un modèle Lua qui utilise un module Scribunto. Vous savez utiliser la fonction getParent de l’objet frame ; afin d’ordonner les arguments du modèle au sein du script.
Continuez avec le chapitre suivant.