Hello,
historiquement les squelettes étaient tous exécutes dans l'espace des globales, ce qui permettait d'adresser en php une variable globale directement :
<?php
if ($auteur_session['id_auteur']) {
...
?>
puis suite à une évolution du code interne de l'évaluation des squelettes, seul le squelette principal (sommaire.html, article.html...) est aujourd'hui encore dans l'espace des globales.
Pour les squelettes inclus on est obligés d'écrire explicitement :
<?php
if ($GLOBALS['auteur_session']['id_auteur']) {
...
?>
Pour le squelette principal, la première écriture reste fonctionnelle.
Je propose de sortir aussi le squelette principal de cet espace des globales.
D'un point de vue des squelettes, cela ramènera un comportement identique qu'on soit dans une inclusion ou non, ce qui est toujours mieux.
Cela créé cependant une incompatibilité partielle si on utilisait des globales adressées implicitement dans un squelette principal : il faudra les expliciter à l'aide de $GLOBALS.
L'avantage de ce changement est d'ouvrir la porte à l'encapsulation du cache de chaque squelette dans une fonction php quand cela est nécessaire.
Cela permettrait de tester le remplacement les eval() utilisés pour évaluer le cache par un simple include_once ce qui aurait pour bénéfice :
- de simplifier le debug PHP éventuel, ou l'execution pas à pas en PHP qui est bloquée quand on rencontre un eval
- d'améliorer potentiellement la rapidité de service du cache, car "include" bénéficie des accélérateurs (comme eAccelerator, APXC, XCache) ce qui n'est pas le cas de eval()
Il me semble que la rupture de compatibilité est faible, l'essentiel ayant déjà été fait, et que SPIP 3.0 est la bonne occasion pour faire cela.
Des avis contraires ?
Cédric
(cf http://core.spip.org/issues/2256
Cette question fait suite à une remarque pertinente remontée par un admin sys)