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 03/01/2008, 15h17   #1
Membre du Club
 
Inscription : décembre 2007
Messages : 94
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 94
Points : 40
Points : 40
Par défaut utf8_encode dans le Template

Bonjour,

J'ai un script qui affiche des titres d'article mais les accent sont remplacé par (�) sous PHP pas de soucis pour la conversion avec utf8_encode, mais comment faire dans le template directement?

Voici ma boucle qui affiche les données stocké dans un array l'utf8_encode ne fonctionne pas :
Code HTML :
1
2
3
4
5
<ul id="menu">
{section name=idx loop=$table_menu_init}
<li><a id="{$table_menu_init[idx].name|lower}" href="{$table_menu_init[idx].link}">{$table_menu_init[idx].name|utf8_encode}</a></li>
{/section}
</ul>

Merci pour votre aide.
PseT34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2008, 16h10   #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
Bonjour,

Il est normal que ce code échoue

Code :
{$table_menu_init[idx].name|utf8_encode}
...puisque Smarty ne possède pas de modificateur utf8_encode. Cela explique que tu ne peux le faire de cette façon.

Je vois deux choix possibles

Soit tu encode côté php, ce qui te fait reprendre les données de ton tableau et faire un remplacement pour chacune de tes valeurs (je comprends que ça te gave un peu ).

Sinon tu crées ton propre modificateur que tu places dans le répertoire plugins de smarty :

Par exemple nom du fichier modifier.utf8_encode.php
Contenu :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
/**
 * Smarty plugin
 * @package Smarty
 * @subpackage plugins
 */
 
 
/**
 * Smarty utf8_encode modifier plugin
 *
 * Type:     modifier<br>
 * Name:     utf8_encode<br>
 * Purpose:  convert string utf-8
 * @author   Eric POMMEREAU
 * @param string
 * @return string
 */
function smarty_modifier_utf8_encode($string)
{
    return utf8_encode($string);
}
 
?>
Comme ça tu pourrais utiliser le modificateur utf8_encode comme tu voulais :

Dans le fichier php :

Code php :
1
2
3
	$chaineUtf8 = "Je cherche actuellement une solution élégante au problème suivant : ";
 
   $oSmarty->assign('chaineUtf8', $chaineUtf8);

Dans le template :

Code html :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml">
   <head>
   	<title></title>
   </head>
   <body>
		Sans encode : {$chaineUtf8}
      <br />
		Avec encode : {$chaineUtf8|utf8_encode}
   </body>
</html>

Le résultat :

Sans encode : Je cherche actuellement une solution �l�gante au probl�me suivant :
Avec encode : Je cherche actuellement une solution élégante au problème suivant :

Voilà ... @++
eric.pommereau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2008, 16h49   #3
Membre du Club
 
Inscription : décembre 2007
Messages : 94
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 94
Points : 40
Points : 40
J'obtiens ce message d'erreur :

Dans Template :

{$table_news_home[idx].titre|utf8_encode}


/** * Smarty utf8_encode modifier plugin * * Type: modifier
* Name: utf8_encode
* Purpose: convert string utf-8 * @author Eric POMMEREAU * @param string * @return string */ function smarty_modifier_utf8_encode($string) { return utf8_encode($string); } ?>
Fatal error: Smarty error: [in news_listing.tpl line 14]: [plugin] function smarty_modifier_utf8_encode() not found in /home/dev3dvf/www-NicyicVit5/libs/plugins/modifier.utf8_encode.php (core.load_plugins.php, line 73) in /home/dev3dvf/www-NicyicVit5/libs/Smarty.class.php on line 1095
PseT34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2008, 16h53   #4
Membre du Club
 
Inscription : décembre 2007
Messages : 94
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 94
Points : 40
Points : 40
Erf j'ai oublié un Tag <?php en début de script.

Merci beaucoup pour ton aide, la deuxième avec ton Tut d'initiation.
PseT34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2012, 13h07   #5
Invité de passage
 
Inscription : août 2008
Messages : 2
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 2
Points : 1
Points : 1
Par défaut Smarty 3 intégration to_charset

Bonjour,
J'ai un problème similaire avec le formatage des caractères spéciaux.
Ma base Mysql est en UTF-8, mes pages php et tpl sont encodé en UTF-8, les metadata sont aussi sur UTF-8 et mon navigateur est paramétré sur UTF-8.
Malgré cela je doit encode les données récupérées en base.
Le poste m'a beaucoup intéressé car je ne veux pas faire l'encodage dans le php mais plutôt juste avant l'affichage et donc dans le template.
La solution de développer son propre modificateur est un bon palliatif mais depuis la version 3 de Smarty il y a 2 modificateurs: to_charset et from_charset basés sur la fonction php mb_convert_encoding.

Chose étrange, lorsque j'utilise le modifieur to_charset, mes caractères accentués sont tout simplement supprimés...

Print_r sur le retour de la requête:
Array ( [id] => 1 [titre] => Odyss�e [idAuteur] => 1 )
Array ( [id] => 2 [titre] => Sahara [idAuteur] => 1 )
Array ( [id] => 3 [titre] => Dragon [idAuteur] => 1 )
Array ( [id] => 4 [titre] => Une chance de trop [idAuteur] => 2 )
Array ( [id] => 5 [titre] => Ne le dis a personne [idAuteur] => 2 )
Array ( [id] => 6 [titre] => Disparu � jamais [idAuteur] => 2 )
Array ( [id] => 7 [titre] => Dune [idAuteur] => 3 )
Array ( [id] => 8 [titre] => La barri�re de santaroga [idAuteur] => 3 )
Array ( [id] => 9 [titre] => Les guerriers du silence [idAuteur] => 4 )
Array ( [id] => 10 [titre] => La citadelle hyponeros [idAuteur] => 4 )
Array ( [id] => 11 [titre] => Terra mater [idAuteur] => 4 )

code du template:
Code :
1
2
3
4
 
{section name=idx_smarty_tableau loop=$smarty_table_mysql}
	<li>Valeur: {$smarty_table_mysql[idx_smarty_tableau]['titre']|to_charset:'UTF-8'}</li>
{/section}
Affichage:
  • Valeur: Odysse
  • Valeur: Sahara
  • Valeur: Dragon
  • Valeur: Une chance de trop
  • Valeur: Ne le dis a personne
  • Valeur: Disparu jamais
  • Valeur: Dune
  • Valeur: La barrire de santaroga
  • Valeur: Les guerriers du silence
  • Valeur: La citadelle hyponeros

Une idée? Une erreur?
Merci d'avance pour votre aide
Piafh est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h53.


 
 
 
 
Partenaires

Hébergement Web