nota-bene.org > Sur le web > Cookies et SPIP : la ruse de sioux

Cookies et SPIP : la ruse de sioux

À propos de cet article

Un article de Stéphane

Publié le 2 mars 2012

URL courte : http://nota-bene.org/879

1 commentaire

Mots-clés (tags)

Comment, dans SPIP, servir des squelettes différents selon qu’on a ou non un cookie ?

Pour la version 6 de ce site, je voulais non seulement faire du design réactif (responsive design) mais ce n’est pas suffisant : il faut qu’un utilisateur puisse poser un cookie quand il veut explicitement une version mobile (pour charger le moins possible de scripts, de CSS, et des images retaillées sur le serveur plutôt que de grosses images redimensionnées via CSS).

Je creuse dans Spip et je finis par découvrir au détour d’une archive de forum qu’on peut évaluer des variables HTTP directement dans Spip, comme ceci :

#SET{mobile,#EVAL{$_COOKIE['mobile']}}

Mais comme Spip est une brave bête, il met tout en cache. Ainsi donc mon visiteur 1 arrive avec son cookie sur une page lambda, il fait composer par Spip la page « mobile ». Bien, jusque-là ça va.

Et puis ensuite il met en cache. Et donc le visiteur 2, qui n’a pas de cookie, ne verra pas la page classique : il verra la page mise en cache, demandée par le visiteur 1.

Je crie au bug, mais Cédric me sort de derrière les fagots la ruse de sioux, tellement rusée qu’on n’en trouve qu’une toute petite trace dans la documentation (sisisi, regardez bien, cherchez $marqueur dans la page).

Il faut ouvrir votre fichier de configuration dans config/mes_options.php et ajouter la ligne magique :

# gestion des cookies
$GLOBALS['marqueur'] .= ':'.$_COOKIE['mobile'];

Videz votre cache, et le tour est joué. Chaque contexte, avec et sans cookie, générera ses propres fichiers dans le cache. Nous sommes sauvés.

Et donc voilà, nota-bene.org version 6 est en ligne maintenant qu’est résolu cet épineux problème.


Commentaires

    • 8 avril 2014

    merci pour cette astuce bien pratique qui permet de "lire" et "transmettre" le cookie à travers la navigation

    mais comment fais tu pour déposer un cookie dans SPIP ?
    par l’intermediaire d’un filtre ou alors tu passes par du php au détour d’une action ou d’un bouton ou autre chose ?

    Répondre à alice

Qui êtes-vous ?
Votre message
  • Pour créer des paragraphes, laissez simplement des lignes vides. Tous les liens sortants comporteront un attribut rel="nofollow". Merci de ne pas spammer.

Ceci est la version Bureau Afficher la version Mobile