From 9dd6e89b5713563dcd11adeb36a2cc0392a307cf Mon Sep 17 00:00:00 2001 From: Cerdic <cedric@yterium.com> Date: Sat, 31 Oct 2009 10:53:46 +0000 Subject: [PATCH] report de [14702] introduire une fonction public_produire_page_dist chargee de la production de $page et de la mise en cache si necessaire Cette fonction peut etre surchargee pour personaliser la strategie de gestion du cache, et en particulier renvoyer le contenu du cache et lancer un calcul differe si possible --- ecrire/public/assembler.php | 57 ++++++++++++++++++++++++------------- ecrire/public/cacher.php | 4 ++- 2 files changed, 41 insertions(+), 20 deletions(-) diff --git a/ecrire/public/assembler.php b/ecrire/public/assembler.php index 8fbdf9ed0b..553aa69e3e 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 1ec4475855..ccf67bddcd 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 + } } /** -- GitLab