LINUX:MediaWiki - SMW - Amélioration: Personnes

De WIKI sur Linux (ADB)
Aller à la navigation Aller à la recherche

retour à Sémantic MediaWiki


But

On améliore ensuite cet embryon de gestion de personnes présente à l'article sur le Prototype: Personnes.

Les zones des scripts ajoutées ou modifiées seront notées en rouge. Pour comparer, reportez-vous aux scripts de départs à l'article sur le Prototype: Personnes.


Adresse

Modèle

Voici le script:


 <includeonly>
 {| class="wikitable"
 ! Rue
 | [[Adresserue::{{{Adresserue|}}}]]
 |-
 ! N°
 | [[Numerorue::{{{Numerorue|}}}]]
 |-
 ! Code Postal
 | [[Codepostal::{{{Codepostal|}}}]]
 |-
 ! Commune
 | [[Commune::{{{Commune|}}}]]
 |-
 ! Pays
 | [[Codepays::{{{Codepays|}}}]]
 |-
 ! Liste de personnes
 | {{#ask:[[Adresselien::{{FULLPAGENAME}}]]|format=list}}
 |}
  
 [[Catégorie:PERSONNE:Adresse]]
 </includeonly>

Il n'y a qu'une modification: le mot magique "SUBPAGENAME" est remplacé par "FULLPAGENAME". C'est une conséquence de la volonté de ne pas afficher la partie espace de nom "PERSONNE:" comme nous le verrons par la suite.


Formulaire

Voici le script:


 <includeonly>
 <div id="wikiPreview" style="display: none; padding-bottom: 25px; margin-bottom: 25px; border-bottom: 1px solid #AAAAAA;"></div>
 {{{for template|Adresse|label=Fiche de l'adresse}}}
 {| class="formtable"
 ! Rue: 
 | {{{field|Adresserue|input type=text}}}
 |-
 ! N°: 
 | {{{field|Numerorue|input type=text}}}
 |-
 ! Code Postal: 
 | {{{field|Codepostal|input type=text}}}
 |-
 ! Commune: 
 | {{{field|Commune|input type=text}}}
 |-
 ! Pays: 
 | {{{field|Codepays|input type=dropdown}}}
 |}
 {{{end template}}}
  
 '''Remarques:'''
 {{{standard input|free text|rows=10}}}
 </includeonly>

Ici également, peu de changement. On ajoute un titre au tableau avec le paramètre "label=Fiche de l'adresse". Et on modifie le texte "Texte libre" par "Remarque".


Catégorie

On ajoute un titre pour séparer l'appel existant à la création d'une nouvelle page de la liste des pages.

On remplace cet appel à la création d'une nouvelle page "{{#default_form:Adresse}}", par la fonction "#forminput" qui nous permet de présélectionner l'espace de nom "PERSONNE".

Voici le code:


 __NOEDITSECTION__
 =Création d'une nouvelle adresse=
 {{#forminput:form=Adresse|size=65|namespace selector=PERSONNE}}

Et voici l'aspect:

LINUX:Mws.categorie.adresse.4.png


Personne

Modèle

Voici de script:


 <includeonly>
 {| class="wikitable"
 ! Utilisateur
 | [[Nomutilisateur::{{{Nomutilisateur|}}}]]
 |-
 ! Nom de famille
 | [[Nomfamille::{{{Nomfamille|}}}]]
 |-
 ! Prénom
 | [[Prenomfamille::{{{Prenomfamille|}}}]]
 |-
 ! Email
 | [[Emailutilisateur::{{{Emailutilisateur|}}}]]
 |-
 ! GSM
 | [[GSM::{{{GSM|}}}]]
 |-
 ! Téléphone
 | [[Telephoneutilisateur::{{{Telephoneutilisateur|}}}]]
 |-
 ! Adresse
 | {{#arraymap:{{{Adresselien|}}}|,|xx1|{{#formredlink:target=PERSONNE:xx1|form=Adresse|existing page link text=xx1|link text=xx1}} {{#set:Adresselien=PERSONNE:xx1}} }}
 |}
 {{#arraydefine:Listelien | {{{Adresselien}}} }}
 {{
  #loop: i | 0 | {{ #arraysize:Listelien }} | 
  {{ #arraydefine: Adrl | {{ #arrayindex:Listelien | {{ #var:i }} }} }}
  {{ #ask:[[category:PERSONNE:Adresse]]
  [[PERSONNE:{{#arrayprint:Adrl}}]]
  |?Adresserue=Rue|?Numerorue=N°|?Codepostal=CP|?Commune|?Codepays=Pays
  |mainlabel=Page
  |limit=2|format=table }}
 }}
  
 [[Catégorie:PERSONNE:Personne]]
 </includeonly>

Nous avons deux grosses modifications.


La première se situe au niveau de l'adresse qui peut être multiple. Nous avions le code suivant:


 ! Adresse
 | {{#arraymap:{{{Adresselien|}}}|,|x|[[Adresselien::x]]}}</nowiki
----
On le remplace par:
----
  <nowiki>! Adresse
 | {{#arraymap:{{{Adresselien|}}}|
     ,|
     xx1|
     {{#formredlink:
       target=PERSONNE:xx1|
       form=Adresse|
       existing page link text=xx1|
       link text=xx1
     }} 
     {{#set:Adresselien=PERSONNE:xx1}}
   }}

En premier lieu, on modifie la variable de transit "x" par "xx1". Dans certains cas, j'ai été confronté à une absence de réaction de la commande car cette variable n'était pas identifiante; en la remplaçant par "xx1", on a moins de chance de tomber sur la même séquence.

Lors de l'encodage, on désire ne donner que le nom de l'adresse sans son espace de nom "PERSONNE". On va le forcer.

L'action sera divisée en deux étapes.

Quand l'adresse n'est pas trouvée, elle s'affiche en rouge et en cliquant sur ce lien, une page de création s'ouvre mais pas sous forme de formulaire. Pour cette raison nous utilisons la fonction "#formredlink". Voyez l'URL https://www.mediawiki.org/wiki/Extension:Page_Forms/Linking_to_forms/fr

Voici les paramètres utilisés:

  • "target": Le nom de la page de l'adresse à créer. Devant la variable de transfert "xx1", on force l'espace de nom "PERSONNE".
  • "form:" On va utiliser le formulaire "Adresse"
  • "existing page link text": Si l'adresse existe, on l'affiche de façon classique sans l'espace de nom "PERSONNE".
  • "link text": Si l'adresse n'existe pas, on l'affiche de façon classique sans l'espace de nom "PERSONNE" mais en rouge.

Enfin on attribue à la propriété "Adresselien" la valeur complète "PERSONNE:xx1" avec la fonction "#set".


On supprime la requête:


 |-
 ! 
 | {{#ask:[[Adresselien::{{SUBJECTPAGENAME}}]]|format=list}}

car elle est inutile.


Enfin on désire afficher le détail de chaque adresse sélectionnées. Cette étape est plus complexe et nous devrons utiliser trois extensions: Arrays, Loops et Variables.

Voici le script:


 {{#arraydefine:Listelien|
   {{{Adresselien}}}
 }}
 {{#loop: i|
          0|
          {{ #arraysize:Listelien }}|
   {{#arraydefine: Adrl|
     {{#arrayindex:Listelien|
       {{#var:i}}
     }} 
   }}
   {{#ask:
     [[category:PERSONNE:Adresse]]
     [[PERSONNE:{{#arrayprint:Adrl}}]]
     |?Adresserue=Rue
     |?Numerorue=N°
     |?Codepostal=CP
     |?Commune
     |?Codepays=Pays
     |mainlabel=Page
     |limit=2
     |format=table 
   }}
 }}



Formulaire

Voici le script:


 <includeonly>
 <div id="wikiPreview" style="display: none; padding-bottom: 25px; margin-bottom: 25px; border-bottom: 1px solid #AAAAAA;"></div>
 {{{for template|Personne|label=Fiche de la personne}}}
 {| class="formtable"
 ! Utilisateur: 
 | {{{field|Nomutilisateur|unique|mandatory|input type=text}}}
 |-
 ! Nom de famille: 
 | {{{field|Nomfamille|input type=text}}}
 |-
 ! Prénom: 
 | {{{field|Prenomfamille|input type=text}}}
 |-
 ! Email: 
 | {{{field|Emailutilisateur|input type=text}}}
 |-
 ! GSM: 
 | {{{field|GSM|input type=text}}}
 |-
 ! Téléphone: 
 | {{{field|Telephoneutilisateur|input type=text}}}
 |-
 ! Adresse: 
 | {{{field|Adresselien|input type=tokens}}}
 |}
 {{{end template}}}
  
 * {{#queryformlink:form=RequeteAdresse|link text=Recherche d'adresse|new windows}}
  
 '''Remarques:'''
 {{{standard input|free text|rows=10}}}
 </includeonly>

Divers changements:

  • On ajoute un titre au tableau avec le paramètre "label=Fiche de la personne".
  • On impose que le nom d'utilisateur soit unique ("unique")
  • On impose que le nom d'utilisateur soit nécessaire ("mandatory")
  • On ajoute un lien en la fin du script, nous avons le texte suivant:

 * {{#queryformlink:form=RequeteAdresse|
     link text=Recherche d'adresse|
     new windows
   }}

Dans l'article Requête: Personnes, nous avions créé un écran permettant de rechercher une adresse donnée. On y fait appel en ouvrant une autre fenêtre ("new windows"). C'est une petite facilité afin de remplir la dernière zone du tableau: "Adresse"

  • Et plus loin, on modifie le texte "Texte libre" par "Remarque".


Catégorie

On ajoute un titre pour séparer l'appel existant à la création d'une nouvelle page de la liste des pages.

On remplace cet appel à la création d'une nouvelle page "{{#default_form:Personne}}", par la fonction "#forminput" qui nous permet de présélectionner l'espace de nom "PERSONNE".

Voici le code:


 __NOEDITSECTION__
 =Création d'une nouvelle personne=
 {{#forminput:form=Personne|size=65|namespace selector=PERSONNE}}

Et voici l'aspect:

LINUX:Mws.categorie.personne.4.png




retour à Sémantic MediaWiki