Wikini

EcrireUneAction

PagePrincipale :: DerniersChangements :: DerniersCommentaires :: ParametresUtilisateur :: Vous êtes ec2-54-85-255-74.compute-1.amazonaws.com
<< ListeDesActionsWikiNi DocumentationActions ActionsEnCoursDeDiscussion >>



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") :

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"))
{
}

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&ecirc;tre \"page\" est manquant.//");
}

// Sinon on affiche le propriétaire de la page
else
{
    echo 
$this->GetPageOwner($page);
}

?>


--GarfieldFr, CharlesNepote


<< ListeDesActionsWikiNi DocumentationActions ActionsEnCoursDeDiscussion >>

Il n'y a pas de commentaire sur cette page. [Afficher commentaires/formulaire]