Smarty 3.1 et les plugins : comment faire / howto
Sur la toute dernière version de Smarty (3.1), voici comment créer un plugin personnalisé.
Pour résumer, l’un de mes sites n’était pas assez optimisé.
Le code qui sortait était :
<body class="sbody">
<div>
....
</div>
....
</body>
J’ai donc ajouté le filtre d’optimisation qui supprime les espaces en début :
$this->smarty->loadFilter('output', 'trimwhitespace');
Le code de sortie est devenu :
<body class="sbody"><img src="/title.jpg" /><div>....</div>....</body>
Tout mise en une ligne, super !
Le seul problème, c’est que ça ne fonctionnait pas avec le code JavaScript, il faut en effet les retours à la ligne.
J’ai donc crée mon plugin qui ne fait que supprimer les espaces en début de ligne, et remplacer de “retour + line feed” (deux octets) de fin de ligne par un seul octet “retour”.
Voici le code, je vous laisse comprendre, c’est extrêmement simple :
/* Déclarer un plugin "block". * Block = il faut un début et une fin. * Ici : {triml} {/triml} */ $this->smarty->registerPlugin('block', 'triml', array($this,'smarty_block_trim_l'));
Après avoir déclaré le plugin, il faut faire la fonction adéquate :
/** * Fonction de plugin smarty pour supprimer tous les espaces * en début de ligne entre les blocs {triml}{/triml} * "triml" = trimleft * Voir le constructeur et chercher $this->smarty->registerPlugin() * * @param array $params les paramètres qu'on passe à {strip_nl} * @param variant $content Le contenu qu'il y a dans le bloc * @param variant $template Le nom du template * @param variant &$repeat * * @return int Description retour */ public function smarty_block_trim_l( array $params, $content, $template, &$repeat) { $content = preg_replace('/\n[\s]+/', "\n", $content); return $content; }
Et voilà maintenant, vous pourrez aussi optimiser votre site comme un professionnel.
Bien évidemment le gain le plus gros est dans la compression (voir mod_deflate)
One comment