Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 25-02-2008 13:10:23

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

Zend::Layout Adapter le tuto de Julien P. pour plusieurs modules

Bonjour,

Je ne m'en sors pas avec le Layout. Voici ma principale source : http://julien-pauli.developpez.com/tuto … nd-layout/

Je m'interesse principalement de la partie utilisant la pile ActionStack.

Dans cet exemple le 'footer' et 'header' sont associé au controlleur IndexControlleur défini sur http://localhost/monsite/. Donc il y'a headerAction et footerAction qui fonctionne de la manière suivante : $this->_helper->viewRenderer->setResponseSegment('header');

Footer et Header sont associés à footer.phtml et header.phtml, scripts se trouvant dans /views/scripts/index/

Très bien mais maintenant mon besoin est différent et je n'arrive pas à adapter le tuto de Julien. J'ai plusieurs modules (plusieurs controlleurs contenu dans chaque modules) MAIS 1 seul 'footer' et 1 seul 'header' et un menu gauche suivant les cas.

Comment adapter le tuto ?? comment attribuer un fichier layout.php à mon template layout.pthml ?

Je souhaiterai traiter l'ensemble de mon fichier layout.phtml depuis un LayoutController.php mais ça je ne crois pas que ce soit possible.

Hors ligne

 

#2 25-02-2008 14:44:21

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

Re: Zend::Layout Adapter le tuto de Julien P. pour plusieurs modules

Y'a t'il des traitements pour tes header et footer?
Ne peut tu pas simplement étendre le Zend_Controller_Action ?

Hors ligne

 

#3 26-02-2008 06:12:43

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

Re: Zend::Layout Adapter le tuto de Julien P. pour plusieurs modules

A priori oui, je souhaiterai que mon header affiche les menus suivant les ACL que j'aurais mis en place. Actuellement mon fichier de template est codé sans ZF, "à l'ancienne" !

Personne n'a essayé d'avoir un Layout pour plusieurs modules ou controlleurs ?

Hors ligne

 

#4 11-04-2008 10:23:21

Azema
Membre
Lieu: Paris
Date d'inscription: 26-09-2007
Messages: 51
Site web

Re: Zend::Layout Adapter le tuto de Julien P. pour plusieurs modules

Je suis plus ou moins dans le même cas que toi, je souhaiterai avoir différentes layouts dans mon application, car la structure de la page n'est pas la même en fonction des modules. Mais je n'ai pas encore réussi à trouver une solution.

Je sais que c'est faisable puisque je l'ai vu, mais je ne sais pas encore comment le mettre en place.

Je travaille dessus actuellement, je remonte des infos si j'en trouve.

Voici un tuto (en)  intéressant et surtout des commentaires qui font avancer le problème.
Différents liens, dans les commentaires, renvoient vers des infos toutes aussi intéressantes.

Cordialement, Azema.

Dernière modification par Azema (11-04-2008 11:46:38)

Hors ligne

 

#5 11-04-2008 11:08:20

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

Re: Zend::Layout Adapter le tuto de Julien P. pour plusieurs modules

Y'a un topic qui traine avec un plugin que j'ai fais vite pour avoir un layout par module...

Hors ligne

 

#6 11-04-2008 12:06:19

Azema
Membre
Lieu: Paris
Date d'inscription: 26-09-2007
Messages: 51
Site web

Re: Zend::Layout Adapter le tuto de Julien P. pour plusieurs modules

Salut Mr.MoOx,

Pourrais tu nous refiler un lien sur l'emplacement de ce topic ?

Hors ligne

 

#7 11-04-2008 12:14:37

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

Re: Zend::Layout Adapter le tuto de Julien P. pour plusieurs modules

http://www.z-f.fr/forum/viewtopic.php?pid=5230#p5230
Attention  le code est peut être à modifier mais c pas très long smile

PS: j'ai pas cherché longtemps.

Hors ligne

 

#8 11-04-2008 21:55:36

Azema
Membre
Lieu: Paris
Date d'inscription: 26-09-2007
Messages: 51
Site web

Re: Zend::Layout Adapter le tuto de Julien P. pour plusieurs modules

Salut à tous,

Et bien je vais tenter de vous exposer la méthode que j'ai utilisé pour faire mon travail qui consiste à pouvoir utiliser un layout différent pour chaque module et si besoin pour chaque controller contenu dans le module.

Pour ce faire, j'ai créer un plugin qui étend la classe Zend_Controller_Plugin_Abstract que j'ai nommé Sl_Plugin_View et à qui je fais passer ma vue perso et mon layout. (Dans le bootstrap)

Code:

    /**
     * init viewRenderer
     * we're gonna use .tpl.php templates
     */
    $view = new Sl_View(array('translate' => $translate));
    $view->setEncoding($config->site->encoding);

    $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
    $viewRenderer->setView($view)->setViewSuffix('tpl.php');

    /**
     * Instanciation du layout
     */
    $layout = Zend_Layout::startMvc($config->layout);
        
    // run!
    $frontController
                ->registerPlugin(new Sl_Plugin_Auth())
                ->registerPlugin(new Sl_Plugin_Trace())
                ->registerPlugin(new Sl_Plugin_View($view, $layout))
                ->dispatch();

Dans ce plugin, j'utilise la méthode preDispatch. Et dans cette méthode, je récupère le nom du module, du controller et de l'action qui ont été appelés.
Après, je fais un switch sur le nom du module et ainsi je défini pour chaque module et controller le nom du mon layout à utiliser.
Un petit exemple sera plus parlant :

Code:

class Sl_Plugin_View extends Zend_Controller_Plugin_Abstract
{
    private $_view;
    
    private $_layout;

    public function __construct($view, $layout)
    {
        $this->_view = $view;
        $this->_layout = $layout;
    }

  /**
   * Definition des variables generales de la vue.
   */
    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {
        $this->_view->baseUrl = Zend_Registry::get("config")->site->url;


        $module = $request->getModuleName();
        $controller = $request->getControllerName();
        $action = $request->getActionName();



      switch($module) {
          case 'administration' :
              //echo 'Sl_Plugin_View, module administration';
              if ($controller == 'connexion') {
                  //echo ', controller connexion';
                  $this->_layout->setLayout('connexadmin');
              } else {
                  $this->_view->layout()->setLayout('administration');
              }
              break;
          case 'default' :
              $this->_layout->setLayout('default');
              break;
        default:
                $this->_layout->setLayout('default');
                break;
     }
}

Et voila, je ne sais pas si cela est très propre, mais ça fonctionne. A mon avis, il y aurait moyen d'arranger ça. A vous de voir.

Cordialement, Azema.

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