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

Last change on this file since 93008 was 93008, checked in by fil@…, 5 years ago

nofollow sur le a href ajax

File size: 6.6 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                // inserer UNE FOIS le X-Spip_Filtre:INCLUREAJAXLOAD_affichemeta
20                // equivalent a #FILTRE{INCLUREAJAXLOAD_affichemeta}
21               
22                // attention cependant, si cet ajout est fait quelque soit la balise #INCLURE
23                // les tests [(#INCLURE{fond=x/y}|trim) si du contenu alors... ]
24                // ne fonctionnent plus car le retour peut contenir le code du header insere.
25                // on ne le fait donc uniquement si l'on croise un inclure avec {ajaxload}
26                // qui de toutes facons, lui, retourne la div pour le js.
27               
28                if(!defined("_INCLURE_AJAX_LOAD_INSERT")) {
29                        define("_INCLURE_AJAX_LOAD_INSERT", "oui");
30                        $f->code .= ".'<' . '"
31                                .'?php header("X-Spip-Filtre: \'.'
32                                        ."INCLUREAJAXLOAD_affichemeta"
33                                . " . '\"); ?'.'>'";
34
35                        $f->interdire_scripts = false;
36                }
37        }
38        return $f;
39}
40
41
42// cree un appel ahah vers ce recuperer_fond
43function recuperer_fond_ajax() {
44        $args = func_get_args();
45
46        $args[1]["fond"] = $args[0];
47
48        $cle = md5(serialize($args));
49        $ajax = entites_html(encoder_contexte_ajax($args[1]));
50       
51
52        $alt = entites_html(sinon($args[1]['ajaxloadalt'],$args[1]['fond']));
53        $message = $args[1]['ajaxload_message'];
54        $searching = sinon($args[1]['ajaxsearching'],
55                "<img src='".find_in_path('images/searching.gif')."' alt='$alt' />")
56                 . ($message ? " <span class='ajaxload_message'>$message</span>" : "");
57        // Le lien mène à l'action de pose du cookie no_js
58        $url = "spip.php?action=ia_nojs&amp;retour=".urlencode(parametre_url(self(),'no_js','oui'));
59
60        if (isset($args[2]['ajax']) AND $args[2]['ajax']=='1') 
61                $class_ajax = " ajaxbloc env-$ajax";
62
63        // Appliquer la methode:
64        // - soit laisser les automatismes Ajax de SPIP {ajaxload}
65        // - soit sauvegarder "en dur" le resultat HTML {ajaxload=html}
66        // - soit retourner l'url de la noisette {ajaxload=url}
67        // - soit retourner l'url du fichier html {ajaxload=url_html}
68        $methode = $args[1]["ajaxload"];
69        $entete = "<"."?xml version='1.0' encoding='".$GLOBALS['meta']['charset']."'?".">";
70        //echo $entete;
71
72        $ttl = _DUREE_CACHE_AJAXSTATIC;
73        if ($args[1]['ttl_ajaxload']) $ttl = valeur_numerique($args[1]['ttl_ajaxload']);
74
75        if ($methode == "url") {
76                $ajax = urlencode($ajax);
77                $ret = "spip.php?var_ajax=recuperer&amp;var_ajax_env=$ajax";
78               
79        } else if ($methode == "esi") {
80                $ajax = urlencode($ajax);
81                $ret = "<!--esi <esi:include src='spip.php?var_ajax=recuperer&amp;var_ajax_env=$ajax' />-->";
82                $ret .= "<esi:remove><div class='includestatic'><a href=\"#\" rel=\"spip.php?var_ajax=recuperer&amp;var_ajax_env=$ajax\">$searching</a></div></esi:remove>";
83
84        } else if ($methode == "url_html") {
85                $fichier = sous_repertoire(_DIR_VAR, 'cache-ajaxload').$cle.".html";
86
87                // Test sur le fichier
88                if (!file_exists($fichier) || _request('var_mode') == "recalcul"
89                                || (file_exists($fichier) && date("U") - @filemtime($fichier) > $ttl)
90                        ){
91                        //echo "RECALCULER";
92                        $contenu = $entete.call_user_func_array('recuperer_fond', $args);
93                                               
94                        ecrire_fichier($fichier, $contenu);
95                        // ecrire une version .gz pour content-negociation par apache, cf. [11539]
96                        //ecrire_fichier("$fichier.gz",$contenu, true);
97
98                }
99               
100                $ret = $fichier;
101               
102        } else if ($methode == "html") {
103               
104                $fichier = sous_repertoire(_DIR_VAR, 'cache-ajaxload').$cle.".html";
105               
106               
107                // Test sur le fichier
108                if (!file_exists($fichier) || _request('var_mode') == "recalcul"
109                                || (file_exists($fichier) && date("U") - @filemtime($fichier) > $ttl)
110                        ){
111                        //echo "RECALCULER";
112                        $contenu = $entete.call_user_func_array('recuperer_fond', $args);
113                        ecrire_fichier($fichier, $contenu);
114                        // ecrire une version .gz pour content-negociation par apache, cf. [11539]
115                        //ecrire_fichier("$fichier.gz",$contenu, true);
116
117                }
118               
119                if (_request('var_no_ajax')
120                OR _request('var_mode') == 'inclure')
121                        return $contenu;
122
123                $ret =
124                        "<div class='includestatic$class_ajax'><a href=\"$url\" rel=\"$fichier\">$searching</a></div>";
125               
126               
127                //print_r($contenu);
128       
129        } else {
130                if (_request('var_no_ajax')
131                OR _request('var_mode') == 'inclure')
132                        return call_user_func_array('recuperer_fond', $args);
133       
134                $ret =
135                        "<div class='includeajax$class_ajax'><a href=\"$url\" rel=\"$ajax nofollow\">$searching</a></div>";
136        }
137       
138        return $ret;
139}
140
141function remettre_fond_ajax($matches) {
142        $url = $matches[2];
143        $c = $matches[3];
144        $c = decoder_contexte_ajax($c);
145
146        $page = recuperer_fond($c["fond"],$c,array('trim'=>false));
147       
148        return $page;
149}
150
151function remettre_fond_ajax_static($matches) {
152        $url = $matches[3];
153        if (file_exists($url)) $page = join("", @file($url));
154        else $page = "";
155       
156        return $page;
157}
158
159function INCLUREAJAXLOAD_affichemeta($page) {
160
161        if (
162                (strpos($page, "includeajax") > 0 || strpos($page, "includestatic") > 0)
163                && !strpos($page, "<esi:remove><div class='includestatic'>") > 0
164        ) {
165
166                $javascript = '<?php if ($_COOKIE["no_js"] != "no_js" && !_IS_BOT && _request("no_js") != "oui") { ?>
167<script type="text/javascript"><!--
168document.write("<\/script><script>/*");
169//--></script>
170<meta http-equiv="refresh" content="2; url='.$GLOBALS["meta"]["adresse_site"].'/spip.php?action=ia_nojs&amp;retour=<?php echo urlencode(self(\'&\'));?>" />
171<script type="text/javascript">/* */</script>
172<?php } else { ?>
173<script type="text/javascript"><!--
174        document.cookie = "no_js=; expires=Thu, 01-Jan-70 00:00:01 GMT;";
175--></script>
176<?php } ?>'.$javascript;
177               
178                $page = str_replace("</head>", "$javascript</head>", $page);
179        }
180        return $page;
181}
182
183function INCLUREAJAXLOAD_affichage_final($page) {
184        // Si le visiteur est un robot de moteur de recherche,
185        // reconstituer les pages completes
186        if(_IS_BOT || (isset($_COOKIE["no_js"]) && $_COOKIE["no_js"] == "no_js") || _request("no_js") == "oui" ) {
187                include_spip("inc/filtres");
188                include_spip("public/assembler");
189                $page = preg_replace_callback(",(<div class='includeajax[^\']*'><a href=\"(.*)\" rel=\"(.*)\">.*</a></div>),msU", "remettre_fond_ajax", $page);
190                $page = preg_replace_callback(",(<div class='includestatic[^\']*'><a href=\"(.*)\" rel=\"(.*)\">.*</a></div>),msU", "remettre_fond_ajax_static", $page);
191        }
192
193        return $page;
194}
195
196function INCLUREAJAXLOAD_insert_head($flux) {
197        $flux .= "\n<script src=\"".find_in_path('javascript/inclure-ajaxload.js')."\" type=\"text/javascript\"></script>";
198        return $flux;
199}
200
201
202
203?>
Note: See TracBrowser for help on using the repository browser.