diff --git a/ecrire/public/assembler.php b/ecrire/public/assembler.php index 8fbdf9ed0bb4b1eff7660492a9e6f89e947fd9ec..553aa69e3e891f9bb5c97f27f1479ec5ad59ac93 100644 --- a/ecrire/public/assembler.php +++ b/ecrire/public/assembler.php @@ -126,13 +126,9 @@ function assembler($fond, $connect='') { if (!strlen($fond)) $fond = 'sommaire'; - // preparer le contexte - $parametrer = charger_fonction('parametrer', 'public'); - $page = $parametrer($fond, $GLOBALS['contexte'], $chemin_cache, $connect); - - // Stocker le cache sur le disque - if ($page AND $chemin_cache) - $cacher(NULL, $use_cache, $chemin_cache, $page, $lastmodified); + // produire la page : peut mettre a jour $lastmodified + $produire_page = charger_fonction('produire_page','public'); + $page = $produire_page($fond, $GLOBALS['contexte'], $use_cache, $chemin_cache, NULL, $page, $lastmodified, $connect); } if ($page AND $chemin_cache) $page['cache'] = $chemin_cache; @@ -226,23 +222,46 @@ function inclure_page($fond, $contexte, $connect='') { $res = $cacher($contexte, $use_cache, $chemin_cache, $page, $lastinclude); if ($res) {return array('texte' => $res);} - // Si use_cache vaut 0, la page a ete tiree du cache et se trouve dans $page - if (!$use_cache) { - $lastmodified = max($lastmodified, $lastinclude); - } else { - $parametrer = charger_fonction('parametrer', 'public'); - $page = $parametrer($fond, $contexte, $chemin_cache, $connect); - $lastmodified = time(); - // et on l'enregistre sur le disque - if ($page AND $chemin_cache - AND $page['entetes']['X-Spip-Cache'] > 0) - $cacher($contexte, $use_cache, $chemin_cache, $page, - $lastmodified); + // Si use_cache ne vaut pas 0, la page doit etre calculee + // produire la page : peut mettre a jour $lastinclude + if ($use_cache) { + $produire_page = charger_fonction('produire_page','public'); + $page = $produire_page($fond, $contexte, $use_cache, $chemin_cache, $contexte, $page, $lastinclude, $connect); } + // dans tous les cas, mettre a jour $lastmodified + $lastmodified = max($lastmodified, $lastinclude); return $page; } +/** + * Produire la page et la mettre en cache + * lorsque c'est necessaire + * + * @param string $fond + * @param array $contexte + * @param int $use_cache + * @param string $chemin_cache + * @param array $contexte_cache + * @param array $page + * @param int $lastinclude + * @param string $connect + * @return array + */ +function public_produire_page_dist($fond, $contexte, $use_cache, $chemin_cache, $contexte_cache, &$page, &$lastinclude, $connect=''){ + $parametrer = charger_fonction('parametrer', 'public'); + $page = $parametrer($fond, $contexte, $chemin_cache, $connect); + // et on l'enregistre sur le disque + if ($chemin_cache + AND $page['entetes']['X-Spip-Cache'] > 0){ + $cacher = charger_fonction('cacher', 'public'); + $lastinclude = time(); + $cacher($contexte_cache, $use_cache, $chemin_cache, $page, $lastinclude); + } + return $page; +} + + // Fonction inseree par le compilateur dans le code compile. // Elle recoit un contexte pour inclure un squelette, // et les valeurs du contexte de compil prepare par memoriser_contexte_compil diff --git a/ecrire/public/cacher.php b/ecrire/public/cacher.php index 1ec447585511a56f58f7406967b81a8b368ce275..ccf67bddcd8b4f42613f83d607168c42d5095fe4 100644 --- a/ecrire/public/cacher.php +++ b/ecrire/public/cacher.php @@ -76,8 +76,10 @@ function gzip_page($page) { // (passage par reference pour alleger) // http://doc.spip.org/@gunzip_page function gunzip_page(&$page) { - if ($page['gz']) + if ($page['gz']) { $page['texte'] = gzuncompress($page['texte']); + $page['gz'] = false; // ne pas gzuncompress deux fois une meme page + } } /**