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

MVC PHP Discussion :

Définir une variable et la rendre accessible dans toutes les vues [ZF 1.9]


Sujet :

MVC PHP

  1. #1
    Membre à l'essai
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 24
    Points : 19
    Points
    19
    Par défaut Définir une variable et la rendre accessible dans toutes les vues
    Bonjour,

    J'ai déclaré un tableau à portée globale qui contient le wording de mon site en plusieurs langues :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $wording = array(
    	'header_title' => array(
    		'en-uk'	=> 'Header title',
    		'fr-fr'	=> 'Titre du header'
    	),
    	...
    );
    Chacune de mes vues a besoin d'accéder à cette variable.

    Pouvez-vous me dire s'il faut déclarer $wording en tant que variable globale ou utiliser un système d'assignation différent ($wording se trouve pour l'instant dans ma vue layout...) ?
    Merci d'avance !

  2. #2
    Membre chevronné Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Points : 1 895
    Points
    1 895
    Par défaut
    pour utiliser les traductions tu peux par exemple faire une classe qui génère un singleton pour gérer ces données

  3. #3
    Membre à l'essai
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 24
    Points : 19
    Points
    19
    Par défaut
    En fait, je souhaiterais connaître la best practice permettant d'utiliser une variable — en l'occurrence de type array — de manière globale (mais pas forcément définie en tant que globale) dans toutes les vues sous-jacentes. Cette variable est pour l'instant définie au niveau du layout (layout.phtml) par pure commodité.

    1. De quelle manière "ZF compliant" définiriez-vous cette variable et à quel endroit ?
    2. Comment accéder par la suite à cette variable au sein de chaque vue ?

  4. #4
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Bonjour,

    Je pense que le plus simple est d'utiliser Zend_Registry, même si utiliser une classe statique pourrait en faire bondir plus d'un.

  5. #5
    Membre à l'essai
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 24
    Points : 19
    Points
    19
    Par défaut
    Merci pour ta réponse s.n.a.f.u mais cette solution oblige à faire un appel get au registre dans chacune des vues, non ?

    N'existe-t'il pas une manière plus élégante sachant que je souhaiterais accéder à ma variable via $this depuis le layout ou n'importe quelle vue ? Par exemple, :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <title><?php echo $this->wording['header_title']['fr-fr'] ?></title>
    Quant à la déclaration, dois-je la positionner dans le bootstrap, le fichier index.php ou conseillez-vous un autre endroit plus indiqué ?

  6. #6
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Tu peux aussi alimenter une variable de vue au moment de l'initialisation de la ressource, dans le Bootstrap par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    protected function _initView() {
        $view = new Zend_View();
        $view->variable = $machin;
        return $view;
    }

  7. #7
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    je pense qu'une instance de Zend_Translate fournie à tes vues devrait répondre élégamment à ton problème.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 38
    Points : 71
    Points
    71
    Par défaut
    Le zend_translate me semble assez judicieux.

    Si tu as un classe mère pour tous tes controlleurs tu peux affecter à ta vue un ensemble de valeur.

    Tu peux aussi créer un helper de vue.

  9. #9
    Membre à l'essai
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 24
    Points : 19
    Points
    19
    Par défaut
    Très judicieux ! Voilà donc ce que j'ai fais :

    1. création d'un fichier de traduction TMX
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <tmx version="2.0" xmlns="http://www.lisa.org/tmx20">
      <header adminlang="en" creationtool="locale4j" creationtoolversion="1.1" o-tmf="unknown"
      segtype="block" srclang="*all*"/>
      <body>
        <tu tuid="message1">
          <tuv xml:lang="fr">
            <seg>
              Ceci est un message en français.
            </seg>
          </tuv>
          <tuv xml:lang="en">
            <seg>
              This is a message in english.
            </seg>
          </tuv>
        </tu>
      </body>
    </tmx>
    2. ajout d'une méthode _initTranslation() dans ma classe Bootstrap
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    protected function _initTranslation()
    {
    	if (strrchr($_SERVER['HTTP_HOST'], '.') === '.fr') {
    		$locale = new Zend_Locale("fr");
    	}
    	else {
    		$locale = new Zend_Locale("en");
    	}
    	$translator = new Zend_Translate('tmx', '/chemin/vers/translations.tmx', $locale);
    	Zend_Registry::set('translator', $translator);
    }
    3. affectation des traductions au sein du IndexController
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public function init()
    {
    	$this->view->translator = Zend_Registry::get('translator');
    }
    4. utilisation depuis layout.phtml ou tout autre vue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo $this->translator->_('message1')
    Merci pour vos contributions !

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/10/2012, 19h31
  2. Réponses: 14
    Dernier message: 10/07/2008, 11h56
  3. [WIN2003]définir une variable d'environnement dans un batch
    Par creezeer dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 28/08/2007, 11h25
  4. rendre accessible une variable dans toutes les classes
    Par sony351 dans le forum C++Builder
    Réponses: 5
    Dernier message: 24/03/2007, 01h15
  5. [PHP-JS] Définir une variable dans le htaccess
    Par Ikaly dans le forum Langage
    Réponses: 2
    Dernier message: 09/03/2007, 18h09

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