Changeset 41775 in spip-zone for _plugins_/inclure-ajaxload


Ignore:
Timestamp:
Oct 17, 2010, 8:06:30 AM (9 years ago)
Author:
arno@…
Message:

Ajout d'une nouvelle methode: {ajaxload=html} (la noisette ajax est alors un pur fichier HTML statique, traité hors SPIP).

Location:
_plugins_/inclure-ajaxload
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/inclure-ajaxload/inclure-ajaxload.php

    r41668 r41775  
    22
    33if (!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
    49
    510// Evolution de #INCLURE pour inclusions ajaxload
     
    2126        $args[1]["fond"] = $args[0];
    2227
    23         if (_request('var_no_ajax')
    24         OR _request('var_mode') == 'inclure')
    25                 return call_user_func_array('recuperer_fond', $args);
    26 
    2728        $cle = md5(serialize($args));
    2829        $ajax = entites_html(encoder_contexte_ajax($args[1]));
     
    3334        $searching = sinon($args[1]['ajaxsearching'],
    3435                "<img src='".find_in_path('images/searching.gif')."' alt='$alt' />");
    35 
    3636        // Le lien mène à l'action de pose du cookie no_js
    3737        $url = "spip.php?action=ia_nojs&amp;retour=".urlencode(parametre_url(self(),'no_js','oui'));
     
    4040                $class_ajax = " ajaxbloc env-$ajax";
    4141
    42         $ret =
    43                 "<div class='includeajax$class_ajax'><a href=\"$url\" rel=\"$ajax\">$searching</a></div>";
     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") {
    4447               
     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       
    4584        return $ret;
    4685}
     
    5695}
    5796
     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
    58105function INCLUREAJAXLOAD_affichage_final($page) {
    59106
     
    64111                include_spip("public/assembler");
    65112                $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);
    66114        }
    67115
  • _plugins_/inclure-ajaxload/javascript/inclure-ajaxload.js

    r41314 r41775  
    1414                }
    1515        });
     16        $('.includestatic').each(function() {
     17                var me = $(this);
     18                var env = $('a', this).attr('rel');
     19                if (env) {
     20                        $('a', this).attr('href','#');
     21                        $.ajax({
     22                                url: env,
     23                                type: "GET",
     24                                cache: true,
     25                                success: function(c) { me.html(c); }
     26                        });
     27                }
     28        });
    1629});
  • _plugins_/inclure-ajaxload/plugin.xml

    r41668 r41775  
    22        <nom>AjaxLoad pour #INCLURE</nom>
    33        <auteur>
    4         Fil &#169; 2009 - GNU/GPL
     4        Fil &amp; ARNO* &#169; 2009 - GNU/GPL
    55        </auteur>
    66        <version>
    7         0.65
     7        0.7
    88        </version>
    99        <etat>
     
    1111        </etat>
    1212        <description>
    13         Ajoute une option <code>{ajaxload}</code> &agrave; la balise <code>#INCLURE</code>
     13        Ajoute une option <code>{ajaxload}</code> &agrave; la balise <code>#INCLURE</code>.
     14        La noisette n'est alors pas incluse, mais charg&eacute;e dynamiquement en Ajax au chargement de la page.
    1415
    15         Ce qui permet de diff&eacute;rer le calcul du truc inclus sur un deuxi&egrave;me hit
     16        Autre m&eacute;thode: <code>{ajaxload=html}</code> fabrique une noisette statique (en HTML non dynamique)
     17        dans <code>/local/cache-ajaxload</code>, son appel se faisant ainsi hors SPIP.
     18        Le cache n'est donc plus g&eacute;r&eacute; par le <code>#CACHE</code> de SPIP; il est par d&eacute;faut de 2 heures, on peut le forcer
     19        en ajoutant le crit&egrave;re <code>{ttl_ajaxload=60*60*24}</code>.
     20
    1621        </description>
    1722        <prefix>
     
    2631        </pipeline>
    2732        <chemin dir='' />
    28         <necessite id="SPIP" version="[2.0.0;]" />
     33        <necessite id="SPIP" version="[2.1.0;]" />
    2934        <categorie>outil</categorie>
    3035</plugin>
Note: See TracChangeset for help on using the changeset viewer.