Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > Templates > Smarty
Smarty Forum d'entraide sur le moteur de templates Smarty. Avant de poster -> FAQ Smarty et Cours Smarty
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/11/2007, 10h23   #1
Membre Expert
 
Avatar de Janitrix
 
Inscription : octobre 2005
Messages : 3 398
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 3 398
Points : 2 331
Points : 2 331
Par défaut Smarty et regex

Bonjour,

J'utilise Smarty depuis quelques temps, et j'aimerai maintenant parser un texte pour réaliser une sorte de bbcode.

Cependant, j'ai quelques problèmes. En effet, mes balises de mise en forme sont de type '<bold>texte en gras</bold>', et l'utilisation des '< >' ne semble pas convenir à Smarty. Voici mon code qui ne fonctionne pas, car le texte n'est pas modifié :
Code :
{$article->article|regex_replace:'/\<bold\>/':'<strong>'}
J'ai réduit l'exemple au minimum afin de me concentrer uniquement sur cette histoire de <. Si j'enlève les \ avant les <, bien sûr cela ne fonctionne pas non plus, je les ai ajouté par la suite en espérant que cela changerait quelque chose .

Autre question : mon code ayant beaucoup de pattern, j'aimerai ne pas avoir à le copier/coller dans toutes les pages qui en ont besoin. Je me demandais s'il était possible de faire quelque chose dans ce genre :
Code :
{$article->article|regex_replace:'/$pattern/':'$replacements'}
$pattern et $replacements étant des variables assignées à Smarty.

Merci à vous
Janitrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2007, 22h29   #2
Membre Expert
 
Avatar de eric.pommereau
 
Homme ERIC POMMEREAU
Ingénieur intégration
Inscription : décembre 2004
Messages : 683
Détails du profil
Informations personnelles :
Nom : Homme ERIC POMMEREAU
Âge : 38
Localisation : France

Informations professionnelles :
Activité : Ingénieur intégration
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2004
Messages : 683
Points : 1 294
Points : 1 294
Hello,

J'ai regardé pour le premier cas, en fait tu n'as pas besoin d'échapper les '<' ou les '>' en mettant des backslashes.

L'exemple suivant fonctionne bien chez moi :

Code :
{$test_regexp|regex_replace:'/<i>/':'<b>'}
Pour l'autre cas j'ai pas eu trop le temps de regarder, je te promets de regarder ça rapidement si personne ne te répond !!

Un truc qui pourra t'aider : qu'est-ce qui se passe quand tu utilise le modificateur : regex_replace ?

Si tu regardes le fichier compilé (dans templates_c) tu as un truc du genre :

Code :
<?php echo ((is_array($_tmp=$this->_tpl_vars['test_regexp'])) ? $this->_run_mod_handler('regex_replace', true, $_tmp, '/<i>/', '<b>') : smarty_modifier_regex_replace($_tmp, '/<i>/', '<b>')); ?>
Dans ton cas (remplacement d'une chaîne de caractères), c'est la fonction smarty_modifier_regex_replace qui est appelée :

Code :
1
2
3
4
5
6
7
8
9
function smarty_modifier_regex_replace($string, $search, $replace)
{
    if (preg_match('!([a-zA-Z\s]+)$!s', $search, $match) && (strpos($match[1], 'e') !== false)) {
        /* remove eval-modifier from $search */
        $search = substr($search, 0, -strlen($match[1])) . preg_replace('![e\s]+!', '', $match[1]);
    }
 
    return preg_replace($search, $replace, $string);
}
Voilà ... si ça peut aider !!

@++
eric.pommereau est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h51.


 
 
 
 
Partenaires

Hébergement Web