Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 25-04-2008 01:45:39

slaughter
Membre
Date d'inscription: 01-04-2008
Messages: 217

[Zend_layout][1.5]Organisation des layouts pour une appli par module

Bonjour à tous,

Je construit actuellement le squelette de mon site. Pour l'instant, j'ai un fonctionnement par module et multilingue.
Je commence à regarder le principe des layouts pour inclure mon header et mon menu automatiquement.
Quelques précision :
- Le header doit être identique sur tout le site.
- Le menu est spécialisé par module.

J'ai donc suivit le cours de "developpez" => http://julien-pauli.developpez.com/tuto … nd-layout/

J'ai choisit l'insertion de layout par le helper de vue "ActionHelper".

J'ai donc ceci dans mon bootstrap

Code:

Zend_Layout::startMvc($config->layout);

Voilà mon fichier de configuration:

Code:

[general]
db.adapter = PDO_MYSQL
db.config.host = localhost
db.config.username = root
db.config.password = ****
db.config.dbname = site1

layout.layout     = template
layout.contentKey = contenu
layout.layoutPath = ./../application/modules/news/views/layouts
layout.layoutModule = news

Voici le code du fichier template.phtml:

Code:

<?php echo $this->action('header','index','news') ?>
<?php echo $this->layout()->contenu?>

et voilà l'arborescence :

|->site1
    |->application
        |->models
        |->modules
            |->news
                |->controllers
                |->views
                    |->layout
                         |->template.phtml
                    |->scripts
                        |->affichage
                             |->index.phtml
    |->library
        |->Zend
    |->public   
         |->index.php

Donc comme vous pouvez le voir, j'ai configurer mon repertoire de layout pour pointer vers le dossier suivant
=> \application\modules\news\views\layouts

Le problème est que je pointe vers le module news. Donc cela marche bien pour le menu que j'inclus dans les pages de ce module mais comment faire pour les autres modules ?
Comment faire également pour le header qui doit être identique sur toutes les pages?

En faite ma question est de façon générale : Quelle est le meilleur moyen d'insérer des layouts dans une appli par module?

Avez vous un modules spécial qui possède tous les layouts et tous les "templates" ?

Merci d'avance pour votre aide.

Hors ligne

 

#2 25-04-2008 09:00:36

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

Re: [Zend_layout][1.5]Organisation des layouts pour une appli par module

Tu as la réponse sous tes yeux
regarde le prototype de la fonction $this->action($action, $controller, $module)
Tu peut atteindre l'action que tu veux qq soit son lieu.
donc, header tu peux le laisser comme il est, et pour ton menu :

$this->action('menu', 'index', Zend_Controller_Front::getInstance()->getRequest()->getModuleName());
D'ailleurs, je crois qu'on peut faire
$this->action('menu', 'index'); et le framework utilise le module courant


----
Gruiiik !

Hors ligne

 

#3 25-04-2008 15:50:26

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

Re: [Zend_layout][1.5]Organisation des layouts pour une appli par module

C'est même mieux, car utiliser le frontController dans la vue... c'est pas trop l'esprit du MVC !

http://framework.zend.com/wiki/download/attachments/43224/321px-ModelViewControllerDiagram.svg.png

MVC and Why You Should Care

Hors ligne

 

#4 27-04-2008 23:01:17

slaughter
Membre
Date d'inscription: 01-04-2008
Messages: 217

Re: [Zend_layout][1.5]Organisation des layouts pour une appli par module

Mr.MoOx a écrit:

C'est même mieux, car utiliser le frontController dans la vue... c'est pas trop l'esprit du MVC !

Heu... Qu'est ce qui est mieux que quoi ?

Hors ligne

 

#5 28-04-2008 09:18:27

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

Re: [Zend_layout][1.5]Organisation des layouts pour une appli par module

$this->action('menu', 'index');

que ca

$this->action('menu', 'index', Zend_Controller_Front::getInstance()->getRequest()->getModuleName());


----
Gruiiik !

Hors ligne

 

#6 28-04-2008 10:42:40

slaughter
Membre
Date d'inscription: 01-04-2008
Messages: 217

Re: [Zend_layout][1.5]Organisation des layouts pour une appli par module

Oki. C'est ce que je pensais.

Donc pour conclure:
J'ai créée un module mep (mise en page) dans lequel je met tous les layouts généraux. Dans mon cas, il y aura par exemple le header.phtml et je l'appelle depuis tous les autres modules de cette façon:

Code:

$this->action('header','index','mep');

Pour les layouts propres au module, je l'appel de cette façon:

Code:

$this->action('menu', 'index');

Je pense que c'est la meilleure façon d'avoir quelque chose de souple.
Sauf contre indication, je pars dans ce sens.

Merci encore pour votre aide. (vraiment utile ce forum smile )

Dernière modification par slaughter (28-04-2008 10:42:57)

Hors ligne

 

#7 28-04-2008 21:39:06

slaughter
Membre
Date d'inscription: 01-04-2008
Messages: 217

Re: [Zend_layout][1.5]Organisation des layouts pour une appli par module

Il me vient une autre question :

Pourquoi passer par le fichier template.phtml pour fusionner les différentes vues et ne pas inclure directement les vues de mise en page (menu, header) directement dans la vue du module.

Dans mon cas je pourrais avoir dans le fichier \application\modules\news\views\script\affichage\index.phtml le contenu suivant:

- mon code html
- l'introduction de mon header <?php echo $this->action('header','header','mep');?>
- l'introduction de mon menu <?php echo $this->action('menu', 'index');?>
- la création du contenu dans la page.

exemple :

Code:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
    <title><?php echo $this->escape($this->title); ?></title>
    <link rel="stylesheet" type="text/css" media="screen" href="<?php echo $this->baseUrl;?>/styles/site.css" />
</head>
<body>
    <?php echo $this->action('header','header','mep');?>
    <?php echo $this->action('menu', 'index');?>
    <div id="content">
        
        <h1><?php echo $this->escape($this->title); ?></h1>

         Voilà le contenu de ma page.
        
        
    </div>
</body>
</html>

ça marche tout aussi bien et cela est encore plus souple. Je peux inclure des vues dans n'importe quelle partie du contenu de la page.

Ne pensez vous pas que c'est la meilleure solution?

Dernière modification par slaughter (28-04-2008 21:41:09)

Hors ligne

 

#8 29-04-2008 09:50:42

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

Re: [Zend_layout][1.5]Organisation des layouts pour une appli par module

Mais tu fais comme tu veux.
Comme je viens de le dire dans un autre poste, zend offre la liberté à l'utilisateur de choisir son organisation.

Perso, mon header est le même partout, donc, le DRY m'incite à le mettre dans layout.html smile

De plus, je te rappelle que tu as des aides du vue pour le doctype, les metas, title, etc...


----
Gruiiik !

Hors ligne

 

#9 29-04-2008 09:55:06

slaughter
Membre
Date d'inscription: 01-04-2008
Messages: 217

Re: [Zend_layout][1.5]Organisation des layouts pour une appli par module

Oui, bien sur, je fait comme je veux. Mais "comme je veux" n'est pas forcément la bonne solution à long terme. C'est pour cela que je viens sur ce forum faire appel à des utilisateurs qui ont plus de recule que moi sur le ZF.
Ces deux solutions sont quand même vraiment différentes et il doit bien avoir des avantages et des inconvénients pour chacune de ces solutions...

Hors ligne

 

#10 29-04-2008 10:32:19

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

Re: [Zend_layout][1.5]Organisation des layouts pour une appli par module

Y'a pas d'avantage ou d'inconvénient. La, je pense pas qu'on parle de bonne ou de mauvaise solution, mais d'alternative

Si ca ne te gène pas de mettre dans tous tes .phtml des
<?php echo $this->action('header','header','mep');?>
alors, pourquoi pas.

Moi, je préfère le mettre une seule fois dans mon layout.phtml smile


----
Gruiiik !

Hors ligne

 

#11 29-04-2008 11:03:34

slaughter
Membre
Date d'inscription: 01-04-2008
Messages: 217

Re: [Zend_layout][1.5]Organisation des layouts pour une appli par module

Je trouve également que cela est plus propre d'avoir toute la "fusion" dans la fichier layout.phtml mais cela ne permet pas d'alterner entre les views que tu rajoutes et le contenu réelle de la page. Je ne sais pas si je suis très clair.
En gros ce n'est pas possible d'avoir dans le layout.phtml:

<?
echo $this->action('header','index','mep');
echo $this->layout()->contenu; //debut du contenu
echo $this->action('menu1','index','mep'); //un menu inséré dans le milieu du contenu
echo $this->layout()->contenu; //suite du contenu
echo $this->action('footer','index','mep');
?>

