Passer TOUS les paramètres de l’URL à un INCLURE

Contribution archived for history purposes. May contains any interessant information either in forum comments or in article itself

Comment passer tous les paramètres de l’url (accessibles par #ENV) à un squelette inclus.

Il est parfois utile de faire descendre des paramètres d’url d’un squelette vers un squelette inclus. On a ainsi pris l’habitude d’ajouter {id_article} et autres dans les balises INCLURE de SPIP.

Mais que faire quand on ne sait pas quel paramètre de l’url on veut passer exactement (parce que ces paramètres sont variables etc...)

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:

  1. [(#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})]

Footnotes

[1ou le fichier fonctions relatif au squelette inclus

updated on 3 March 2015

Discussion

2 discussions

  • Fonctionnalité intégrée au Core depuis...... (au moins SPIP v2 ! )

    Reply to this message

  • 1

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

    function balise_SETENV($p) {
            $p->code = "(\$Pile[0]= array_merge(unserialize(\$Pile[0]['env']), \$Pile[0]))&&''";
            return $p;
    }

    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

Comment on this article

Who are you?
  • [Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom