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 par date d’activité
2 discussions
Fonctionnalité intégrée au Core depuis...... (au moins SPIP v2 ! )
Répondre à ce 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...
Répondre à ce message
Ajouter un commentaire
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.
Suivre les commentaires : |