Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5

Nouveau plugin : ponctuation insécable
#1

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
Répondre
#2

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 ?
Répondre
#3

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

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

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

Pour que ça passe

J-C Etiemble v 2.2.xx
Répondre
#5

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é.
Répondre
#6

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...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.
Répondre
#7

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...acters.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
}
?>
Répondre
#8

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

J-C Etiemble v 2.2.xx
Répondre
#9

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
Répondre
#10

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

J-C Etiemble v 2.2.xx
Répondre
#11

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

Lien pour la 1.11 svn 8200
http://www.menus-cmsms-madesimple.be/upl...acters.zip
Répondre
#13

Citation :Lien pour la 1.11 svn 8200

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

J-C Etiemble v 2.2.xx
Répondre
#14

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.
Répondre
#15

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

J-C Etiemble v 2.2.xx
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 2 visiteur(s)