Changeset 112168 in spip-zone


Ignore:
Timestamp:
Oct 26, 2018, 8:37:16 AM (2 years ago)
Author:
jluc@…
Message:

extension et facilitation de #CACHE{1200,duree-progressive date-naissance} + #CACHE{1200,filtre-bidouille grave}

Location:
_plugins_/cachelab/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/cachelab/trunk/inc/cachelab_invalideur.php

    r112136 r112168  
    9292//
    9393function maj_invalideurs($fichier, &$page) {
     94global $Memoization;
     95// Rq : ici, le texte du cache est non zipé (cf function creer_cache dans memoization),
     96// tandis que la version en cache peut être zipée (avec index 'gz').
    9497        if  (LOG_INVALIDATION_CORE) {
    9598                // Abondamment appelé. À part pour pas noyer les autres
    9699                spip_log ("maj_invalideurs($fichier, &page)", "invalideur_core_maj_invalideurs");
    97100        }
     101
     102        function get_f_arg($f, $arg='') {
     103                if (strpos($f, ' ')) {
     104                        $fparts = array_filter(explode(' ',$f));
     105                        $f = array_shift($fparts);
     106                        $arg = implode(' ', $fparts);
     107                }
     108                return array ($f, $arg);
     109        }
     110
     111        // Pour le calcul dynamique d'une durée de cache, la fonction user
     112        // reçoit la *valeur* de l'une des valeurs de l'environnement (par défaut "date_creation")
     113        // Exemple #CACHE{1200,duree-progressive date_naissance}
    98114        if (isset($page['entetes']['X-Spip-Methode-Duree-Cache'])) {
    99                 global $Memoization;
    100                 // FIXME : ici, le texte est non zipé (cf function creer_cache dans memoization),
    101                 // alors que la version mise en cache a peut être été zipée (index gz).
    102                 // Il faut soit reziper le texte au besoin, soit récupérer la version cachée :
    103                 // $page = $Memoization->get($fichier);
    104                 // Ou changer creer_cache pour qu'il appelle maj_invalideurs *avant* d'avoir écrit le cache
     115                $f = 'cachelab_calcule_duree_'.$page['entetes']['X-Spip-Methode-Duree-Cache'];
     116                list ($f, $arg) = get_f_arg($f, 'date_creation');
     117                if (function_exists($f)) {
     118                        if (!isset($page['contexte'][$arg])) {
     119                                spip_log ("#CACHE avec squelette {$page['source']} et calcul durée avec $f mais pas de '$args' dans le contexte ".print_r($page['contexte'],1), "cachelab_erreur");
     120                                return;
     121                        }
     122                        $duree = $f($page['contexte'][$arg]);
     123                        spip_log ("#CACHE $f ($arg={$page['contexte'][$arg]}) renvoie : $duree s", "cachelab");
    105124
    106                 $f = 'cachelab_calcule_duree_cache_'.$page['entetes']['X-Spip-Methode-Duree-Cache'];
    107                 if (function_exists($f)) {
    108                         $duree = $f($page);
    109                         spip_log ("#CACHE $f (date_creation={$page['contexte']['date_creation']}) renvoie : $duree s", "cachelab");
    110125                        $page['duree'] = $duree;
     126                        $page['entetes']['X-Spip-Cache']=$duree;
     127
    111128                        // On garde un souvenir
    112129                        // unset ($page['entetes']['X-Spip-Methode-Duree-Cache']);
    113                         $page['entetes']['X-Spip-Cache']=$duree;
    114130
    115                         // Comme memoization, on ajoute une heure histoire de pouvoir tourner
    116                         // sur le cache quand la base de donnees est plantée (à tester)
     131                        // Comme memoization, on ajoute une heure "histoire de pouvoir tourner
     132                        // sur le cache quand la base de donnees est plantée (à tester)"
     133                        // TODO CORE ? changer creer_cache pour qu'il appelle maj_invalideurs *avant* d'avoir écrit le cache
    117134                        $Memoization->set($fichier, $page, 3600+$duree);
    118135                }
    119136                else
    120                         spip_log ("#CACHE duree cache : a fonction '$f' n'existe pas\n".print_r($page,1), "cachelab_erreur");
     137                        spip_log ("#CACHE duree cache : la fonction '$f' n'existe pas (arg='$arg')\n".print_r($page,1), "cachelab_erreur");
     138        }
     139       
     140        // Exemple : #CACHE{1200,filtre-bidouille grave} peut grave bidouiller le cache yc ses métadonnées
     141        if (isset($page['entetes']['X-Spip-Filtre-Cache'])) {
     142                $f = 'cachelab_filtre_cache_'.$page['entetes']['X-Spip-Filtre-Cache'];
     143                list ($f, $arg) = get_f_arg($f);
     144                if (function_exists($f)) {
     145                        spip_log ("#CACHE appelle le filtre $f ($arg)", "cachelab");
     146                        $f($page, $arg);
     147                        // ici rien de plus, c'est le filtre qui fait ce qu'il veut
     148                        // et qui peut enregistrer le résulat
     149                }
     150                else
     151                        spip_log ("#CACHE filtre : la fonction '$f' n'existe pas (arg='$arg')\n".print_r($page,1), "cachelab_erreur");
    121152        }
    122153}
  • _plugins_/cachelab/trunk/paquet.xml

    r112136 r112168  
    22        prefix="cachelab"
    33        categorie="outil"
    4         version="0.2.2"
     4        version="0.3.0"
    55        etat="dev"
    66        compatibilite="[3.0.0;3.2.*]"
  • _plugins_/cachelab/trunk/public/cachelab_balises.php

    r112102 r112168  
    7777                                $code .= ".'<'.'" . '?php header("X-Spip-Statique: oui"); ?' . "'.'>'";
    7878                        }
    79                        
    80                         if (strpos($pa, 'calcul-')===0) {
    81                                 $methode = substr($pa, 7);
     79
     80                        if (strpos($pa, 'duree-')===0) {
     81                                $methode = substr($pa, 6);
    8282                                $ajout = ".'<'.'" . '?php header("X-Spip-Methode-Duree-Cache: '.$methode.'"); ?' . "'.'>'";
    8383                                $code .= $ajout;
    8484                                spip_log ("Méthode de calcul de la durée du cache : $methode", 'cachelab');
     85                        }
     86
     87                        if (strpos($pa, 'filtre-')===0) {
     88                                $methode = substr($pa, 7);
     89                                $ajout = ".'<'.'" . '?php header("X-Spip-Filtre-Cache: '.$methode.'"); ?' . "'.'>'";
     90                                $code .= $ajout;
     91                                spip_log ("Filtre sur le cache APC : $methode", 'cachelab');
    8592                        }
    8693                }
Note: See TracChangeset for help on using the changeset viewer.