Cette page est destinée aux développeurs découvrant
WikiNi et désirant ajouter des fonctionnalitées à
WikiNi. Elle nécessite une connaissance basique de php et des notions de programmation objet en php. Écrire une action pour
WikiNi est relativement facile.
Présentation
WikiNi possède deux types de greffons ("plugin") :
- les "actions" qui servent à l'utilisateur final pour générer automatiquement du contenu à l'intérieur de la zone de contenu d'une page WikiNi (cf. la ListeDesActionsWikiNi)
- les "handlers" qui bâtissent une forme particulière d'une page : mode affichage ("show" ; c'est le mode par défaut), mode édition, sortie brute ("raw"), affichage des différentes versions d'une page ("diff"), etc. (cf. la ListeDesHandlersWikini)
Nous parlons ici des "actions".
La syntaxe des actions est toujours la même :
{{nomdelaction param1="valeur1" param2="valeur2"}}
Les paramètres peuvent être optionnels et les
valeurs des paramètres sont toujours entre guillemets.
L'appel à une action se fait dans le corps d'une page et elle affiche le résultat éventuel à l'endroit où elle a été appelée.
Installation
Pour installer une action, il suffit de placer le fichier php qui la définit dans le répertoire indiqué par le paramètre de configuration "
action_path" (voir le fichier wakka.config.php). Le nom de l'action est le nom du fichier la définissant sans l'extension
.php.
Comment ça marche ?
Lorsque le formateur
WikiNi qui traduit le texte avec les balises
WikiNi en HTML rencontre la balise {{ ..... }} il appelle la méthode
Action() de l'objet
$wiki. Cette méthode récupère les paramètres de l'action puis inclus le code de l'action dans le code php courant pour l'exécuter. Le code de l'action devient donc une partie du code de la classe Wiki et peut donc accéder à ses méthodes en utilisant la variable
$this.
Écriture de l'action
1. Contrôler que l'action est bien appelée par WikiNi
Une action est appelée par le noyau de
WikiNi (/wakka.php) et personne ne doit pouvoir, par mesure de sécurité, l'appeler en direct. En d'autres termes, le lien
http://example.org/wikini/actions/mon_action.php doit donner une erreur. C'est pourquoi il est important d'ajouter
au tout début de chaque action :
if (!defined("WIKINI_VERSION"))
{
- die ("accès direct interdit");
}
Par exemple, le lien suivant devrait donner un tel résultat :
http://www.wikini.net/actions/include.php
2. Récupération des éventuels paramètres
Une des premières choses que fait une action est de récupérer la valeur des paramètres qui lui on été fournis. Elle doit utiliser la méthode
GetParameter() de la classe Wiki :
$param1 = $this->GetParameter("param1");
Si
$param1 est nulle, c'est qu'il n'y a pas de paramètre passé à l'action ayant ce nom.
3. Traitements
Le reste du code de l'action dépend de ce qu'elle doit faire. Il faut remarquer qu'une action peut être appelée plusieurs fois dans une même page, cela implique une gestion de la définition des fonctions utilisées dans l'action. Si dans le fichier source de l'action vous définissez une fonction "
MaFonction", vous devez tester si elle n'a pas déjà été défini au risque d'avoir une erreur renvoyé par l'interpréteur php. Le modèle de code à utiliser sera :
if (!function_exists("MaFonction")) {
function MaFonction ( .... ) {
......
}
}
Le reste du code de l'action dépend de son concepteur. Il est important d'avoir parcouru le code de la classe Wiki qui contient de nombreuse fonctions utile, notament de mise en forme, de récupération d'information sur l'utilisateur (comme la liste de control d'accès (acl) par exemple) et d'accès à la base de données.
Exemple d'action
Nous allons ici développer une petite action pour illustrer ce que nous avons dit précédement.
[code à contrôler]
<?php
// N'oubliez pas non plus, si vous le souhaitez, de mentionner la licence.
// Contrôle pour être sûr que l'action est bien appelée par WikiNi
if (!defined("WIKINI_VERSION"))
{
die ("accès direct interdit");
}
// Récupération des paramètres
$page = $this->GetParameter("page");
// Traitements
// Si le paramètre page est vide ou non spécifié on affiche "Le paramètre "page" est manquant."
if (!$this->GetParameter("page"))
{
echo $this->Format("//Le paramêtre \"page\" est manquant.//");
}
// Sinon on affiche le propriétaire de la page
else
{
echo $this->GetPageOwner($page);
}
?>
--
GarfieldFr,
CharlesNepote