Forum CMS Made Simple FR
Nouveau plugin : ponctuation insécable - Version imprimable

+- Forum CMS Made Simple FR (https://forum.cmsmadesimple.fr)
+-- Forum : Ressources (https://forum.cmsmadesimple.fr/forum-4.html)
+--- Forum : Développement et Astuces (https://forum.cmsmadesimple.fr/forum-15.html)
+--- Sujet : Nouveau plugin : ponctuation insécable (/thread-2108.html)



Nouveau plugin : ponctuation insécable - Jean le Chauve - 24/07/2012

La nouvelle version se trouve ici
Il est toujours désagréable de voir un signe de ponctuation tel qu'un : ou un ? se retrouver seul sur une ligne et cela peut se produire ou pas selon la résolution d'écran.
Le seul moyen pour empêcher cela, c'est de remplacer l'espace précédant le signe de ponctuation par une espace insécable :  
Ce plugin remplace toutes les espaces ou tab situés avant »:?!; et après « par un espace insécable.

Attention, vérifiez bien que l'encodage de votre éditeur de texte soit en ANSI as UTF-8 si vous copiez le code dans un fichier (sinon, vous risquez d'avoir un problème avec les caractères « et »).
Ce plugin ne modifie en aucun cas votre base de données ou le contenu de vos pages, il agit juste sur le cache.
Si vous avez un global content block comprenant du code et que ce dernier ne fonctionne plus, vous pouvez empêcher le plugin de le modifier en ajoutant une condition && $result[1] != 'nom du globalcontent' dans cette ligne :
if ($result[0] == 'content' || $result[0] == 'globalcontent' || $result[0] == 'template' || strlen($result[0]) == '40')

Enjoy Smile


Nouveau plugin : ponctuation insécable - kraygoon - 25/07/2012

Merci :-)
J'utilisais jusqu'à présent une balise utilisateur qui me faisait tout type d'optimisation sur le texte.

Mais j'étais confronté à un souci d'ajout du code " " dans du JavaScript intégré à mon gabarit ou ma page (sachant que j'applique l'espace insécable sur les points d'exclamation, les points d'interrogation, les points virgules...).
Du genre :
Code :
[== JavaScript ==]
{literal}
<script>
alert("Coucou la boite JS !") ;
</script>
{/literal}

Qui devenait :
Code :
[== JavaScript ==]
{literal}
<script>
alert("Coucou la boite JS&nbsp;!")&nbsp;;
</script>
{/literal}

Et là, le code JS ne fonctionnait tout simplement pas... Logique.
Je n'ai pas encore testé ton plugin, mais penses-tu qu'on retombe sur ce même problème ?


Nouveau plugin : ponctuation insécable - Jean le Chauve - 25/07/2012

Salut Kraygoon Smile
Effectivement, ça ne fonctionnera pas pour ton code.
Je vais creuser, j'ai déjà ma petite idée.


Nouveau plugin : ponctuation insécable - jce76350 - 25/07/2012

manquerais pas des lignes de code j'ai des erreurs
J'ai rajouté

$result =''; // initialisation
$smarty = $template->smarty;

Pour que ça passe


Nouveau plugin : ponctuation insécable - Jean le Chauve - 25/07/2012

Tu as tout à fait raison Jce, le code est tronqué . Il vaut mieux ne pas l'utiliser pour l'instant.
Je suis occupé à l'améliorer pour éviter toute interférence avec des scripts, commentaires additionnels et autres datas. Je mettrai le nouveau code dès qu'il sera terminé.


Nouveau plugin : ponctuation insécable - Jean le Chauve - 25/07/2012

Je crois qu'il y a de nouveau un bug (j'espère que ce n'est pas encore une bêtise) : http://forum.cmsmadesimple.org/viewtopic.php?f=79&t=62105
Si c'est bien un bug, dès qu'il sera corrigé, je pourrai mieux cerner l'endroit où les remplacements se font.
[Edit] il s'agit bien d'un bug.


Nouveau plugin : ponctuation insécable - Jean le Chauve - 26/07/2012

Voici les nouveaux codes pour 1.10.3 et pour 1.11 svn 8200+
Ils semblent fonctionner avec les ! et ; comme demandé par Kraygoon (il supprime les &nbsp;+ponctuation ajoutés dans les scripts).

Je ne dis pas qu'il englobe TOUS les cas, mais il évitera un très grand % de ponctuation en tête de ligne.
Lien pour la 1.11 svn 8200+ :http://menus-cmsms-madesimple.be/bizbuzz/uploads/files/forumcms/1.11.postfilter.nonbreaking_characters.zip
OU
Code :
<?php
// put into the 'plugins' directory and name it 'postfilter.nonbreaking_characters.php'
function smarty_postfilter_nonbreaking_characters($tpl_output, &$template)
{
    $smarty = $template->smarty;
    $result = explode(':', $smarty->_current_file);
    if (count($result) > 0)
    {
        if( startswith($result[0],'tmp_') ) $result[0] = 'template';
        if ($result[0] == 'content' || $result[0] == 'globalcontent' || $result[0] == 'template' || strlen($result[0]) == '40')
        // evaluated template a disparu depuis cmsms 1.10.3 et a été remplacé par une string de 40 caractères
        //Si un global content block pose problème, vous empêcher le plugin d'y entrer en ajoutant && $result[1] != 'nom du GCB'
        {        
            $patterns = array ('#\b(\s)+([:?!;])(?=\s|<)#', '#«\s#', '#\s»#', '#(<script.*)(&nbsp;)([:?!;])(.*</script)#si');
            $replace = array ('&nbsp;$2', '«&nbsp;', '&nbsp;»', '$1 $3$4');
            $tpl_output = preg_replace($patterns, $replace, $tpl_output);        
        }
    }    
    return $tpl_output;        
}

function smarty_cms_about_postfilter_nonbreaking_characters()
{
    ?>
    <p>Author: Jean le Chauve&lt;jeanlechauve@gmail.com&gt;</p>
    <p>Version: 1.0</p>
    <p>
    Change History:<br/>
    None
    </p>
    <?php
}
?>
Merci de me donner vos retours.
ps : pour insérer des guillemets français, vous pouvez utiliser la combinaison Alt + 174 et Alt + 175

Et la version 1.10.3 : à dézipper dans /plugins
OU
Créer un fichier postfilter.nonbreaking_characters.php avec le code ci-dessous et placez-le dans /plugins
Code :
<?php
// put into the 'plugins' directory and name it 'postfilter.nonbreaking_characters.php'
function smarty_cms_postfilter_nonbreaking_characters($tpl_output, &$smarty)
{    
    $result = explode(':', $smarty->_current_file);
    if (count($result) > 0)
    {
        $patterns = array ('#\b(\s)+([:?!;])(?=\s|<)#', '#«\s#', '#\s»#', '#(<script.*)(&nbsp;)([:?!;])(.*</script)#s');
        $replace = array ('&nbsp;$2', '«&nbsp;', '&nbsp;»', '$1 $3$4');
            
        if ($result[0] == 'content' || $result[0] == 'temporary template' || $result[0] == 'globalcontent' || $result[0] == 'evaluated template')
//Si un global content block pose problème, vous empêcher le plugin d'y entrer en ajoutant && $result[1] != 'nom du GCB'
        {            
            $tpl_output = preg_replace($patterns, $replace, $tpl_output);
        }
    }    
    return $tpl_output;
        
}

function smarty_cms_about_postfilter_nonbreaking_characters()
{
    ?>
    <p>Author: Jean le Chauve&lt;jeanlechauve@gmail.com&gt;</p>
    <p>Version: 1.0</p>
    <p>
    Change History:<br/>
    None
    </p>
    <?php
}
?>



Nouveau plugin : ponctuation insécable - jce76350 - 27/07/2012

en v1.11
j'ai erreur sur la partie site Web :
Fatal error: Uncaught exception 'SmartyException' with message 'Unable to load filter Smarty_prefilter_nonbreaking_characters' in \lib\smarty\sysplugins\smarty_internal_filter_handler.php on line 50

( ! ) SmartyException: Unable to load filter Smarty_prefilter_nonbreaking_characters in \lib\smarty\sysplugins\smarty_internal_filter_handler.php on line 50


Nouveau plugin : ponctuation insécable - Jean le Chauve - 27/07/2012

Citation :SmartyException: Unable to load filter Smarty_prefilter_nonbreaking_characters in
Normal, le fichier s'appelle postfilter.nonbreaking_characters.php et pas prefilter.nonbreaking_characters.php
Vérifie dans /plugins et supprime le fichier prefilter.nonbreaking_characters.php

Et merci de le tester Smile


Nouveau plugin : ponctuation insécable - jce76350 - 27/07/2012

Ha m...de il a changer de nom depuis hier et je ne suis pas réveillé Wink Donc ça va

mais si je vais sur les pages message d'erreur
cache vidé
Warning: preg_replace() [function.preg-replace]: Compilation failed: nothing to repeat at offset 22 in \plugins\postfilter.nonbreaking_characters.php on line 14


Nouveau plugin : ponctuation insécable - Jean le Chauve - 27/07/2012

Je vérifie que je n'ai pas de nouveau tronqué le code ( Big Grin ), puis je te donne le lien pour le zip.


Nouveau plugin : ponctuation insécable - Jean le Chauve - 27/07/2012

Lien pour la 1.11 svn 8200
http://www.menus-cmsms-madesimple.be/uploads/files/forumCMS/1.11.postfilter.nonbreaking_characters.zip


Nouveau plugin : ponctuation insécable - jce76350 - 27/07/2012

Citation :Lien pour la 1.11 svn 8200

OK ça marche et même en SVN -8201-Fr Cool


Nouveau plugin : ponctuation insécable - Jean le Chauve - 27/07/2012

Il avait quand même une GROSSE erreur dans cette expression ; il manquait des crochets de classe dans :
#(<script.*)(&nbspWink([:|?|!|;])(.*</script)#si
J'en ai profité pour appliquer le plugin dans les modules.
Je mets à jours les codes et zip.


Nouveau plugin : ponctuation insécable - jce76350 - 27/07/2012

>Je mets à jours les codes et zip.
testé en 1.11 Ok