Le filtre parametre_url

Depuis la version 1.8 de SPIP, la balise #SELF permet de récupérer l’URL de la page appelée, nettoyée — nous dit la doc — des variables propres à l’exécution de SPIP. Par exemple, pour une page avec l’url : article.php3?id_article=25&var_mode=recalcul la balise #SELF retournera : article.php3?id_article=25.

Très pratique donc (elle nous évite de devoir appeler une variable d’environnement en php), la balise #SELF renvoie néanmoins un résultat qui n’est pas facilement manipulable. En particulier, il n’est pas aisé de modifier un paramètre de la chaîne sans devoir tout décomposer.

Le filtre présenté ici — qui a été récupéré du projet Sedna sur SPIP Zone —, répond simplement à ce problème.

Commencez par copier le bout de code suivant dans votre fichier mes_fonctions.php3, à créer, le cas échéant, à la racine de votre site spip :

function parametre_url($url, $parametre, $valeur = '__global__') {
	$link = new Link(str_replace('&', '&', $url));
	if($valeur == '__global__')
		$valeur = $GLOBALS[$parametre];
	if(empty($valeur)) $link->DelVar($parametre);
	else $link->AddVar($parametre, $valeur);
	return quote_amp($link->getUrl());
}

Il ne vous reste plus qu’à appeler ce filtre dans vos squelettes selon le schéma suivant :

[(#SELF|parametre_url{'parametre','valeur'})]

Par exemple, si #SELF renvoie page.php3?tri=date&ordre=inverse&debut_page=100&mode=large&lang=fr et que vous voulez changer la valeur du paramètre tri (actuellement à la valeur « date ») par « titre », sans toucher au reste de la chaîne, il vous suffit d’écrire ceci :

[(#SELF|parametre_url{'tri','titre'})]

À noter

-  Vous pouvez, bien sûr, appliquer ce filtre à une autre url spip (#URL_ARTICLE, #URL_SITE_SPIP, etc) ;

-  Si le paramètre n’est pas présent dans la chaîne, il est simplement ajouté à la suite de la chaîne existante ;

-  Si la valeur est omise, c’est la valeur « globale » qui sera ajoutée(i.e. [(#SELF|parametre_url{id_document})]) ;

-  Si la valeur est une chaîne vide ou vaut 0, le paramètre est retiré de l’url ;

-  Vous pouvez utiliser des objets SPIP (et pas uniquement des chaînes statiques) comme variables du filtre. Par exemple, à l’intérieur d’une boucle dont la langue est différente de la langue globale :

[(#SELF|parametre_url{'lang',#LANG})]

Exemple d’utilisation

L’article Donner la possibilité aux visiteurs de choisir le critère de tri d’une liste est un bon exemple de l’utilisation de ce filtre.

ce filtre a été intégré dans spip 1.8.2

Discussion

Aucune discussion

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

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.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom