Un filtre SPIP pour optimiser avant publication

© Christian PAULUS. Document créé le 5 septembre 2011 , mis à jour le 9 septembre 2011.

On n'est jamais heureux que dans le bonheur qu'on donne. Donner, c'est recevoir. Abbé Pierre

Accueil du site > Astuces > SPIP > Un filtre SPIP pour optimiser avant publication

Filtre / SPIP 2

Juste un petit billet sur un filtre SPIP qui mérite le détour : #FILTRE.

La particularité de ce filtre est de traiter le contenu de la page, du squelette, après construction, en fin d’assemblage, de composition, de compilation, avant d’être mise en cache. Ce filtre permet donc les dernières corrections de la page HTML avant publication.

Pour en savoir plus sur ce filtre #FILTRE, voir cette page sur spip.net qui lui est consacrée.

Exemple : placez en fin de votre squelette sommaire.html la ligne : #FILTRE{compacter_html}

Et ajoutez dans votre fichier mes_fonctions.php :

function compacter_html ($s)
{
        // les espaces en double
        $s = preg_replace('/[ \t]+/m', ' ', $s);
        // les commentaires HTML
        $s = preg_replace('/(<!--.*-->)/', '', $s);
        // l'espace en debut de ligne
        $s = preg_replace('/^\s/m', '', $s);
        // les lignes vides
        $s = preg_replace('/\n+/m', "\n", $s);
        // les espaces enrobants
        $s = trim($s);
        // renvoyer le code nettoyé
        return ($s);
}

Votre sommaire.html sera ainsi compacté avant mise en cache.

Dans le cas ici, vous gagnerez, en général, 10% sur le code généré. Ce filtre compacter_html ne fait que supprimer les espaces superflus. Mais rien de vous empèche d’optimiser ce filtre, de supprimer les déclarations de classes CSS non utilisées, voire de corriger un défaut dans votre code HTML.

Optimisation des INCLURE

Le filtre #FILTRE ne s’applique qu’au squelette en cours, pas aux squelettes inclus par la balise <INCLURE>.

Pour appliquer ce filtre compacter_html à ces squelettes inclus, vous pouvez appliquer le filtre en fin de ce squelette, ou appliquer le filtre à la version statique de la balise.

Dans le premier cas, mettez en fin des squelettes inclus la ligne

#FILTRE{compacter_html}

La modification sera globale, pour toutes vos pages incluant ce squelette.

Dans le second cas, remplacer la balise <INCLURE> par la version #INCLURE.

Par exemple, dans article.html, remplacer

<INCLURE{fond=inc-forum}{id_article} />

par

[(#INCLURE{fond=inc-forum}{id_article}|compacter_html)]

Plussoyez !

Les forums sont fermés.

  • Un filtre pour optimiser avant publication 5 septembre 2011 19:14, par RealET
    Pour quelle raison ce filtre n’est-il pas appliquer sur ce site ?

    Les forums sont fermés.

    • Un filtre pour optimiser avant publication 5 septembre 2011 20:40, par Christian PAULUS
      Il l’est.
      Juste le temps qu’il s’applique à toutes les pages (le cache à ses besoins ;-)

      Les forums sont fermés.

    • Un filtre pour optimiser avant publication 6 septembre 2011 09:20, par Christian PAULUS

      En fait, il ne l’est pas partout.

      Oublié de préciser qu’en effet, il faut appliquer le filtre à chaque squelette/noisette (sauf à utiliser la balise INCLURE au lieu de <INCLURE...).

      Et de ne pas l’appliquer dans certains cas, où l’action n’est pas souhaitée.

      Nombreux copier/coller qui peuvent paraître pénibles, mais qui offre cet avantage sélectif.

      Les forums sont fermés.

  • Un filtre SPIP pour optimiser avant publication 8 septembre 2011 10:26, par Loiseau2nuit

    Le principe de filtrer son code avant rendu sous-entend qu’on a fait des conneries en le rédigeant. Qu’est-ce que est le mieux ? Faire gaffe à ce que l’on fait et produire un code optimisé ou bien rajouter un traitement fastidieux supplémentaire pour nettoyer les conséquences de son travail ?

    Pas de critique sous jacente hein, juste une question que je me permet d’ouvrir...

    Les forums sont fermés.

    • Un filtre SPIP pour optimiser avant publication 8 septembre 2011 11:33, par Christian PAULUS

      Même en faisant gaffe, il reste souvent des optimisations disponibles. Et j’avoue que je préfère garder un code lisible, avec indentation, pour la maintenance, et le compacter pour l’envoi.

      Et dans certains cas, pour le INSERT_HEAD par exemple, ce n’est pas toujours facile ou pratique de corriger les plugins.

      Les forums sont fermés.