source: spip-zone/_plugins_/inclure-ajaxload/inclure-ajaxload.php @ 41790

Last change on this file since 41790 was 41790, checked in by arno@…, 11 years ago

Simplification du meta refresh, et passage à 2 secondes. (Eviter que les bots prennent le refresh pour une redirection - mais theoriquement, les bots ne voient pas le meta...)

File size: 4.1 KB
Line 
1<?php
2
3if (!defined("_ECRIRE_INC_VERSION")) return;
4
5// Par defaut, cache de 2 heures pour l'ajax statique
6// possibilité de forcer une duree avec le critere {ttl_ajaxload=60*60*24}
7if(!defined("_DUREE_CACHE_AJAXSTATIC")) define("_DUREE_CACHE_AJAXSTATIC", 7200);
8
9
10// Evolution de #INCLURE pour inclusions ajaxload
11// #INCLURE{fond=xxx,....ajax,ajaxload} le fait
12function balise_INCLURE($p) {
13        $f = balise_INCLURE_dist($p);
14
15        if (false !== strpos($f->code, "'ajaxload'"))
16                $f->code = preg_replace('/recuperer_fond/', 'recuperer_fond_ajax',
17                $f->code, 1);
18
19        return $f;
20}
21
22// cree un appel ahah vers ce recuperer_fond
23function recuperer_fond_ajax() {
24        $args = func_get_args();
25
26        $args[1]["fond"] = $args[0];
27
28        $cle = md5(serialize($args));
29        $ajax = entites_html(encoder_contexte_ajax($args[1]));
30       
31
32        $alt = entites_html(sinon($args[1]['ajaxloadalt'],$args[1]['fond']));
33        $message = $args[1]['ajaxload'];
34        $searching = sinon($args[1]['ajaxsearching'],
35                "<img src='".find_in_path('images/searching.gif')."' alt='$alt' />");
36        // Le lien mène à l'action de pose du cookie no_js
37        $url = "spip.php?action=ia_nojs&amp;retour=".urlencode(parametre_url(self(),'no_js','oui'));
38
39        if (isset($args[2]['ajax']) AND $args[2]['ajax']=='1') 
40                $class_ajax = " ajaxbloc env-$ajax";
41
42        // Appliquer la methode:
43        // - soit laisser les automatismes Ajax de SPIP,
44        // - soit sauvergarder "en dur" le resultat HTML
45        $methode = $args[1]["ajaxload"];
46        if ($methode == "html") {
47               
48                $fichier = sous_repertoire(_DIR_VAR, 'cache-ajaxload').$cle.".html";
49               
50                $ttl = _DUREE_CACHE_AJAXSTATIC;
51                if ($args[1]['ttl_ajaxload']) $ttl = valeur_numerique($args[1]['ttl_ajaxload']);
52               
53                // Test sur le fichier
54                if (!file_exists($fichier) || _request('var_mode') == "recalcul"
55                                || (file_exists($fichier) && date("U") - @filemtime($fichier) > $ttl)
56                        ){
57                        //echo "RECALCULER";
58                        $contenu = call_user_func_array('recuperer_fond', $args);
59                        ecrire_fichier($fichier, $contenu);
60                        // ecrire une version .gz pour content-negociation par apache, cf. [11539]
61                        //ecrire_fichier("$fichier.gz",$contenu, true);
62
63                }
64               
65                if (_request('var_no_ajax')
66                OR _request('var_mode') == 'inclure')
67                        return $contenu;
68
69                $ret =
70                        "<div class='includestatic$class_ajax'><a href=\"$url\" rel=\"$fichier\">$searching</a></div>";
71               
72               
73                //print_r($contenu);
74       
75        } else {
76                if (_request('var_no_ajax')
77                OR _request('var_mode') == 'inclure')
78                        return call_user_func_array('recuperer_fond', $args);
79       
80                $ret =
81                        "<div class='includeajax$class_ajax'><a href=\"$url\" rel=\"$ajax\">$searching</a></div>";
82        }
83       
84        return $ret;
85}
86
87function remettre_fond_ajax($matches) {
88        $url = $matches[2];
89        $c = $matches[3];
90        $c = decoder_contexte_ajax($c);
91
92        $page = recuperer_fond($c["fond"],$c,array('trim'=>false));
93       
94        return $page;
95}
96
97function remettre_fond_ajax_static($matches) {
98        $url = $matches[3];
99        if (file_exists($url)) $page = join("", @file($url));
100        else $page = "";
101       
102        return $page;
103}
104
105function INCLUREAJAXLOAD_affichage_final($page) {
106
107        // Si le visiteur est un robot de moteur de recherche,
108        // reconstituer les pages completes
109        if(_IS_BOT || $_COOKIE["no_js"] == "no_js" ) {
110                include_spip("inc/filtres");
111                include_spip("public/assembler");
112                $page = preg_replace_callback(",(<div class='includeajax[^\']*'><a href=\"(.*)\" rel=\"(.*)\">.*</a></div>),msU", "remettre_fond_ajax", $page);
113                $page = preg_replace_callback(",(<div class='includestatic[^\']*'><a href=\"(.*)\" rel=\"(.*)\">.*</a></div>),msU", "remettre_fond_ajax_static", $page);
114        }
115
116        return $page;
117}
118
119function INCLUREAJAXLOAD_insert_head($flux) {
120        $flux .= "\n<script src=\"".find_in_path('javascript/inclure-ajaxload.js')."\" type=\"text/javascript\"></script>";
121
122$flux = '<?php if ($_COOKIE["no_js"] != "no_js" && !_IS_BOT) { ?>
123<script type="text/javascript"><!--
124document.write("<\/script><script>/*");
125//--></script>
126<meta http-equiv="refresh" content="2; url=spip.php?action=ia_nojs&amp;retour=<?php echo urlencode(parametre_url(self(),\'no_js\',\'oui\'));?>" />
127<script type="text/javascript">/* */</script>
128<?php } else { ?>
129<script type="text/javascript"><!--
130        document.cookie = "no_js=; expires=Thu, 01-Jan-70 00:00:01 GMT;";
131--></script>
132<?php } ?>'.$flux;
133
134        return $flux;
135}
136
137
138
139?>
Note: See TracBrowser for help on using the repository browser.