Voici un filtre qui permet de transférer le contenu de la balise #ENV
d’un squelette à un squelette inclus.
Mise en œuvre
Son utilisation est assez simple, il faut:
- placer le code suivant dans votre fichier mes_fonctions.php [1]:
function env($env,$par='') {
$env = str_replace('"','"',$env);
if($par) {
$env = unserialize($env);
return entites_html($env[$par]);
}
return $env;
}
- dans le squelette qui fait l’inclusion, ajouter {env=#ENV}
à l’inclusion:
<INCLURE{fond=test}{env=#ENV}>
- dans le squelette inclus, pour acceder à un paramètre d’url de nom mon_param:
[(#ENV{env}|env{mon_param})]
Exemple
Si on utilise les mots-clés pour inclure certaines noisettes :
<BOUCLE_coeur_article (MOTS) {id_article} {type = _squelettes_article}>
<INCLURE {fond=squelettes_articles/#TITRE} {id_article}>
</BOUCLE_coeur_article>
<INCLURE {fond=squelettes_articles/defaut} {id_article}>
<//B_coeur_article>
Ces noisettes ayant des comportements très différents, il est possible de rapidement se retrouver avec plusieurs paramètres différents à ajouter à chaque fois (un pour la pagination, un pour un critére de tri, un pour un filtre par date, …).
Pour être sûr de retrouver le paramètre dont on a besoin, on passe au squelette inclus l’ensemble de #ENV en écrivant <INCLURE {fond=squelettes_articles/#TITRE} {id_article} {env=#ENV}>
.
Maintenant, si on a besoin d’un paramètre date dans le squelette inclus, on obtiendra sa valeur à l’aide de [(#ENV{env}|env{date})]
Discussions by date of activity
2 discussions
Fonctionnalité intégrée au Core depuis...... (au moins SPIP v2 ! )
Reply to this message
Merci pour l’idée, c’est pile ce qu’il me fallait :-)
Pour éviter l’usage systématique du filtre env, qui est un peu lourd, on peut définir la fonction suivante (dans mes_fonctions ou un plugin) :
Cette fonction copie le contenu de l’argument env dans l’environnement courant.
Donc si le squelette inclu contient au début un #SETENV,
[(#ENV{env}|env{mon_param})]
peut être remplacé par#ENV{mon_param}
ou même#MON_PARAM
s’il n’y a pas de risque de confusion avec une balise de boucle.Attention, pour éviter les strreplace et compagnie, il faut appeler cette version avec
{env=#ENV**}
Le hack est pas mal, mais (pour mémoire) quelqu’un avait eu l’idée de faire un critère d’inclusion spécifique qui fasse ça «proprement». Seulement j’ai oublié quel nom on voulait lui donner...
Reply to this message
Add a comment
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Follow the comments:
|
