Changeset 118215 in spip-zone


Ignore:
Timestamp:
Oct 18, 2019, 10:02:57 PM (14 months ago)
Author:
jluc@…
Message:

Les sprites sont désormais calculés une seule fois par page, via affichage_final. Les timestamps, qui avaient été retirés par erreur surement par r92857, sont restaurés. On peut au besoin forcer le calcul des sprites au niveau de chaque fichier en utilisant #FILTRE{creer_sprite}. Fixes https://git.spip.net/plugin/creer_sprites_css/issues/1

Location:
_plugins_/creer_sprites_css/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/creer_sprites_css/trunk/creer_sprites_fonctions.php

    r118214 r118215  
    33$GLOBALS['sprites'] = false;
    44
     5
     6/**
     7 * @param $img                  image à intégrer au sprite
     8 * @param $nom                  nom du fichier sprite
     9 * @return string|void          source de la balise <img> dont le src est vide
     10 *                              et dont le background du style fait référence au sprite, avec le bon offset
     11 *                              et un marqueur pour le timestamp
     12 */
    513function sprite($img, $nom) {
    614        // Extraire le nom du fichier, soit directement soit dans <img src>
     
    1624        }
    1725
    18         $GLOBALS['sprites']["$nom"]['fichiers'][] = $src;
     26        $GLOBALS['sprites'][$nom]['fichiers'][] = $src;
    1927       
    2028        $largeur = largeur($img);
    2129        $hauteur = hauteur($img);
    22         if ($largeur > $GLOBALS['sprites']["$nom"]['largeur']) {
    23                 $GLOBALS['sprites']["$nom"]['largeur'] = $largeur;
     30        if ($largeur > $GLOBALS['sprites'][$nom]['largeur']) {
     31                $GLOBALS['sprites'][$nom]['largeur'] = $largeur;
    2432        }
    25         $hauteur_old = max(0, $GLOBALS['sprites']["$nom"]['hauteur']);
    26         $GLOBALS['sprites']["$nom"]['hauteur'] += $hauteur;
     33        $hauteur_old = max(0, $GLOBALS['sprites'][$nom]['hauteur']);
     34        $GLOBALS['sprites'][$nom]['hauteur'] += $hauteur;
    2735
    2836        $alt = extraire_attribut($img, 'alt');
    2937        $class = extraire_attribut($img, 'class');
    3038        $fichier = sous_repertoire(_DIR_VAR, 'cache-sprites').$nom;
    31         //$fichier .= "?m=spiprempdate[$fichier]";
     39
     40        // On pose un marqueur pour le timestamp du futur fichier sprite
     41        // qui garantira le raffraîchissement de l'affichage en cas de mise à jour du sprite
     42        $fichier .= "?m=spiprempdate[$fichier]";
    3243       
    3344        $date_src = @filemtime($src);
    34         if ($date_src > $GLOBALS['sprites']["$nom"]['date']) {
    35                 $GLOBALS['sprites']["$nom"]['date'] = $date_src;
     45        if ($date_src > $GLOBALS['sprites'][$nom]['date']) {
     46                $GLOBALS['sprites'][$nom]['date'] = $date_src;
    3647        }
    3748
     
    3950}
    4051
     52/**
     53 * @param string $fichier       un nom de fichier  gif jpg ou png
     54 * @return bool|mixed           l'extension du fichier, ou false si l'extension n'est pas gif jpg ou png
     55 */
    4156function creer_sprites_terminaison_fichier_image($fichier) {
    4257        if (preg_match(',^(?>.*)(?<=\.(gif|jpg|png)),', $fichier, $regs)) {
     
    4863}
    4964
     65/**
     66 * @param array $flux
     67 * @return mixed
     68 *
     69 * Inutile désormais, gardé pour compatibilité si jamais c'était utilisé dans un code perso
     70 */
    5071function creer_sprites($flux) {
    51         $sprites = $GLOBALS['sprites'];
    52         $page = $flux['data']['texte'];
    53         if ($sprites) {
     72        $flux['data']['texte'] = filtre_creer_sprites($flux['data']['texte']);
     73        return $flux;
     74}
     75
     76/**
     77 * @param string $page
     78 * @return string           la page modifiée
     79 *
     80 * Crée les fichiers sprites à partir de toutes les informations collectées
     81 * et remplace les marqueurs de datage par le timestamp du fichier sprite
     82 *
     83 * Appelé par défaut le pipeline affichage_final
     84 * Peut aussi être appelé par un #FILTRE si on veut forcer au niveau d'un squelette
     85 */
     86function filtre_creer_sprites($page) {
     87        if ($sprites = $GLOBALS['sprites']) {
    5488                foreach ($sprites as $key => $sprite) {
    5589                        $fichier_sprite = sous_repertoire(_DIR_VAR, 'cache-sprites').$key;
    56                         $ext = creer_sprites_terminaison_fichier_image($fichier_sprite);
    5790                        $nom_fichier_sprite = substr($fichier_sprite, 0, strlen($fichier_sprite) - 4);
    5891
     
    6194                        $largeur = $sprite['largeur'];
    6295                        $hauteur = $sprite['hauteur'];
    63        
     96
    6497                        $creer = false;
     98
     99                        // On recalcule le sprite si l'un des fichiers qui le compose est plus récent que le sprite
    65100                        if ($date_src < $date_max) {
    66101                                $creer = true;
     
    69104                                $creer = true;
    70105                        }
    71                        
     106
    72107                        if (!empty($_GET['var_mode'])
    73108                                and in_array($_GET['var_mode'], array('recalcul', 'debug'))) {
    74109                                $creer = true;
    75110                        }
    76                        
     111
    77112                        if ($creer) {
    78113                                include_spip('inc/filtres_images');
    79                        
     114
    80115                                $im = imagecreatetruecolor($largeur, $hauteur);
    81116                                imagepalettetotruecolor($im);
     
    90125                                        $im_tmp = $f($img);
    91126                                        @imagepalettetotruecolor($im_tmp);
    92                                        
     127
    93128                                        $x = imagesx($im_tmp);
    94129                                        $y = imagesy($im_tmp);
     
    97132                                        $y_total += $y;
    98133                                }
    99        
     134
    100135                                _image_imagepng($im, "$nom_fichier_sprite.png");
    101136
     
    110145                }
    111146        }
    112        
     147
    113148        // Mettre les dates des fichiers en variable de chaque appel
    114149        $page = preg_replace_callback(',spiprempdate\[([^\]]*)\],', 'creer_sprites_remplacer_date', $page);
    115        
    116         $flux['data']['texte'] = $page;
     150
    117151        $GLOBALS['sprites'] = false;
    118         return $flux;
     152
     153        return $page;
    119154}
    120155
    121 
     156/**
     157 * @param array $regs       tableau dont l'élément d'index 1 est un chemin de fichier
     158 * @return string mixed     timestamp de la création du fichier
     159 */
    122160function creer_sprites_remplacer_date($regs) {
    123161static $date_fichier=array();
    124162        $fichier = $regs[1];
    125         if ($date_fichier["$fichier"] > 0) {
    126                 return $date_fichier["$fichier"];
     163        if ($date_fichier[$fichier] > 0) {
     164                return $date_fichier[$fichier];
    127165        } else {
    128                 $date_fichier["$fichier"] = @filemtime($fichier);
    129                 return $date_fichier["$fichier"];
     166                $date_fichier[$fichier] = @filemtime($fichier);
     167                return $date_fichier[$fichier];
    130168        }
    131169}
    132170
    133 function creer_sprites_recuperer_fond($flux) {
    134         if (isset($flux['args']['fond'])
    135                 and ($flux['args']['fond'] == 'modeles/logo'
    136                         or ($flux['args']['fond'] == 'modeles/lesauteurs'))) {
    137                 return $flux;
    138         }
    139         return creer_sprites($flux);
     171/**
     172 * @param $page
     173 * @return string
     174 *
     175 * Pipeline pour calculer les sprites et les timestamp
     176 */
     177function creer_sprites_affichage_final($page) {
     178        return filtre_creer_sprites($page);
    140179}
  • _plugins_/creer_sprites_css/trunk/paquet.xml

    r118214 r118215  
    22        prefix="creer_sprites"
    33        categorie="multimedia"
    4         version="1.4.1"
     4        version="1.4.2"
    55        etat="dev"
    66        compatibilite="[3.2.0;3.3.*]"
     
    1313        <licence lien="http://www.gnu.org/licenses/gpl-2.0.html">GPL</licence>
    1414
    15         <pipeline nom="recuperer_fond" inclure="creer_sprites_fonctions.php" />
    16 
     15        <pipeline nom="affichage_final" inclure="creer_sprites_fonctions.php" />
    1716</paquet>
Note: See TracChangeset for help on using the changeset viewer.