Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
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
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:
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
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
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 :
[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
Bonjour,
Merci à vous tous de me répondre.
Je veux vous exposer mon problème d'une autre maniere.
J'ai un controller
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
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
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'
<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'
<?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'
<?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
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:
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
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
de rien
Hors ligne
Pages: 1