Home
Reading
Searching
Subscribe
Sponsors
Statistics
Posting
Contact
Spam
Lists
Links
About
Hosting
Filtering
Features Download
Marketing
Archives
FAQ
Blog
 
Gmane

From: pif <christian.lefebvre <at> atosorigin.com>
Subject: =?iso-8859-1?q?du_php_=E9valu=E9_qu=27une_fois?=
Newsgroups: gmane.comp.web.spip.devel
Date: Saturday 1st October 2005 10:23:59 UTC (over 13 years ago)
L'idée avait été évoquée y'a un bail et je m'en suis servi comme
"travaux pratique" pour la doc du code, alors voila le patch, à discuter
(syntaxe et détails de comportement).

  Le principe est le suivant : si un squelette contient
 bla bla bla, le "bla bla bla" est évalué lors de la mise en
cache d'une page.
  C'est à dire qu'on a du code php "normal" mis en vrac dans la
squelette compilé, mais lorsqu'on évalue une page pour la mettre en
cache, c'est le résultat de l'évaluation qui est stocké, au lieu d'être
évalué à chaque hit sur la page.

  Par exemple, si on veut faire une boucle sur des rubriques, dedans
une boucle sur des articles, et qu'on veut numéroter les articles :

    numero??? : #TITRE
  


  On ne peut pas utiliser COMPTEUR_BOUCLE car il reviendra à 0 à chaque
tour de la boucle rubriques, il faut donc faire un truc du genre
 avant la boucle rubriques et un 
  Mais du coup, ce code est évalué à chaque hit sur la page (qui est
alors estampillée "php" alors qu'elle pourrait être estampillée "html"
sinon).

avec le patch ci joint, on peut écrire ça :
$cpt=1;

    return $cpt++; : #TITRE
  


  Lorsqu'on met en cache la page (ou si on la recalcule), ce code
php est évalué et ce sont les résultats de ces évaluations qui sont
mises en cache, ce qui signifie qu'il n'y a plus de php d'évalué lorsque
récupèrer la page en cache.

  Remarquez le "return" à la place du "echo". On pourrait améliorer le
code en bidouillant à coups de ob_*, mais c'est à discuter car ça ajoute
pas mal de code pour peut-être pas grand chose.

  Reste également à acter une syntaxe (est-ce que  risque de se
croiser dans des squelettes existants ???) et à voir comment gérer le
statut php/html (j'ai pas trop compris comment ça marchait ce point :
quel est le lien entre les $p->statut=html/php et les process_ins ?)
apparemment, ça se comporte normalement, mais j'suis pas sur de mon coup.

-- 
À+, Pif.
 
CD: 13ms