Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 13-08-2009 19:11:18

Eureka
Membre
Date d'inscription: 18-07-2009
Messages: 81

Zend_Layout

(re)bonjour,

J'ai une question concernant la gestion de templates (layout) multicolonnes.
Après de nombreuses lectures j'ai vu des cas où des éléments de vues étaient rendus via l'aide de vue 'action', d'autres avec des ActionStacks et des rendus dans des segments, etc...

Je cherche à savoir comment gérer au mieux un layout, à ces niveaux :

1/ Si mon layout a 3 colonnes (dont une zone centrale pour le contenu principal) et que le contenu des 2 colonnes dépend de la page appelée, comment puis-je gérer cela en factorisant au maximum le code ?

Exemple : pour les pages A, B et C je veux voir apparaitre les contenus U, V, W dans la colonne gauche et X, Y et Z dans la colonne droite, alors que pour les pages D, E, et F je veux les contenu U, V et T à gauche, et R, S, X à droite.

Idée : Faudrait-il appeler dans chaque action (des controllers) une aide d'action développée pour chaque colonne, en passant à chacune, pour la colonne qu'elle gère, le nom des contenus que je veux y voir apparaitre dans le constructeur ? Et l'aide d'action pourrait par exemple se charger d'appeler l'action associée à chaque nom de contenu dans un controller spécifique aux éléments de colonne (eg. Columnelements_Controller) pour ajouter les vues générées par chaque *Action() dans un segment du viewRenderer (ou en 'append' dans un placeholder() ?) qui serait injecter dans la layout ?

Exemple de code (saisi ici même, donc probablement pas full-opérationnel) :

Code:

 // controller (affichage d'une page)
class A_Controller extends Zend_Controller_Action {
    
    public function _init() {
        Zend_Controller_Action_HelperBroker::addHelper('leftcolumnhelper');
    }
    
    public function indexAction() {
        $this->_helper->getHelper('leftcolumnhelper')->useElements('x', 'y', 'z');
        
        
    }
}

Code:

 // aide d'action
class My_Leftcolumnhelper extends Zend_Controller_Action_Helper [
    
    public useElements($args) {
        foreach ($args as $arg) {
            // un moyen d'appeler la méthode $arg (x, y, z) du controller
            // "Columnelements_Controller" en passant le nom de la colonne
            // en paramètre
        }
    }
}

Code:

 // controller servant juste à récupérer des éléments à injecter au cas par cas dans les colonnes
class Columnelements_Controller extends Zend_Controller_Action {
    
    public function xAction($columnName) {
        $myAgenda = new My_Agenda();
        $myAgenda->setParams(...);
        ...
        $this->layout()->placeholder($columnName)->append($this->render('common/agenda'))
    }
    
    public function yAction() {
        ...
        $this->layout()->placeholder($columnName)->append($this->render('...'))
    }
 
}

Avec le même colonne dans une aide d'action pour la colonne de droite (ou une factorisation dans la même classe)
Puis dans le fichier du layout faire un "echo" du placeholder de chaque colonne.

Est-ce une approche intéressante ? Il y a-t-il plus judicieux ou plus flexible plus paramétrable d'après votre expérience Zend ?

Merci

Hors ligne

 

#2 21-08-2009 16:47:41

Eureka
Membre
Date d'inscription: 18-07-2009
Messages: 81

Re: Zend_Layout

Il y a des personnes qui maîtrisent les placeholders afin de pouvoir me dire si l'intérêt est vain de les utiliser dans une telle situation ? Ou si éventuellement il y aurait une approche plus judicieuse à divers niveaux ? (histoire de pas implémenter cette méthode trop souvent et me rendre compte que finalement ce n'était pas une solution adéquate à toutes les problématiques)

Hors ligne

 

#3 06-05-2010 03:56:49

probitaille
Membre
Lieu: Montréal
Date d'inscription: 20-04-2009
Messages: 336
Site web

Re: Zend_Layout

Salut, je relance exactement la même question que Eureka...

Placeholder, actionStack, viewHelper....c'est quoi la meilleure façon pour le cas si bien décrit ?

Hors ligne

 

#4 06-05-2010 08:41:27

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: Zend_Layout

Il n'y pas de meilleurs façon de faire. Si c'était le cas, toutes ces possibilités n'existerais pas. C'est à toi de trouver TA solution
Il faut d'abord que tu détermines la façon dont tu vas codé tes blocs (et non comment tu vas les intégrés).
Ton bloc as-il besoin d'une intégration totale MVC ? (vas t-il utilisé un model ? tiré partie d'un controlleur ? nécessité une vue ?)
Seront-ils dépendant de la vue principale ? (à la voie en terme visuel et technique)


----
Gruiiik !

Hors ligne

 

#5 06-05-2010 15:25:33

probitaille
Membre
Lieu: Montréal
Date d'inscription: 20-04-2009
Messages: 336
Site web

Re: Zend_Layout

Merci nORKy pour cette réflexion. Toujours très appréciés avoir des réponses de toi.

En effet, tu as raison, tout dépendant de comment je veux structuré mon code. Je crois que je vais opter pour la solution rendant mes blocks indépendant du reste...donc avoir plusieurs module MVC. Mes applications tentent à grossir très rapidement, je crois que cette solution sera idéale pour ajouter du contenu sans difficulté.

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