Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 08-04-2008 12:52:11

whitespirit
Membre
Date d'inscription: 25-01-2008
Messages: 393

[résolu] Layout : Objet de réponse : ou l'on se trouve ?

Bonjour,

Je me met sur le layout et je vais tenter d'utiliser à ma façon un template. Ce chapitre de la doc m'interesse : http://framework.zend.com/manual/fr/zen … ponse.html donc le controlleur Response.

Alors voilà l'idée, je créer un plugin qui aura comme fonctionnalités d'afficher le fichier le header.phtml et footer.phtml.

Voici le code tiré d'ailleurs de la doc :

Code:

class PluginTemplate extends Zend_Controller_Plugin_Abstract
{
    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {
        $response = $this->getResponse();
        $view = new Zend_View();
        $view->setBasePath('../../_templates/');

        //$response->prepend('header', $view->render('header.phtml'));
    }

    public function postDispatch(Zend_Controller_Request_Abstract $request)
    {
        $response = $this->getResponse();
        $view = new Zend_View();
        $view->setBasePath('../../_templates/');

        //$response->append('footer', $view->render('footer.phtml'));
    }
}

Le truc c'est que je n'arrive pas à indiquer le chemin du header.phtml et footer.phml et donc j'ai une exception. Comment indiquer le chemin des répertoires par rapport à un path précis ?

J'espère que c'est compréhensible ce que j'écris.

Merci

Dernière modification par whitespirit (10-04-2008 06:47:28)

Hors ligne

 

#2 08-04-2008 13:08:43

or4cle
Membre
Date d'inscription: 18-02-2008
Messages: 70

Re: [résolu] Layout : Objet de réponse : ou l'on se trouve ?

Salut
çà ne marche pas avec " $view->setScriptPath('path/des/scripts'); " ?

Hors ligne

 

#3 08-04-2008 13:39:21

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

Re: [résolu] Layout : Objet de réponse : ou l'on se trouve ?

Et $view->render('mon/path/footer.phtml') ne marche pas non plus?
Pourquoi tu n'utilise pas Zend_Layout et/ou l'ActionStack?

Hors ligne

 

#4 08-04-2008 13:56:55

whitespirit
Membre
Date d'inscription: 25-01-2008
Messages: 393

Re: [résolu] Layout : Objet de réponse : ou l'on se trouve ?

si ça fonctionne avec setScritpPath, merci.

Parcontre, je n'ai pas réussi à adapter le tuto de julien sur le Zend_Layout et le helper ActionStack dans mon cas. C'est d'ailleurs très frustrant.

Hors ligne

 

#5 08-04-2008 14:00:59

or4cle
Membre
Date d'inscription: 18-02-2008
Messages: 70

Re: [résolu] Layout : Objet de réponse : ou l'on se trouve ?

ah bon
j'ai suivis ce même tuto et je fais simplement dans mon action ActualiteControlleur::lireAction() :

        $this->_helper->actionStack('last-news','actualite','null',array( 'cat' => 'generale'));

pour appeler l'action "lastNews" du mm controlleur et ainsi rendre les 10 dernières news en même temps que la news à lire.

Hors ligne

 

#6 08-04-2008 19:17:44

whitespirit
Membre
Date d'inscription: 25-01-2008
Messages: 393

Re: [résolu] Layout : Objet de réponse : ou l'on se trouve ?

ça me motive à retourner vers le Layout tel que l'explique Julien. Maintenant je pense que mes notions de ZF me permettront de mieux comprendre. En attendant, dans cette ligne : $this->_helper->actionStack('last-news','actualite','null',array( 'cat' => 'generale'));
- 'last-news'  : c'est ton action
- actualite : c'est ton controlleur
- 'null' : correspond a un éventuel module ????
- 'cat' => 'generale' : c'est quoi ???

En fait, à l'époque j'avais été bloqué du fait que j'utilisais des modules et que j'ai une 20aine de controlleur : d'une part je ne voyais pas comment transposer le code de Julien en utilisant des modules, et je ne me voyais pas écrire pour chaque controlleur headerAction, footerAction. Je vais voir comment je m'en sors...

Est-ce qu'il vous parait logique de créer un controlleur uniquement pour gérer les actions : headerAction, leftAction, footerAction et de l'utiliser ce controlleur via l'ActionHelper ?

A l'état actuel de mes connaissances, l'actionStack ne semble pas me convenir car je n'ai pas envie de créer pour chaque controlleur headerAction, footerAction.

Hors ligne

 

#7 09-04-2008 00:41:03

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

Re: [résolu] Layout : Objet de réponse : ou l'on se trouve ?

$this->_helper->actionStack(action,controller,module,array params); //params utilisable via $this->_getParam()

Hors ligne

 

#8 09-04-2008 08:23:24

or4cle
Membre
Date d'inscription: 18-02-2008
Messages: 70

Re: [résolu] Layout : Objet de réponse : ou l'on se trouve ?

J'aurais pas mieux dit Mr.MoOx
"cat => generale" c'est mon param pr afficher que les 10 dernières actu de la catégorie "generale"


Sinon pour ton 'problème' d'utilisation du Layout, tu en veux 1 différent par controlleur ? par module ?
Ce que je fais, c'est d'avoir 1 layout avec :

Code:

<? include('header.phtml') ?>
  <div id="page-content">  
 <?= $this->layout()->content ?>
     <div class="hp-left">
        <?= $this->layout()->left ?>
     </div>
     <div class="hp-right">
        <?= $this->layout()->right ?>
     </div>
     <div class="hp-center">
        <?= $this->layout()->center ?>
     </div>
 <br clear="all" />
 </div>
<? include('bottom.phtml') ?>

et dans mon Header par exemple :

Code:

<?= $this->doctype(); ?>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
    <meta http-equiv="Content-Language" content="fr" />
    <script src="/prototype-1.6.0.2.js" type="text/javascript"></script>
    <link id="global" href="/global.css" rel="stylesheet" type="text/css" />
    <?= $this->headTitle() ?>
  </head>

Et si par exemple, on demande l'action ActualiteControlleur::lireAction(), je rend "lire" dans le segment center (par défaut) et l'action "lastNews" dans le segment "droite" par ajout dans l'actionStack.

Et si tu veux changer le layout en cours, il y a la méthode "setLayout();"

Hors ligne

 

#9 09-04-2008 12:56:08

whitespirit
Membre
Date d'inscription: 25-01-2008
Messages: 393

Re: [résolu] Layout : Objet de réponse : ou l'on se trouve ?

trop puissant, ça fonctionne comme je le souhaite avec le helper actionHelper. En fait mon problème venait du fait que je voulais écrire qu'une fois les parties "statiques" de mon templace, c'est à dire les bout de code dynamique que l'on retrouve sur chaque page (menus, sous menus, partial, etc). Maintenant j'ai créer un controlleur qui n'a que les actions headerAction, footerAction, menuAction, etc. A chaque action j'ai une vue correspondante qui sera affiché dans le template via :

Code:

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

Avant de cloturer ce post, cette ligne :

Code:

<?= $this->layout()->right ?>

j'ai du mal à comprendre right fait référence à quoi ?

Merci

Hors ligne

 

#10 09-04-2008 13:15:08

or4cle
Membre
Date d'inscription: 18-02-2008
Messages: 70

Re: [résolu] Layout : Objet de réponse : ou l'on se trouve ?

Là "à rien"
mon design possède 3 colonnes donc j'ai défini 3 segments 'left', center', right' mais ici j'ai mis qu'un bout de mon code pour donner une idée de ce que je faisais

Hors ligne

 

#11 24-04-2008 12:16:46

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

Re: [résolu] Layout : Objet de réponse : ou l'on se trouve ?

Petite question d'organisation:

Dans mon cas, j'ai un header commun à tous mes modules. Par contre, mon menu (droit) est spécifique à chaque module.

Comment organiser mes layouts dans ce cas? Est ce que vous mettez tous vos layouts dans le même module ? (pour les appeler de partout)? est ce que vous faites un controller spécial par module dans lequel vous avez les layouts du modules?

Voilà voilà quelques questions que je me pose....

Hors ligne

 

#12 24-04-2008 14:03:48

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

Re: [résolu] Layout : Objet de réponse : ou l'on se trouve ?

Trouve ta propre organisation qui te convient à toi.

Perso, j'ai un controller nav dans chaque de mes modules.
Ainsi, j'ai tout ce qui concerne un module, dans le meme répertoire
Et dans mon layout.html, j'ai ca :

$this->action('menu', 'nav', $module);

ou $module vaut Zend_Controller_Front::getInstance()->getRequest()->getModuleName();

Pour le reste la navigation qui est commun à tous le site, j'ai un module nav ou on peut trouver mon layout.phtml, mes header.phtml, etc.. Normalement, je touche plus jamais à tout ce qu'il y a dans ce module


----
Gruiiik !

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