Accueil > Rubrique 1 > Les balises dynamiques
Les balises dynamiques
mardi 5 juin 2007, par
— utilisation —
Les balises dynamiques réagissent mal, ou pas du tout, aux filtres. Il est donc inutile (jusqu’au moins en 1.9.2) d’essayer d’appliquer un filtre à une balise dynamique, ou d’utiliser une balise dynamique comme argument d’un filtre.
— conception —
Cet article se place dans la perspective de l’écriture d’un plugin pour SPIP version supérieure à 1.9.2b.
Cet article n’est pas exhaustif. Il s’efforce de résumer ce que j’ai pu apprendre lors de la réalisation de l’exercice précédemment cité. Pour ce faire je me suis entre autre inspiré de la balise formulaire_ecrire_auteur
Une balise dynamique s’oppose à une balise statique. Son implémentation doit correspondre à des besoins de traitements de données d’un formulaire par exemple. En l’absence de traitement il est préférable d’implémenter une balise statique.
Sauf indication explicite contraire les chemins des fichiers sont relatifs à la racine du plugin, c’est à dire, relativement à la racine du site SPIP (répertoire contenant le fichier spip.php), le répertoire plugins/nom_plugin.
Une balise dynamique a un petit nom, souvent long. Considerons ici une balise nommée JOHN_DOE. Cette balise doit pouvoir etre appelée dans un squelette par la syntaxe #JOHN_DOE.
Ce nom n’est pas sans conséquence car il conditionne le nom d’au moins deux fichiers implémentant la balise proprement dite. Ces fichiers sont : balise/john_doe.php
formulaires/john_doe.html
formulaires/john_doe.html
Il a la meme syntaxe qu’un squelette.
balise/john_doe.php
il doit/devrait devrait commencer par la ligne
if (!defined("_ECRIRE_INC_VERSION")) return; #securite
Puis viennent 3 fonctions dont les formes minimales semble etre les suivantes :
function balise_JOHN_DOE($p) {
return calculer_balise_dynamique($p, 'JOHN_DOE', array());
}
function balise_JOHN_DOE_stat($args, $filtres) {
return $args;
}
function balise_JOHN_DOE_dyn() {
return array(
'formulaires/john_doe',
0,
array(
)
);
}
balise_JOHN_DOE($p) - première fonction
Le role du paramètre $p reste à éclaircir.
Par contre le troisième paramètre de la fonction calculer_balise_dynmique permet de "récupérer des données du contexte dans lequel est appelée la balise". (" car mon SPIP doit etre trés perfectible)
Par exemple si votre balise est destinée à etre appelée dans une boucle article ET que vous avez besoin de la valeur de id_article, alors ce troisième paramètre doit etre array('id_article')
.
Ce tableau comporte autant de valeurs qu’il vous faut récupérer de données.
L’ordre de ces valeurs est important pour pouvoir retrouver les données dans les fonctions suivantes.
balise_JOHN_DOE_stat($args, $filtres) - deuxième fonction
$args est un tableau comportant les données récupérée par la fonction précédente dans l’ordre dans lequel ces données ont été désignées par le troisième paramètre de ladite fonction précédente.
Dans cette fonction il est donc possible d’effectuer des traitements sur ces données, par exemple des traitements de validation des dites données, des traitements de lecture de la base.... la liste n’est pas exhaustive.
Si les traitements sont satisfaisant, alors la fonction retourne $args et l’aventure continue.
Dans le cas contraire la fonction peut retourner ’’ ( return '';
) et l’aventure s’arrete. C’est-à-dire, la balise #JOHN_DOE n’affichera rien.
On note ici que cette fonction peut compléter le tableau $args avec d’autres valeurs qui devront alors aussi apparaitre comme paramètres dans la déclaration de la troisième fonction.
balise_JOHN_DOE_dyn(...) - troisième fonction
Dans l’exemple utilisé jusqu’à présent on aurait une déclaration du type
function balise_JOHN_DOE_dyn($id_article) {...}
Les paramètres de cette fonction semblent donc correspondre à une liste ordonnée des données récupérées par la première fonction. Cette liste peut etre altérée de toutes les manières possibles via la deuxième fonction.
Cette troisième fonction peut etre vue comme comportant deux parties principales : des traitements : de type traitements d’un formulaire HTML (_request() est votre ami), production de valeurs destinées à etre affichées comme résultat de ces traitements
le retour de la fonction.
Le retour de la fonction est un tableau de 3 éléments. la désignation d’un squelette, cette désignation étant au format include_spip(), c’est à dire un nom de fichier dans le SPIP_PATH sans l’extension du fichier ;
un paramètre dont j’ignore le role, en le mettant à 0 ça passe ;
un tableau associatif, chaque clé de ce tableau permettant l’accès dans le squelette à la donnée associée à ladite clé par la balise #ENV{clé}.
conclusion
Vous en savez autant que moi.