Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
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
$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.
class Zend_View_Helper_MyHelper { function MyHelper($var) { return $this -> translate($var); } }
Lorsque j'éxécute ce code, j'obtiens l'erreur
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
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.
return $this->view->translate($var);
A+ benjamin.
Hors ligne
Bonjour,
Lorsque je fais
Zend_Debug::dump( $this -> view -> translate('attente'));
dans mon helper, j'obtiens
Notice: Undefined property: Zend_View_Helper_MyHelper::$view in /var/www/myapp/application/views/helpers/MyHelper.php on line 9
Hors ligne
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 :
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" :
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_
library/ My/ View/ Helper/ MyHelper.php
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.
Hors ligne
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
Pages: 1