Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 23-01-2009 12:31:27

Devether
Membre
Date d'inscription: 23-01-2009
Messages: 21

[ZF 1.6] Inclure un phtml dans un layout à partir du contrôleur

Bonjour,

Je débute avec ZF mais j'avance à grands pas.

J'ai une page avec 2 colonnes (menu + contenu) et pour un certain contrôleur je voudrais ajouter au début de mon menu un calendrier qui est contenu dans un phtml à part.

Pour toutes les actions de tous les contrôleurs, je n'affiche pas le calendrier sauf pour 2 actions d'un contrôleur.

En gros dans individuelleAction de StatistiquesController je voudrais que app/views/scripts/statistiques/calendar.phtml s'affiche dans la colonne de menu du layout app/layouts/scripts/layout.phtml et app/views/scripts/statistiques/individuelle.phtml dans la colonne contenu du même layout.

pour individuelle.phtml pas de problème il s'affiche grâce à $this->layout()->content; mais je ne trouve pas comment ajouter calendar.phtml

D'avance merci,
Devether

Hors ligne

 

#2 23-01-2009 12:39:51

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [ZF 1.6] Inclure un phtml dans un layout à partir du contrôleur

Salut,

C'est dans la vue qu'il faudrait invoquer le rendu de ton phtml.

Essai avec un:

Code:

<?php echo $this->render('calendar.phtml'); ?>

A+ benjamin.


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#3 23-01-2009 13:25:30

Devether
Membre
Date d'inscription: 23-01-2009
Messages: 21

Re: [ZF 1.6] Inclure un phtml dans un layout à partir du contrôleur

En fait la vue est contenue dans la colonne de gauche (le contenu).

Mon calendrier doit apparaitre dans la colonne de droite (le menu) qui est contenue par le layout.

Si j'applique ce que tu dis mon calendar.phtml apparaitra dans la colonne de contenu et pas dan le menu.

J'ai bien penser faire un render('calendar.phtml') dans le layout mais comme il ne doit apparaitre que dans certaines actions...

Hors ligne

 

#4 23-01-2009 13:42:10

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [ZF 1.6] Inclure un phtml dans un layout à partir du contrôleur

De mon côté, considérant ça comme un paramètre, j'aurais tendance à le sortir du code, dans un fichier .ini de paramètres, exemple :

Code:

[calendar]
action1
action2

(un peu au hasard ça, mais dans l'idée)

Et ensuite passer par le registre pour tester la présence de l'action dans la section calendar et rendre ou non calendar.phtml.

Autre solution, si tu as déjà dérivé Zend_Controller_Action pour faire un controller commun à tous les autres, tu peux y ajouter une variable globale, par défaut à false (si c'est le cas le plus fréquent), que tu passes à la vue en postDispatch() par ex.

Dans les actions concernées tu passes la variable à true, et dans ta vue tu fais le test pour afficher ou non ton partial.

Après il existe peut-être des solutions avec les partial et les placeHolder, mais je ne sais pas te répondre directement avec ces outils, je t'invite à lire la doc à ce sujet.


A+ benjamin.


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#5 23-01-2009 16:42:43

Devether
Membre
Date d'inscription: 23-01-2009
Messages: 21

Re: [ZF 1.6] Inclure un phtml dans un layout à partir du contrôleur

J'ai pas tout compris mais je vais regarder ça.
Merci

Hors ligne

 

#6 26-01-2009 17:35:27

Devether
Membre
Date d'inscription: 23-01-2009
Messages: 21

Re: [ZF 1.6] Inclure un phtml dans un layout à partir du contrôleur

Bon j'ai trouvé un moyen de le faire en ajoutant un segment au Zend_Layout.

Comme le calendrier est commun à tous les contrôleurs, j'ai placé le calendar.phtml dans app/views/scripts/communs/

dans mon layout.html

Code:

<table width="100%" cellspacing="0" cellpadding="0" border="0">
    <tr>
        <td class="sidebar">
            <?php echo $this->layout()->sidebar; ?>
        </td>
        <td class="content">
            <?php echo $this->layout()->content; ?>
        </td>
    </tr>
</table>

et dans StatistiquesController.php

Code:

<?php
class StatistiquesController extends Zend_Controller_Action 
{
    ...
    
    public function individuelleAction() 
    {
        ...
        if ($condition) {
            $this->getResponse()->insert('sidebar', $this->view->render('communs/calendar.phtml'));
        }
        ...
    }
    
    ...
    
}

En plus on peut mettre autre chose dans la sidebar en fonction de la condition.

Si le calendrier doit s'afficher pour toutes les actions du contrôleur, il suffit juste de placer le insert() dans le init() du contrôleur.

Et voila!!

Merci pour ton aide Delprog.

Hors ligne

 

#7 14-04-2009 14:07:51

forevermoon
Membre
Date d'inscription: 10-04-2009
Messages: 45

Re: [ZF 1.6] Inclure un phtml dans un layout à partir du contrôleur

est ce qu'un layout doit toujours etre associé à une vue propre à lui meme  ?

Hors ligne

 

#8 14-04-2009 14:46:03

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

Re: [ZF 1.6] Inclure un phtml dans un layout à partir du contrôleur

gné ???

un layout est associé un rien du tout.
Un layout c'est un "container".

Si tu parles de vue et d'action, et non pas de layout, la réponse est non.
Le viewrenderer fait l'association par soucis de "simplicité" pour le codeur. Rien ne t'empêche de faire render('youpi/toto.phtml') dans l'action "zarmaAction()"

Dernière modification par nORKy (14-04-2009 14:46:38)


----
Gruiiik !

Hors ligne

 

#9 14-04-2009 15:10:50

forevermoon
Membre
Date d'inscription: 10-04-2009
Messages: 45

Re: [ZF 1.6] Inclure un phtml dans un layout à partir du contrôleur

voila mon layout principal ou
Code:

Code:

<div id="nav">                                 
<?php echo $this->layout()->nav; ?>
</div>
---
<?php echo $this->layout()->content; ?>

mon fichier "nav.phtml" se trouve dans layouts/nav.phtml avec layout.phtml

dans mon "controllers/IndexController.php"
j'ai
Code:

Code:

public function init()
{                 
$response = $this->getResponse();
$response->insert('nav', $this->view->render('index/nav.phtml')); mais je voudrais qu il fasse
 reference au fichier "layouts/nav.phtml"
la ca m oblige à le mettre dans "views/scripts/index" ok admettons que j'ai pas le choix
}
et la fonction
function lirechapitreAction()
{    
$models = new albums(); 
$this->view->albums = $albums->fetchall();
}

mon fichier "layout.php" affiche le content de mon IndexController avec les resultats de ma table albums
cool c'est bien ce que je veux

maitnenant je voudrais faire la meme chose avec nav.phtml qui accede aussi une autre table de la meme maniere que layout.phtml qui est appeler via scripts/index/index.phtml

mais je veux que le contenu de ma table "nav" s'affiche partout c'est mon menu d une table sql ...

je suis paumé

j'ai pourtant mis dans models un fichier "albums.php" et un autre "nav.php"

albums.php
Code:

Code:

class Albums extends Zend_Db_Table_Abstract
{
protected $_name = 'albums'
}

et 

class Pages extends Zend_Db_Table_Abstract
{
protected $_name = 'pages'
}

et 2 fichiers "controllers/INdexController.php" et "controllers/NavController.php"

navcontroller.php
Code:

Code:

class NavController extends Zend_Controller_Action
{
function navAction()
    {         
        
    $this->view->titre = "test";
        
    }
}

ca ne marche pas ...
j'ai toujours la variable titre de mon "indexcontroller" et pas celui de mon "navcontroller"

Dernière modification par forevermoon (14-04-2009 15:13:37)

Hors ligne

 

#10 14-04-2009 16:48:22

forevermoon
Membre
Date d'inscription: 10-04-2009
Messages: 45

Re: [ZF 1.6] Inclure un phtml dans un layout à partir du contrôleur

hello
encore moi
bon je crois que j'ai réussi avec actionstack
mais j'ai le contenu de nav.phtml dans

le content aussi ...

Hors ligne

 

#11 14-04-2009 17:18:00

forevermoon
Membre
Date d'inscription: 10-04-2009
Messages: 45

Re: [ZF 1.6] Inclure un phtml dans un layout à partir du contrôleur

controllers/IndexController.php

Code:

class IndexController extends Zend_Controller_Action
{

        public function init()
        {   
         $this->view->titre = "chapitres";
        $this->view->num = (int)$this->_request->getParam('num', 0);
        $chapitres = new chapitres();
        $this->view->chapitres = $chapitres->menuChapitre();    
        $this->_helper->actionStack->actionToStack('nav','nav');
        }

et controllers/NavController.php

Code:

class NavController extends Zend_Controller_Action
{
    function navAction()
    {             
        $this->view->Titre = "nav titre2 ...";
        $pages = new pages();
        $this->view->pages = $pages->menuPage();        
    }
}

et dans mon "layouts/layout.phtml"

Code:

  <?ph
p echo $this->render('nav/nav.phtml'); ?>
 <?php echo $this->layout()->content; ?>

j'ai 2 fois le contenu de nav.php qui s'affiche ...

une idée ?

Hors ligne

 

#12 14-04-2009 20:30:56

Roulio
Membre
Lieu: Alsace
Date d'inscription: 20-11-2007
Messages: 137
Site web

Re: [ZF 1.6] Inclure un phtml dans un layout à partir du contrôleur

ce ne serais pas plutôt, de cette façon ?

Code:

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

car en faisant un render tu appel à nouveau le script qui contient la génération de la navigation.
a+

Hors ligne

 

#13 15-04-2009 09:03:14

forevermoon
Membre
Date d'inscription: 10-04-2009
Messages: 45

Re: [ZF 1.6] Inclure un phtml dans un layout à partir du contrôleur

apparement en rendant le segment dans le nav controller c'est mieux

Code:

<?php
class NavController extends Zend_Controller_Action
{
    function navAction()
    {             
        $this->view->Titre = "nav titre1 ...";
        $this -> _helper -> viewRenderer -> setResponseSegment( 'nav' );
        //$pages = new pages();
        //$this->view->pages = $pages->menuPage();        
        //$this->view->pages = $pages->menuChapitreSelect();
        $chapitres = new chapitres();
        $this->view->chapitres = $chapitres->menuChapitreSelect();   
    }
}

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