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)