Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 20-07-2012 13:09:16

aziza_1989
Membre
Date d'inscription: 31-05-2012
Messages: 58

design commun aux vues du site avecl css du header ,footer variable

Bonjour,
S'il vous plait,
dans mon site j'ai le meme designe pour toutes les pages juste le css du header et footer qui change selon la ville(stockée dans une table ville(id,nom,code)).
je veux faire un switch  sur une variable ville dans mon layout.
savez vous comment je peux proceder?
Merci bien.

Dernière modification par aziza_1989 (21-07-2012 16:09:36)

Hors ligne

 

#2 20-07-2012 15:20:09

amiss
Membre
Lieu: Cesson-Sévigné
Date d'inscription: 08-05-2011
Messages: 115

Re: design commun aux vues du site avecl css du header ,footer variable

bonjour,

je suppose pour ton cas que la ville est stockée dans une bd.Dans ce cas dans ton layout(ou dans le bootstrap) tu défini le css en fonction de la variable ville

exemple dans ton layout:

Code:

if($ville=='Paris'){
 <link rel="stylesheet" href="<?php echo $this->baseUrl() ?>/css/ville1.min.css"/>

}else
if($ville=='London'){
 <link rel="stylesheet" href="<?php echo $this->baseUrl() ?>/css/ville2.min.css"/>

}

En pratique il serait plus propre d'avoir des layouts différents qui seront rendus en fonction d'une condition. Dans ce dernier cas il te faut définir un plugin qui rendrait un layout different.

Dernière modification par amiss (20-07-2012 15:23:02)

Hors ligne

 

#3 21-07-2012 12:10:46

aziza_1989
Membre
Date d'inscription: 31-05-2012
Messages: 58

Re: design commun aux vues du site avecl css du header ,footer variable

amiss a écrit:

bonjour,

je suppose pour ton cas que la ville est stockée dans une bd.Dans ce cas dans ton layout(ou dans le bootstrap) tu défini le css en fonction de la variable ville

exemple dans ton layout:

Code:

if($ville=='Paris'){
 <link rel="stylesheet" href="<?php echo $this->baseUrl() ?>/css/ville1.min.css"/>

}else
if($ville=='London'){
 <link rel="stylesheet" href="<?php echo $this->baseUrl() ?>/css/ville2.min.css"/>

}

En pratique il serait plus propre d'avoir des layouts différents qui seront rendus en fonction d'une condition. Dans ce dernier cas il te faut définir un plugin qui rendrait un layout different.

Merci bien ,mais mon problème c'est que  je ne sais pas comment déclarer ma variable comme étant globale et où la declarer.Pouvez vous m'aider et merci bien.

Dernière modification par aziza_1989 (21-07-2012 12:17:43)

Hors ligne

 

#4 21-07-2012 14:57:01

shadypierre
Membre
Date d'inscription: 24-03-2010
Messages: 617

Re: design commun aux vues du site avecl css du header ,footer variable

J'imagine que la ville est défini en paramètre d'url, ou quelque chose dans le genre, donc tu fais un plugin 'layout' dans le genre :

Code:

[lang=php]
/**
 * @var Zend_View_Abstract
 */
protected $_view;

public function __construct(Zend_View_Abstract $view)
    {
        $this->_view = $view;
    }

