Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Slt,
j'aimerais utiliser ma propre vue.
Pour cela, j'ai créé une classe MaVue, héritant de Zend_View_Abstract.
Puis je définis toutes mes méthodes de helpers (monText, monChekbox etc...) qui en fait héritent de FormText, FormCheckbox etc...Le but étant de les modifier par la suite pour mes besoins.
J'ai aussi une classe abstraite MonControllerAbstract qui étend Zend_Controller_Action. Dans ce controller, dans la méthode init, j'initialise ma vue personnelle : je définis les chemins nécessaires (scripts, helpers, views), ainsi que certains render(header), render(footer) etc... que j'ai ajouté à la vue, genre :
$this->view->menu = $this->view->render('menu.phtml');
Plus quelques membres communs (titre page etc...)
Je précise que j'utilise le Zend_Layout : dans ma méthode init, j'ai aussi :
$layout = Zend_Layout::getMvcInstance();
$this->view->addScriptPath($layout->getLayoutPath());
afin de pouvoir utiliser le layout principal dans lequel j'ai inclus les différentes parties de mon site :
layout.phtml :
<html>
etc...
<body>
etc...
<div id="menu">
<?php echo $this->menu; ?>
</div>
etc...
Au final, dans la méthode init() de mon controller MonControllerAbstract :
function init() {
// initialisation divers : chemin des helpers, views, scripts
$this->view = new MaVue();
$this->view->addFilterPath(....);
ect...
$layout = Zend_Layout::getMvcInstance();
$this->view->addScriptPath($layout->getLayoutPath());
etc...
}
tout cela me semble correct mais j'ai du oublié un truc : il m'affiche bien mon layout principal mais pas les sous-parties!
Du coup, j'ai une page avec pas grand chose...
Je sais plus quoi faire?!
Si j'enlève la partie où j'initialise ma vue, c'est à dire :
$this->view = new MaVue();
$this->view->addFilterPath(....);
tout marche!!
Avez vous une idée?
Yoong
PS : je précise que j'utilise des modules aussi
PSPS : je fait cela car je ne veux pas utiliser le Zend_Loader qui s'exécute à chaque fois qu'on fait un
$this->formText
par exemple dans une page .phtml.
Je veux pouvoir tout maitrise moi même : je souhaite donc définir tous les helpers que j'utilise dans ma classe vue personnelle : même si c'est plus lours, moi je préfère. (je viens de Java avec Struts SPRING et Hibernate...où on doit tout maitriser!)
Dernière modification par kiminox (23-02-2008 11:21:40)
Hors ligne
Il faut précisé à Zend_Layout et/ou ViewRenderer la vue que tu utilises. faire $this->view = new MaVue(); ne suffit pas, il y'a a des méthodes appropriés.
Ou alors tu initialises t'as vue avant le dispatch() du front controller et la transmet à Zend_Layout.
Je crois que c'est comme ça pour le ViewRenderer, ça doit être pareille pour layout
Hors ligne
Hé hé, bien vu Mr.MoOx!
en fait, après avoir posté ce pb, j'avais trouvé la réponse...comme quoi, le fait d'expliquer le pb m'a permis de mieux comprendre...mon problème!
En tout cas, je m'étais dit que cela pouvait avoir l'air compliqué comme message mais Mr.MoOx me prouve qu'il a compris!
C'était bien ça :
$layout = Zend_Layout::getMvcInstance();
$this->view->addScriptPath($layout->getLayoutPath());
$layout->view = $this->view;
et tout roule!
J'ai effectivement constater en mettant des Zend_Log de partout (oui oui de partout avec différents niveaux de détail bien sûr) que Zend_Layout (enregistré comme un plugin) utilise en effet sa vue interne : en fait, il recupere la vue du viewRenderer, instanciée par defaut. Donc, en lui indiquant ma propre vue, ben ça marche bien.
En espérant que cela aidera qqun.
Yoong
Hors ligne
Pages: 1