Ce code est évidemment complètement faux mais c'est pour montrer un peu la situation.

Maintenant que j'ai pu faire le pour et le contre, il ne me reste plus qu'à choisir.

Hors ligne

 

#12 29-04-2008 11:15:16

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

Re: [Zend_layout][1.5]Organisation des layouts pour une appli par module

Biensur, ceci est un autre cas
il faut mettre echo $this->action('menu1','index','mep'); dans la vue de ton contenu

A chaque cas sa solution


----
Gruiiik !

Hors ligne

 

#13 09-05-2008 12:25:30

slaughter
Membre
Date d'inscription: 01-04-2008
Messages: 217

Re: [Zend_layout][1.5]Organisation des layouts pour une appli par module

Oki. C'est bien ce que je pensais. Donc maintenant que j'ai compris le principe des différents composants, il me reste à choisir la meilleure façon de les utiliser.

Pour cela j'ai besoin de votre aide.

Une page se compose de cette manière.

-un header html => unique pour chaque page (titre de la page, mots clés etc)
-une bannière => identique sur tout le site
-un menu droit => unique à chaque module (menu de navigation dans le module)
-Le contenu => unique pour chaque page
-un pied de page => identique sur tout le site

Quelle est pour vous la meilleure façon de mettre cela en place?
Mon problème se situe dans le header html. Au départ je voulais avoir un "template" et inclure les différentes vues:
<?
echo $this->action('banniere','index','mep'); //mep est le module ou je créer les vues générales
echo $this->action('menu1','index','mep'); //un menu
echo $this->layout()->contenu; //le contenu
echo $this->action('footer','index','mep');
?>

Mais, de cette façon, je ne vois pas comment inclure mon header html.

Avez vous une piste?

Hors ligne

 

#14 13-05-2008 10:39:07

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

Re: [Zend_layout][1.5]Organisation des layouts pour une appli par module

N'oublie pas les aides de vues pour ton header HTML ! (ce qui est entre <head> et </head>)

Voici une astuce simple :
voici un layout :

Code:

<?php $this->headLink()->appendStylesheet('/styles/'.$this->domain_name.'/styles.css'); ?>
<?php $this->headTitle($this->hotspot_name, 'PREPEND'); ?>
<?php $this->headTitle($this->domain_name, 'PREPEND'); ?>
<?php $this->headTitle()->setSeparator(' / '); ?>

<?php echo $this->doctype('XHTML1_STRICT') ?>
<html>
<head>

<?php echo $this->headMeta() ?>
<?php echo $this->headTitle() ?>
<?php echo $this->headLink() ?>
<?php echo $this->headScript() ?>
<?php echo $this->headStyle() ?>

</head>

<body>

<?php echo $this->layout()->content;?>

</body>
</html>

Dit toi que l'action (et donc la vue) qui est exécuter/rendu dans 'content' est générée AVANT layout.phtml
De ce fait, dans ton content tu peut mettre ca :

Code:

<?php $this->headTitle("horaires invalides"); ?>

<h1>horaires invalides</h1>

<p>
La définition de vos plages horaires ne vous permettent pas d'accéder à ce hotspot maintenant.
</p>

Ce qui fait que le rendu final sera (j'ai abrégé certains parties)

Code:

<!DOCTYPE ...
<head>
<title>pc-joff / Hotspot 1 / horaires invalides</title>
<link href="/styles/pc-joff/styles.css" ...
</head>

<body>

<h1>horaires invalides</h1>

<p>
La définition de vos plages horaires ne vous permettent pas d'accéder à ce hotspot maintenant.
</p>

Ainsi, avec ca, ca t'évite de coller des <head></head> dans toutes tes vues et de mettre juste le nécessaire.
Je l'ai fait avec title, mais tu peux le faire avec les metas, les styles, etc...


----
Gruiiik !

Hors ligne

 

#15 13-05-2008 18:31:50

slaughter
Membre
Date d'inscription: 01-04-2008
Messages: 217

Re: [Zend_layout][1.5]Organisation des layouts pour une appli par module

PARFAIT. C'est exactement ce que je recherchais. J'ai n'avais pas compris que les variables 'content' pouvait être utilisé dans la vue du 'layout'.

Je vais tester ça dès que je peux...


Merci beaucoup!!!

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