Skip to content
Extraits de code Groupes Projets
Valider 426e7781 rédigé par esj's avatar esj
Parcourir les fichiers

Après un remue-méninges collectif, les problèmes de contextes autour de {{{...

Après un remue-méninges collectif, les problèmes de contextes autour de {{{ lang }}}, {{{ date }}} et {{{ date_redac }}} sont résolus par l'introduction d'une variante de{{{ #INCLURE }}}s'écrivant{{{ #INCLURE* }}}. En présence de l'étoile, l'inclusion a lieu sans insertion dans le contexte des 3 paramètres évoqués (on peut donc utiliser des critères conditionnels dans le squelette inclus). Les formes habituelles de{{{ INCLURE }}}restent inchangées.

En commentaire dans ce dépot, un essai inabouti de simuler l'insertion des paramètres {{{ date }}} et {{{ date_redac }}} par le compilateur. Ca a des impacts a plusieurs endroits, ce sera pour plus tard.
parent 133807b9
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -1428,6 +1428,7 @@ function recuperer_fond($fond, $contexte=array(), $options = array(), $connect=' ...@@ -1428,6 +1428,7 @@ function recuperer_fond($fond, $contexte=array(), $options = array(), $connect='
$pages = array(); $pages = array();
if (isset($contexte['fond'])) if (isset($contexte['fond']))
$fond = $contexte['fond']; $fond = $contexte['fond'];
// Si on a inclus sans fixer le critere de lang, on prend la langue courante // Si on a inclus sans fixer le critere de lang, on prend la langue courante
if (!isset($contexte['lang'])) if (!isset($contexte['lang']))
$contexte['lang'] = $GLOBALS['spip_lang']; $contexte['lang'] = $GLOBALS['spip_lang'];
...@@ -1436,6 +1437,16 @@ function recuperer_fond($fond, $contexte=array(), $options = array(), $connect=' ...@@ -1436,6 +1437,16 @@ function recuperer_fond($fond, $contexte=array(), $options = array(), $connect='
$lang_select = lang_select($contexte['lang']); $lang_select = lang_select($contexte['lang']);
} else $lang_select =''; } else $lang_select ='';
// idem pour les dates
include_spip('inc/filtres'); // pour normaliser_date
if (!isset($contexte['date']))
$contexte['date'] = date("Y-m-d H:i:s");
else $contexte['date'] = normaliser_date($contexte['date']);
if (!isset($contexte['date_redac']))
$contexte['date_redac'] = date("Y-m-d H:i:s");
else $contexte['date_redac'] = normaliser_date($contexte['date_redac']);
@$GLOBALS['_INC_PUBLIC']++; @$GLOBALS['_INC_PUBLIC']++;
foreach(is_array($fond) ? $fond : array($fond) as $f){ foreach(is_array($fond) ? $fond : array($fond) as $f){
......
...@@ -21,9 +21,9 @@ if (!defined("_ECRIRE_INC_VERSION")) return; ...@@ -21,9 +21,9 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
// http://doc.spip.org/@assembler // http://doc.spip.org/@assembler
function assembler($fond, $connect='') { function assembler($fond, $connect='') {
global $flag_preserver,$lastmodified, $use_cache; global $flag_preserver,$lastmodified, $use_cache, $contexte;
$GLOBALS['contexte'] = calculer_contexte(); $contexte = calculer_contexte();
// Cette fonction est utilisee deux fois // Cette fonction est utilisee deux fois
$cacher = charger_fonction('cacher', 'public'); $cacher = charger_fonction('cacher', 'public');
// Garnir ces quatre parametres avec les infos sur le cache // Garnir ces quatre parametres avec les infos sur le cache
...@@ -65,10 +65,21 @@ function assembler($fond, $connect='') { ...@@ -65,10 +65,21 @@ function assembler($fond, $connect='') {
if (!$use_cache) { if (!$use_cache) {
// Informer les boutons d'admin du contexte // Informer les boutons d'admin du contexte
// (fourni par assembler_contexte lors de la mise en cache) // (fourni par assembler_contexte lors de la mise en cache)
$GLOBALS['contexte'] = $page['contexte']; $contexte = $page['contexte'];
} }
// sinon analyser le contexte & calculer la page // sinon rajouter les dates dans le contexte
// lui rajouter les parametres implcites des URLs symboliques
// et calculer la page
else { else {
include_spip('inc/filtres'); // pour normaliser_date
if (!isset($contexte['date']))
$contexte['date'] = date("Y-m-d H:i:s");
else $contexte['date'] = normaliser_date($contexte['date']);
if (!isset($contexte['date_redac']))
$contexte['date_redac'] = date("Y-m-d H:i:s");
else $contexte['date_redac'] = normaliser_date($contexte['date_redac']);
assembler_contexte($fond); assembler_contexte($fond);
$parametrer = charger_fonction('parametrer', 'public'); $parametrer = charger_fonction('parametrer', 'public');
$page = $parametrer($fond, $GLOBALS['contexte'], $chemin_cache, $connect); $page = $parametrer($fond, $GLOBALS['contexte'], $chemin_cache, $connect);
...@@ -139,7 +150,7 @@ function assembler_contexte(&$fond) ...@@ -139,7 +150,7 @@ function assembler_contexte(&$fond)
// //
// Contexte : lors du calcul d'une page spip etablit le contexte a partir // Contexte : lors du calcul d'une page spip etablit le contexte a partir
// des variables $_GET et $_POST, et leur ajoute la date // des variables $_GET et $_POST, purgees des fausses variables var_*
// Note : pour hacker le contexte depuis le fichier d'appel (page.php), // Note : pour hacker le contexte depuis le fichier d'appel (page.php),
// il est recommande de modifier $_GET['toto'] (meme si la page est // il est recommande de modifier $_GET['toto'] (meme si la page est
// appelee avec la methode POST). // appelee avec la methode POST).
...@@ -194,25 +205,9 @@ function inclure_page($fond, $contexte, $connect='') { ...@@ -194,25 +205,9 @@ function inclure_page($fond, $contexte, $connect='') {
// Si use_cache vaut 0, la page a ete tiree du cache et se trouve dans $page // Si use_cache vaut 0, la page a ete tiree du cache et se trouve dans $page
if (!$use_cache) { if (!$use_cache) {
$lastmodified = max($lastmodified, $lastinclude); $lastmodified = max($lastmodified, $lastinclude);
} } else {
// sinon on la calcule et on ajoute la date (et date_redac)
// dans le contexte, pour que les criteres {age} etc fonctionnent
// ATTENTION : les balises dynamiques passent par la,
// l'ajout de la date/heure/seconde rend tout cache invalide,
// meme si le reste des arguments est constant
// probleme possible de perf ici
else {
include_spip('inc/filtres'); // pour normaliser_date
if (isset($contexte['date']))
$contexte['date'] = normaliser_date($contexte['date']);
else $contexte['date'] = date("Y-m-d H:i:s");
if (!isset($contexte['date_redac']))
$contexte['date_redac'] = $contexte['date'];
else $contexte['date_redac'] = normaliser_date($contexte['date_redac']);
$parametrer = charger_fonction('parametrer', 'public'); $parametrer = charger_fonction('parametrer', 'public');
$page = $parametrer($fond, $contexte, $chemin_cache, $connect); $page = $parametrer($fond, $contexte, $chemin_cache, $connect);
$lastmodified = time(); $lastmodified = time();
// et on l'enregistre sur le disque // et on l'enregistre sur le disque
if ($chemin_cache if ($chemin_cache
......
...@@ -99,9 +99,11 @@ function balise_PUCE_dist($p) { ...@@ -99,9 +99,11 @@ function balise_PUCE_dist($p) {
// http://www.spip.net/fr_article1971.html // http://www.spip.net/fr_article1971.html
// http://doc.spip.org/@balise_DATE_dist // http://doc.spip.org/@balise_DATE_dist
function balise_DATE_dist ($p) { function balise_DATE_dist ($p) {
$_date = champ_sql('date', $p); $d = champ_sql('date', $p);
$p->code = "$_date"; # if ($d === "@\$Pile[0]['date']")
$p->interdire_scripts = false; # $d = "isset(\$Pile[0]['date']) ? $d : time()";
$p->code = "normaliser_date($d)";
spip_log("balise_DATE retourne $d");
return $p; return $p;
} }
...@@ -109,8 +111,10 @@ function balise_DATE_dist ($p) { ...@@ -109,8 +111,10 @@ function balise_DATE_dist ($p) {
// http://www.spip.net/fr_article1971.html // http://www.spip.net/fr_article1971.html
// http://doc.spip.org/@balise_DATE_REDAC_dist // http://doc.spip.org/@balise_DATE_REDAC_dist
function balise_DATE_REDAC_dist ($p) { function balise_DATE_REDAC_dist ($p) {
$_date = champ_sql('date_redac', $p); $d = champ_sql('date_redac', $p);
$p->code = "$_date"; # if ($d === "@\$Pile[0]['date_redac']")
# $d = "isset(\$Pile[0]['date_redac']) ? $d : time()";
$p->code = "normaliser_date($d)";
$p->interdire_scripts = false; $p->interdire_scripts = false;
return $p; return $p;
} }
...@@ -1053,20 +1057,20 @@ function balise_INCLURE_dist($p) { ...@@ -1053,20 +1057,20 @@ function balise_INCLURE_dist($p) {
unset($_contexte['env']); unset($_contexte['env']);
} else $flag_env = false; } else $flag_env = false;
$l = 'array(' . join(",\n\t", $_contexte) .')'; $_l = 'array(' . join(",\n\t", $_contexte) .')';
if ($flag_env) { if ($flag_env) $_l = "array_merge(\$Pile[0],$_l)";
$l = "array_merge(\$Pile[0],$l)";
} $_connect = _q(!$id_boucle ? '' : $p->boucles[$id_boucle]->sql_serveur);
$connect = !$id_boucle ? '' $page = $p->etoile
: $p->boucles[$id_boucle]->sql_serveur; ? "evaluer_fond('', \$l = $_l, $_connect)"
: "recuperer_fond('',\$l = $_l, array('raw'=>true), $_connect)";
$page = '$p = evaluer_fond("", $l = ' . $l. ", " . _q($connect) .')';
$retour = !isset($_contexte['ajax']) ? $retour = !isset($_contexte['ajax']) ?
"\$p['texte']" : "\$p['texte']" :
'encoder_contexte_ajax($l,"",$p["texte"])'; 'encoder_contexte_ajax($l,"",$p["texte"])';
$p->code = "(!($page) ? '' :\n\t$retour)"; $p->code = "(!(\$p = $page) ? '' :\n\t$retour)";
} else { } else {
$n = interprete_argument_balise(1,$p); $n = interprete_argument_balise(1,$p);
......
#HTTP_HEADER{Content-Type: text/xml; charset=#CHARSET}[(#INCLURE{fond=prive/rss/#ENV{op}}{env})] #HTTP_HEADER{Content-Type: text/xml; charset=#CHARSET}[(#INCLURE*{fond=prive/rss/#ENV{op}}{env})]
\ No newline at end of file \ No newline at end of file
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter