Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 29-03-2007 11:58:38

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

[Résolu] Comment ne pas répéter son design? + Question existantiel

Bonjour à tous,

Voilà j'ai découvert Zend la semaine dernière et j'ai rapidement pris goût smile
Pour commencer, j'ai suivi des tutoriaux :
http://www.kitpages.fr/zf_quickIntroduction.html
http://www.kitpages.fr/zf_tutorial.html

J'ai tout pigé (j'ai étudié le MVC durant cettee année (Licence Développement Intra-Internet), ça marche nickel je suis content. Avant j'implémentais le MVC (comme on peut le faire sur le web... :? ) avec un méthode maison pour mes sites.
Du coup, j'avais des urls genre :
http://www.monsite.com/index.php?page=m … ction=truc

Le truc, c'est que mon desgin se situait dans la page index.php où je faisais un include() de page=machin et dans ma page machin.php j'avais un switch($_GET[action]) qui me fait penser au $view->render() de Zend...

Mais avec les vues, y-a-til un moyen simple de mettre en place un desgin qui est tout le temps le même (sans avoir à faire un include("header.php") et un include("footer.php") dans chaque vue...

Je souhaite en fait utiliser Zend pour développer une partie admin pour site marchant (elle sera énormément paramétrable et donc réutilisable pour plusieurs sites que nous allons développer, c'est le but) et j'hésite un peu à l'utiliser  car je me demande si c'est bien sage (car peut peut-être que les sites en eux mêmes ne seront pas développer avec Zend...).

Merci de vos réponses...

Hors ligne

 

#2 29-03-2007 13:07:33

Isilgawen
Membre
Lieu: Limoges
Date d'inscription: 23-03-2007
Messages: 106

Re: [Résolu] Comment ne pas répéter son design? + Question existantiel

Oui tu as plusieurs possibilités.
Pour ma part j'ai une vue de base qui me sert de pattern qui est affichée systématiquement (grâce au dispatchLoopShutdown) et dans celle-ci je fait appel à mes autres vues avec des

echo $this->render("header.phtml"), echo $this->render("login.phtml"), echo $this->render("footer.phtml"),
echp $this->render($this->pageToDisplay) ...

La seul chose à savoir c'est qu'avec ce procédé chaque bloc est filtré par render.
Donc à voir si ca te conviens, sinon tu peux toujours surcharger render pour eviter le filtrage systématique.

Y en a t'il a qui fonctionne différement ? une autre astuce, approche ?

Dernière modification par Isilgawen (29-03-2007 13:27:58)

Hors ligne

 

#3 29-03-2007 13:12:10

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [Résolu] Comment ne pas répéter son design? + Question existantiel

Si je ne filtre pas  le header et footer, je procède comment ?
Je met un include(header) et include(footer) dans toutes mes vues? ou je fai les met dans mes xxxAction() ??

Hors ligne

 

#4 29-03-2007 13:23:24

Isilgawen
Membre
Lieu: Limoges
Date d'inscription: 23-03-2007
Messages: 106

Re: [Résolu] Comment ne pas répéter son design? + Question existantiel

Les mettre dans toutes tes actions c'est vraiment lourd, peu maintenable et pas du tout dry.
Des includes pourquoi pas, mais dans une vue générale que tu appel à chaque fois, c'est beaucoup plus dry que de repeter ton header dans toutes tes vues.

Hors ligne

 

#5 29-03-2007 13:41:29

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [Résolu] Comment ne pas répéter son design? + Question existantiel

Oki
(j'veux pas passer pour un noob mais dry ça a quel sens??)

Comme je l'ai dis, je commence à apprendre Zend... Alors je fais comment techniquement pour mettre une vue général que j'appelle à chaque fois? Je vois pas trop là... smile

Hors ligne

 

#6 29-03-2007 13:53:04

Isilgawen
Membre
Lieu: Limoges
Date d'inscription: 23-03-2007
Messages: 106

Re: [Résolu] Comment ne pas répéter son design? + Question existantiel

DRY : don't repeat yourself.

Tu as plusieurs possibilités tu peux utiliser un moteur de template type smarty (http://framework.zend.com/manual/en/zen … ripts.html), ou un plugin.

Moi j'utilise le plugin et plus particulièrment la méthode dispatchLoopShutdown http://framework.zend.com/manual/en/zen … ugins.html

Mais je pense qu'il y a d'autres possibilités, vous en pensez quoi les autres forumeux smile ?

Hors ligne

 

#7 29-03-2007 14:03:13

stephane
Membre
Lieu: Biot
Date d'inscription: 26-03-2007
Messages: 33
Site web

Re: [Résolu] Comment ne pas répéter son design? + Question existantiel

Isilgawen a écrit:

DRY : don't repeat yourself.

Cool. Je ne connaissais pas cet acronyme. J'aurais du RTFM avant, c'est sûrement marqué dedans wink.

Hors ligne

 

#8 29-03-2007 14:05:03

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [Résolu] Comment ne pas répéter son design? + Question existantiel

Tu peux aussi sous classer Zend_View en ajoutant les headers à inclure :

Code:

class MyView extends Zend_View {
    protected function _run()
    {
        include "myHeader.php";
        include func_get_arg(0);
        include "myFooter.php";
    }
}

Perso je ne recommande pas cette approche... je recommande plutot le include à chaque vue... c'est bcp plus facile à lire pour un 2e développeur, ça te permet d'utiliser des headers ou footers différents suivant les pages...

Là on est assez proche de la querelle de clocher sur ce point, choisis suivant ta sensibilité smile

Personnellement j'utilise smarty comme Isilgawen, mais j'ajoute mes includes header et footer à la main sur chaque vue...
A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#9 29-03-2007 14:09:29

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [Résolu] Comment ne pas répéter son design? + Question existantiel

Merci (une fois de plus)

Déjà je tiens à dire que je ne souhaite pas utiliser de template (ma raison )

Donc je vais me pencher sur le plugin...

Sinon par rapport à ça :

Moi a écrit:

Je souhaite en fait utiliser Zend pour développer une partie admin pour site marchant (elle sera énormément paramétrable et donc réutilisable pour plusieurs sites que nous allons développer, c'est le but) et j'hésite un peu à l'utiliser  car je me demande si c'est bien sage (car peut peut-être que les sites en eux mêmes ne seront pas développer avec Zend...).

Je voudrais savoir selon les cas possibles s'il est judicieux d'utiliser Zend ou pas... :
- Seul ma partie admin utilise Zend.
- Mon site et ma partie admin utiliserons Zend.

En fait je me demande si je vais pas galéré avec les histoire de routage, car je compte faire une admin portable comme je l'ai dis, et je me demande si je devrais changer beaucoup de code selon que mon site utilise zend avec mvc ou pas...

Des réactions?

Hors ligne

 

#10 29-03-2007 14:16:41

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [Résolu] Comment ne pas répéter son design? + Question existantiel

J'utilise le zend framework pour une admin générique de boutique. Mes fronts utilisent également le Zend Framework.
Ca marche parfaitement (http://www.euromapping.com encore en cours de finalisation).

Par contre tant qu'à faire, fais le front avec le Zend Framework aussi, ça te permet d'utiliser le système de packages. C'est un des gros points forts du ZF. En plus le front d'une boutique est toujours un peu compliqué (parcours de paiement, espace client,...), tu as tout à gagner à utiliser le ZF (en plus autant utiliser la même techno partout, tu gagneras du temps smile )

Chez moi l'admin et le front sont des sites complètement différents (domaines différents). Ce qui est partagé, c'est le modèle et toutes les classes business.
Dans tous les cas, j'ai un routage à faire pour le front, mais c'est simple quand on a l'habitude.

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#11 29-03-2007 14:25:57

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [Résolu] Comment ne pas répéter son design? + Question existantiel

Oki merci bon je vais me lancer sur ce pas avec Zend alors... smile

Je vais me pencher sur le plugin et dispatchLoopStartup() (d'ailleurs, j'ai pas bien pigé à quoi servait preDispatch(), enfin c'est quoi la différence?)

Merci à vous pour vos réponses rapides (j'ouvrirais surement d'autres topics big_smile )

Hors ligne

 

#12 29-03-2007 16:49:36

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [Résolu] Comment ne pas répéter son design? + Question existantiel

Dans mon plugin, j'ai mis ça

Code:

    public function dispatchLoopStartup($request) {
        $this->getResponse()->appendBody('<!--dispatchLoopStartup() called-->');
    }

Mais je voudrais plutot avoir un truc genre include à ce niveau parce que faire un plugin avec le design du site dedans j'le sens pas trop...
Je me vois mal faire un truc genre

Code:

public function dispatchLoopStartup($request) {
        $this->getResponse()->appendBody(file_get_contents("php/Admin/Admin_header.php"));
    }

Mais peut être que je suis à coté de la plaque...

Hors ligne

 

#13 29-03-2007 17:00:03

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [Résolu] Comment ne pas répéter son design? + Question existantiel

Bon en fait j'ai choisi de mettre mes include dans chaque vue. Je trouve ça un poil chiant mais au moins là je comprends ce que je fais big_smile

Bon j'arrête de poster sinon ça va finir en mono-topic... xD

Hors ligne

 

#14 30-03-2007 09:40:38

Isilgawen
Membre
Lieu: Limoges
Date d'inscription: 23-03-2007
Messages: 106

Re: [Résolu] Comment ne pas répéter son design? + Question existantiel

Voila un bout de code que j'avais fait en 0.6.
Maintenant en 0.9 faut voir si on peux pas faire mieux vu qu'il y a eu pas mal de modif dans zend_view. Notement au niveau du render() qui va chercher dans le controller/action tout seul maintenant.
Faut que j'étudis ca à l'occas.

Code:

    
        public function __construct() {
           Zend::loadClass('Zend_View');
           $view = new Zend_View;
           $view->setScriptPath("../application/views/");
           Zend::register('view', $view);
    }

    public function preDispatch($infosDispatch) {
        $this->_infos = $infosDispatch;
        return $infosDispatch;
    }

    public function dispatchLoopShutdown() {
               Zend::registry("view")->headerTpl = "header.tpl.php";
               Zend::registry("view")->footerTpl = "footer.tpl.php";
           Zend::registry('view')->contentPageTpl = ($this->_infos->getControllerName()?$this->_infos->getControllerName():"index")."/".($this->_infos->getActionName()?$this->_infos->getActionName():"index").".tpl.php";
           echo Zend::registry('view')->render('application.tpl.php');

Dans ton dispatchLoopShutdown tu peux à ta convenance selon le controller et l'action changer ton header ou footer voir le template principal.

Et dans ton application.tpl.php tu as par exemple :

echo $this->render($this->headerTpl);
echo $this->render($this->contentPageTpl);
echo $this->render($this->footerTpl);

Dernière modification par Isilgawen (30-03-2007 09:42:57)

Hors ligne

 

#15 30-03-2007 11:00:13

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [Résolu] Comment ne pas répéter son design? + Question existantiel

Ah ouais pas mal. C bien pensé... Un seul truc que je trouve bizarre :

Et dans ton application.tpl.php tu as par exemple :

echo $this->render($this->headerTpl);
echo $this->render($this->contentPageTpl);
echo $this->render($this->footerTpl);

le this, il sort d'ou? car on est plus dans le même script là, non?

Hors ligne

 

#16 30-03-2007 11:13:01

Isilgawen
Membre
Lieu: Limoges
Date d'inscription: 23-03-2007
Messages: 106

Re: [Résolu] Comment ne pas répéter son design? + Question existantiel

On est dans une vue donc $this représente ton instance de Zend_view c'est comme si tu avais : Zend_registry::get("view")->render(.....);

Hors ligne

 

#17 30-03-2007 11:15:12

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [Résolu] Comment ne pas répéter son design? + Question existantiel

OKAYYyyyyy

Bon ben c'est nickel. Ton code il me convient à merveille. Super merci smile

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