Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 22-02-2008 19:39:08

eki
Nouveau membre
Date d'inscription: 22-02-2008
Messages: 2

[résolu][Zend_Layout][1.5] Gestion d'un menu dynamique

Bonjour,

Après avoir arpenté le forum et tous ses précieux liens sur le module Zend_Layout, une incompréhension m'habite encore.

L'insertion dans le layout de 'templates' ce fait de la sorte:

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

Ce contenu étant fourni par défaut. Pour une action nommée index le fichier index.phtml sera donc le contenu précédemment évoqué.

Mon problème est le suivant. Comment attribuer un contenu choisi dans un controlleur?

Je voudrais en somme que l'appel suivant m'intègre au layout un template menu1.phtml ou menu2.phtml etc... selon le besoin.

<?php echo $this->layout()->menu ?>

J'espère avoir été clair, même si j'en doute.

Merci d'avance !

Dernière modification par eki (23-02-2008 16:26:13)

Hors ligne

 

#2 23-02-2008 01:44:34

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

Re: [résolu][Zend_Layout][1.5] Gestion d'un menu dynamique

Dans ton controller: $this->render('menuFichierSansPhtml', 'menu1');
Ca devrait le faire.

Hors ligne

 

#3 23-02-2008 09:19:23

eki
Nouveau membre
Date d'inscription: 22-02-2008
Messages: 2

Re: [résolu][Zend_Layout][1.5] Gestion d'un menu dynamique

Merci pour ta réponse (mais il faudrait songer à dormir la nuit!)

Voici plus précisément ma situation.

j'ai un controller 'index', qui dans sa méthode init() contient : $this->render('indexMenu', 'subMenu');

dans ce controller existe une méthode 'connection', qui d'après ce que je pensais, ferait implicitement cela:

$this->render('connection', 'content');

Il se trouve que dans cette configuration le 2ème appel à $this->render() n'a pas l'air de s'effectuer automatiquement. Le premier appel aurait-il désactivé le rendu automatique?

Si j'inscris en dur ce deuxième appel, j'obtiens le même résultat: le menu s'affiche, mais pas le contenu.

Plus étonnant, lorsqu'en deuxième appel j'utilise $this->render('connection') sans spécifier l'attribut de layout 'content' le menu ET le contenu s'affichent mais un décalage se fait dans le html. Voici la portion de code html (épurée) en question:

<div id="page">
  <div id="header">
    <div id="infoBar">
    </div>
  </div>
  <?php echo $this->layout()->subMenu ?>
  <div id="main">
    <?php echo $this->layout()->content ?>
  <div>
  <div id="footer">
  </div>
</div>

le 'content' se retrouve avant la div 'main' et non plus à l'intérieur. C'est à dire au niveau du premier appel à $this->layout() ce qui n'est à mon avis pas une coïncidence.

Voilà qui t'as peut-être davantage éclairé sur mes interrogations.

Merci encore !

je viens de relire le tuto de julien, grace auquel un début de réponse apparaît...
http://julien-pauli.developpez.com/tuto … nd-layout/

en fin d'action 'connection' ceci fonctionne:

$this->render('connection');
$this->render('indexMenu', 'subMenu');

l'ordre est important et pour l'instant je n'ai donc pas la solution pour pouvoir gérer le menu dans l'init du controlleur (sinon l'ordre sera inversé)

si mon problème vous inspire, n'hésitez pas !

ps: pendant ce temps je continue mes relectures

Voici la solution que je retiens pour le moment:

public function postDispatch()
{
    $this->render('indexMenu', 'subMenu'); 
}

public function connectionAction()
{
    $this->render('connection'); 
}

je ne suis qu'à moitié satisfait ne serait-ce que par la présence d'un appel dans chaques actions.

....

Voilà finalement la solution que je retiens:

mes 2 appels se feront dans le postDispatch de mon controlleur parent.
il lui suffit de vérifier si un menu existe pour un controlleur donné, et qu'un template existe pour l'action appelée.
Si c'est le cas il les appellent. Les méthodes actions sont donc soulagées de la gestion du layout.

Dernière modification par eki (23-02-2008 16:25:08)

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