public function routeShutdown(Zend_Controller_Request_Abstract $request)
    {
        Zend_Layout::getMvcInstance()->setLayout('layout');
        $params = $request->getParams();
        $ville = $params['ville'];
        switch ($ville) {
            case 'paris':
                $this->_view->headLink()->appendStylesheet('paris.css')
                break;

            case 'nantes':
                $this->_view->headLink()->appendStylesheet('nantes.css')
                break;
    }

Dernière modification par shadypierre (21-07-2012 14:57:46)

Hors ligne

 

#5 21-07-2012 18:07:58

aziza_1989
Membre
Date d'inscription: 31-05-2012
Messages: 58

Re: design commun aux vues du site avecl css du header ,footer variable

Bonjour,
Merci à vous tous de me répondre.
Je veux vous exposer mon problème d'une autre maniere.
J'ai un controller

Code:

       class  villeController extends Zend_Controller_Action
    {
        
                 public function init()
                {
                     $this->_helper->layout->setLayout('accueil_ville');
                }

        
                public function indexAction()
                
                {
                      //creer un objet ville
                                  $ville=new Application_Model_DbTable_Ville();
                                 //je dois envoyer la variable $ville à l'url pour qu'elle soit récupérer dans mon  
                                  //layout. est ce que ceci est faisable et comment ?
                                    
                }

Merci bien  .

Dernière modification par aziza_1989 (21-07-2012 18:10:06)

Hors ligne

 

#6 21-07-2012 19:27:02

shadypierre
Membre
Date d'inscription: 24-03-2010
Messages: 617

Re: design commun aux vues du site avecl css du header ,footer variable

La tu récupère aucune ville en particulier... Bref dans tous les cas tu t'en fous du layout tu fais un switch sur la ville dans ton controller ou le plugin (perso je préfère passer par un plugin) et tu utilise la place holder headLink()

Hors ligne

 

#7 23-07-2012 11:49:29

aziza_1989
Membre
Date d'inscription: 31-05-2012
Messages: 58

Re: design commun aux vues du site avecl css du header ,footer variable

shadypierre a écrit:

La tu récupère aucune ville en particulier... Bref dans tous les cas tu t'en fous du layout tu fais un switch sur la ville dans ton controller ou le plugin (perso je préfère passer par un plugin) et tu utilise la place holder headLink()

Merci bien pour votre aide,voilà ce que j'ai fait:

----------------page d'accueil du site 'Accueil'

Code:

<li class="first"><a href="<?php  echo $this->url(array('controller'=>'accueil','action'=>'index','ville'=>'paris',null)); ?>">Paris</a></li>
$this->url(array('controller'=>'accueil','action'=>'index','ville'=>'nantes',null)); ?>">Nantes</a></li>

---------------monController 'accueilController'

Code:

      <?php

class AccueilController extends Zend_Controller_Action
{

    public function init()
    {
       
        
         $this->_helper->layout->setLayout('accueil_ville');    
                        
    }

    public function indexAction()
    {
       $ville=$this->_request->getParam('ville') ;
       switch($ville)
       {
           case 'paris':
               $this->headTitle('Agadir');
               $this->headLink()->appendStylesheet('cities/css/paris'.css');
               break;
               
        case 'nantes':
            $this->headTitle('Casablanca');
            $this->_view->headLink()->appendStylesheet('/cities/css/nantes.css');
               break;
       }
   }
}

--------------dans mon l'ayout 'accueil_ville.phtml'

Code:

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

mais j'ai le fichier 'cities/css/paris'.css' ne se charge pas dans le layout.
S'il vous plait si vous savez d'ou l'erreur m'aider .
Merci bien.

Hors ligne

 

#8 23-07-2012 17:46:47

amiss
Membre
Lieu: Cesson-Sévigné
Date d'inscription: 08-05-2011
Messages: 115

Re: design commun aux vues du site avecl css du header ,footer variable

bonjour,
Y a 2 problèmes au niveau de votre action index:
primo il y a une quote simple(') en trop, juste  après paris.css;
secondo les aide de vue headLink et headTitle ne pas directement accessibles depuis un controlleur car elles appartiennent à la classe Zend_View. Autrement ces aides de vue sont accessibles via la proprieté view du controlleur donc $this->view->headLink... pour la vue par exemple

Moi à votre place j'aurai écrit mon action comme suit:


Code:

public function indexAction(){


        $ville=$this->_request->getParam('ville') ;
       switch($ville)
       {
           case 'paris':
               $this->view->headTitle('Agadir');
              $this->view->headLink()->appendStylesheet('cities/css/paris.css');
               break;
               
        case 'nantes':
            $this->view->headTitle('Casablanca');
       $this->view->headLink()->appendStylesheet('cities/css/nantes.css');
               break;
       }

}

Après cette façon de faire de lier le css au sein d'une méthode d'action me semble à mon humble avis inappropriée car le css  se retrouve au milieu du layout.

le dernier intervenant vous a donné une approche plus élégante celle de lier les css depuis un plugin qui n'est qu'une simple classe et à l'avantage d'être appelée avant tous les controlleurs d'action donc antérieure aux scripts de vue.

pour l'utilisation d'un plugin, voici le lien de la doc de zend:
Zend Framework plugins

Hors ligne

 

#9 23-07-2012 17:50:56

amiss
Membre
Lieu: Cesson-Sévigné
Date d'inscription: 08-05-2011
Messages: 115

Re: design commun aux vues du site avecl css du header ,footer variable

une chose est sûr pour vérifier  si le css est chargé ou pas c'est de voir le html généré à partir de votre navigateur avec firebug par exemple

Hors ligne

 

#10 23-07-2012 18:54:39

amiss
Membre
Lieu: Cesson-Sévigné
Date d'inscription: 08-05-2011
Messages: 115

Re: design commun aux vues du site avecl css du header ,footer variable

de rien

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