IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[Smarty] utf8_encode dans le Template


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 94
    Points : 74
    Points
    74
    Par défaut [Smarty] 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Membre chevronné
    Avatar de eric.pommereau
    Homme Profil pro
    Ingénieur, pôle cartographie
    Inscrit en
    Décembre 2004
    Messages
    715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur, pôle cartographie
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2004
    Messages : 715
    Points : 1 790
    Points
    1 790
    Par défaut
    Bonjour,

    Il est normal que ce code échoue

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {$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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	$chaineUtf8 = "Je cherche actuellement une solution élégante au problème suivant : ";
     
       $oSmarty->assign('chaineUtf8', $chaineUtf8);

    Dans le template :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    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à ... @++

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 94
    Points : 74
    Points
    74
    Par défaut
    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

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 94
    Points : 74
    Points
    74
    Par défaut
    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.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2
    Points : 2
    Points
    2
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Smarty] php dans le template
    Par cyprien95 dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 27/06/2011, 08h05
  2. [Smarty] Inclure du php dans un template et reutiliser des variables
    Par Guillomme dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 05/09/2008, 09h44
  3. [Smarty] Pourquoi le php n'est pas recommandé dans les templates ?
    Par SlymDesign dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 10/10/2007, 11h21
  4. [Smarty] Qu'entend-on par cache dans les templates
    Par pierrot10 dans le forum Bibliothèques et frameworks
    Réponses: 10
    Dernier message: 06/12/2006, 11h38
  5. [Smarty] Affectation d'une variable dans le template
    Par wkd dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 05/10/2006, 11h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo