Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 26-10-2010 11:56:45

Saeba
Membre
Date d'inscription: 05-02-2008
Messages: 31

[ZF 1.10.8] Appeler l'aide de vue Translate dans une autre aide de vue

Bonjour,

Dans une de mes applications, j'utilise l'aide de vue "translate" via des fichiers .po.
Ma traduction fonctionne lorsque j'appelle l'aide de vue directement, de la forme

Code:

$this -> translate('montexte');

J'ai ensuite eu besoin de créer une nouvelle aide de vue personnalisée, pour la mise en forme de données.
J'ai donc créé mon aide de vue.
Dans cette aide de vue, entre autres traitements, je dois appeler l'helper translate.

Code:

class Zend_View_Helper_MyHelper {
    function MyHelper($var)
    {
         return $this -> translate($var);
    }
}

Lorsque j'éxécute ce code, j'obtiens l'erreur

Code:

Fatal error: Call to undefined method Zend_View_Helper_MyHelper::translate() in /var/www/myapp/application/views/helpers/MyHelper.php on line 10

Est il possible d'appeler l'aide translate dans une autre aide de vue, ou bien est ce que je dois faire le translate sur les données que je récupère de mon aide de vue directement dans la vue ?

Laurent

Hors ligne

 

#2 26-10-2010 12:18:27

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [ZF 1.10.8] Appeler l'aide de vue Translate dans une autre aide de vue

Salut,

Le mot clé $this fait référence à l'instance de la classe en cours. Donc dans la vue : $this = l'objet vue et dans un helper : $this = l'objet helper.

Tu peux accéder à la vue depuis un helper via $this->view.

Code:

return $this->view->translate($var);

A+ benjamin.


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#3 27-10-2010 13:50:23

Saeba
Membre
Date d'inscription: 05-02-2008
Messages: 31

Re: [ZF 1.10.8] Appeler l'aide de vue Translate dans une autre aide de vue

Bonjour,
Lorsque je fais

Code:

Zend_Debug::dump( $this -> view -> translate('attente'));

dans mon helper, j'obtiens

Code:

Notice: Undefined property: Zend_View_Helper_MyHelper::$view in /var/www/myapp/application/views/helpers/MyHelper.php on line 9

Hors ligne

 

#4 27-10-2010 14:23:22

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [ZF 1.10.8] Appeler l'aide de vue Translate dans une autre aide de vue

Hello,

Tu dois étendre la classe abstraite Zend_View_Helper_Abstract.

Le namespace que tu utilises pour tes classes n'est pas bon. Le namespace "Zend_" est déjà utilisé par le ZF.

Deux possibilités :

1 - Ton aide de vue est spécifique à ton projet et ton module

Dans ce cas là tu dois la placer dans :

Code:

application/
  modules/
    default/  <--- nom du module
      views/
        helpers/
          MyHelper.php <-- un nom plus explicite ça serait plus idéal

Ensuite ta classe doit être dans le même namespace que ton module, ex. si le namespace du module est "Default" :

Code:

Default_View_Helper_MyHelper extends Zend_View_Helper_Abstract
{
    // [...]
}

2 - Ton aide de vue est générique

Tu dois placer ta classe dans ta librarie perso. qui doit utiliser son propre namespace, ex. My_

Code:

library/
  My/
    View/
      Helper/
        MyHelper.php

Code:

class My_View_Helper_MyHelper extends Zend_View_Helper_Abstract
{
    // [...]
}

De cette manière tu peux transporter ta lib de projets en projets.

A+ benjamin.

P.S : le namespace du module est défini dans le fichier bootstrap.php de chaque module.


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#5 27-10-2010 14:39:43

Saeba
Membre
Date d'inscription: 05-02-2008
Messages: 31

Re: [ZF 1.10.8] Appeler l'aide de vue Translate dans une autre aide de vue

Bonjour Delprog,

Merci pour ta réponse qui m'a permis de résoudre mon problème !
En fait, lors de la déclaration de mon Helper, je ne le fesais pas étendre de Zend_View_Helper_Abstract.
Une fois corrigé ça, tout fonctionne.

J'en ai profité pour déplacer mes Helpers dans ma librairie perso (possibilité 2).
J'avais fait une confusion avec les répertoires conseillés dans le quickstart mais qui ne concerne pas les applications modulaires. C'est pour cette raison que j'avais un view/helpers dans application

Encore merci,
Laurent

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages