source: spip-zone/_plugins_/cache_cool/cache_cool_options.php @ 32544

Last change on this file since 32544 was 32542, checked in by cedric@…, 11 years ago

Un Plugin de test de cache refroidi calcule en differe, sur une idee de Benoit Aubert

File size: 2.7 KB
Line 
1<?php
2/*
3 * Plugin Cache Cool
4 * (c) 2009 Cedric
5 * Distribue sous licence GPL
6 *
7 */
8
9/**
10 * Fonction chargee de produire le cache pour un contexte et un fond donne
11 * et de le memoriser si besoin
12 *
13 * S'insere a la place de la fonction du core public_produire_page_dist pour
14 * decider si le cache existant peut etre servi froid, et lancer dans la queue
15 * une tache de mise a jour du cache en cron
16 *
17 * Dans ce cas, on reentre ici avec $use_cache.
18 * On verifie que le contexte produit un $use_cache et un $chemin_cache credibles
19 * (si on est dans l'espace prive au moment du calcul differe, aucun cache ne sera demande)
20 * Il faudrait idealement verifier qu'on retrouve le meme $chemin_cache
21 * mais cela necessiterait d'avoir le $page et le $contexte qui utilises pour cela
22 * dans le cas de la page principal dans public/assembler, mais qui ne sont pas fournis ici
23 *
24 * Si le contexte est semblable, on lance le calcul et la mise a jour du cache,
25 * sinon on reprogramme avec les memes arguments
26 *
27 * @param string $fond
28 * @param array $contexte
29 * @param int $use_cache
30 * @param string $chemin_cache
31 * @param array $contexte_cache
32 * @param array $page
33 * @param int $lastinclude
34 * @param string $connect
35 * @return array
36 */
37function public_produire_page($fond, $contexte, $use_cache, $chemin_cache, $contexte_cache, $page, &$lastinclude, $connect=''){
38
39        // calcul differe du cache ?
40        // prend la main si c'est un calcul normal avec mise en cache
41        // et qu'un cache existe deja qui peut etre servi
42        if ($use_cache==1
43                AND $chemin_cache
44                AND is_array($page)
45                AND count($page)
46                AND !$GLOBALS['visiteur_session']['id_auteur']
47                ) {
48                // on differe la maj du cache et on affiche le contenu du cache ce coup ci encore
49                $where = is_null($contexte_cache)?"principal":"inclure_page";
50                job_queue_add('public_produire_page',$c="Calcul du cache $fond [$where]",array($fond, $contexte, 2, $chemin_cache, $contexte_cache, NULL, $lastinclude, $connect),"",TRUE);
51                gunzip_page(&$page); // decomprimer la page si besoin
52                #spip_log($c,'cachedelai');
53                return $page;
54        }
55        // si c'est un cacul differe, verifier qu'on est dans le bon contexte
56        if ($use_cache==2){
57                $cacher = charger_fonction('cacher','public');
58                $cacher($contexte_cache, $use_cache, $chemin2, $page, $lastmodified);
59                if (intval($use_cache)!==1 OR !$chemin2){
60                        // on n'est pas dans le bon contexte, il faut se reprogrammer !
61                        $where = is_null($contexte_cache)?"principal":"inclure_page";
62                        $args = func_get_args();
63                        job_queue_add('public_produire_page',$c="[Re] Calcul du cache $fond [$where]",$args,"",TRUE);
64                        #spip_log($c,'cachedelai');
65                        return;
66                }
67        }
68
69        include_spip('public/assembler');
70        return public_produire_page_dist($fond, $contexte, $use_cache, $chemin_cache, $contexte_cache, $page, $lastinclude, $connect);
71}
72
73?>
Note: See TracBrowser for help on using the repository browser.