Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 24-06-2011 14:11:06

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

[Résolu] Systeme de thêmes

Bonjour à tous,

Je cherche à mettre en place un systeme de themes dans l'application que je developpe actuellement, l'idée étant de permettre à mon client de choisir le theme qu'il souhaite. Un thême correspond pour moi à un layout, un css, et des images distincte pour chaque theme (on pourrait imaginer n'avoir que le css qui différe pour chaque theme mais cela restreindrais trop les possibilités je pense)

Quelqu'un à t-il déja mis en place quelque chose de semblable? Je prend la moindre piste big_smile
Merci d'avance

ps : j'ai evidement cherché sur google mais rien de bien concluant je trouve hmm

Dernière modification par shadypierre (27-06-2011 22:13:56)

Hors ligne

 

#2 24-06-2011 15:21:04

f.garoby
Membre
Date d'inscription: 02-03-2011
Messages: 105

Re: [Résolu] Systeme de thêmes

Bonjour,
La solution la plus simple me semble être la suivante :
* Créer un répertoire par thème, dans votre dossier "css" et dans votre dossier "image" ;
* Y placer les fichiers CSS et les images du thème ;
* appeler ces fichiers par une ligne de ce genre :

Code:

[lang=phtml]
<link rel="stylesheet" type="text/css" media="screen" href="<?php echo $this->baseUrl();?>/css/<?php echo $theme; ?>/maFeuilleDeStyle.css" />

Où $theme est une variable contenant le nom du répertoire du thème à afficher.

Dernière modification par f.garoby (24-06-2011 15:25:37)

Hors ligne

 

#3 24-06-2011 15:40:56

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

Re: [Résolu] Systeme de thêmes

Oui le probleme étant que justement je ne veux pas utliser que le CSS, mais mettre en place un layout different par theme, ainsi chaque client défini son theme.

Hors ligne

 

#4 24-06-2011 21:23:50

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [Résolu] Systeme de thêmes

Bonjour,

J'ai mis en place un système de thème dans lequel :
- on a un thème par défaut
- on a ensuite un thème courant

pour chaque template à afficher Zend_View regarde dans le répertoire des thèmes si le template est présent. S'il est présent il prend celui là. S'il n'est pas présent il prend le template dans le thème par défaut.

Cela concerne autant les thèmes d'une page que les fichiers de layout.

L'intérêt est que pour définir un nouveau thème, on n'a pas tous les templates à refaire. En général, on change juste les layouts et 2 ou 3 templates intérieurs.

Je n'ai prévu aucune gestion des images ou des css. Je considère que quand on change le layout, c'est au layout de charger les CSS ou images qui correspondent.

Le truc que j'ai mis du temps à mettre en place, c'est le choix automatique du bon template en fonction du thème. En fait pour ça je sous-classe Zend_View et je mets le code suivant :

Code:

[lang=php]
<?php
/**
 * @package builder
 */
/**
 * @package builder
 * @author Philippe Le Van - Kitpages (twitter : @plv)
 */
class Kitpages_Builder_View
    extends Zend_View
{
    protected $_modulePath = null;
    protected $_layoutPath = null;
    protected $_themePath = null;
    protected $_themeName = null;
    
    public function setModulePath($path)
    {
        $path        = rtrim($path, '/');
        $path        = rtrim($path, '\\');
        $this->_modulePath = $path;
    }
    
    public function setLayoutPath($path)
    {
        $this->_layoutPath = $path;
    }
    
    public function setThemePath($path)
    {
        $path        = rtrim($path, '/');
        $path        = rtrim($path, '\\');
        $this->_themePath = $path;
    }
    
    public function setThemeName($themeName)
    {
        $this->_themeName = $themeName;
    }
    public function addBasePath($path, $classPrefix = 'Zend_View')
    {
        $path        = rtrim($path, '/');
        $path        = rtrim($path, '\\');
        $newPath = str_replace(
            $this->_layoutPath,
            $this->_themePath."/".$this->_themeName."/layouts",
            $path
        );
        $newPath = str_replace(
            $this->_modulePath,
            $this->_themePath."/".$this->_themeName."/modules",
            $newPath
        );
        $newPath = preg_replace("|/views$|", '', $newPath);
        parent::addBasePath($path, $classPrefix);
        parent::addBasePath($newPath, $classPrefix);
        
        return $this;
    }
}

Les templates du thèmes par défaut sont aux emplacements standards du ZF.

Les thèmes sont dans les répertoires :
- application/themes/nom_du_theme/layouts/scripts/*.phtml
- application/themes/nom_du_theme/modules/module_name/scripts/ctrl_name/*.phtml

Finalement le code est simple, mais c'est le résultat d'un long jeu de piste pour trouver ça...

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#5 25-06-2011 13:31:00

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

Re: [Résolu] Systeme de thêmes

Merci beaucoup je test ça des lundi big_smile

Hors ligne

 

#6 27-06-2011 09:53:06

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

Re: [Résolu] Systeme de thêmes

J'ai mis en place une solution qui fonctionne pour moi, si vous avez des remarques sur celle-ci n'hesitez pas :

Bootstrap.php

Code:

[lang=php]
protected function _initMonLayout() {
{
// Ensure the front controller is initialized
$this->bootstrap('FrontController');

$themePath = '/default';
if (isset(Zend_Registry::get('site')->site->themePath)) {
    $themePath = Zend_Registry::get('site')->site->themePath;
}
$themeFullPath = PUBLIC_PATH . '/themes' . $themePath;

$layout = Zend_Layout::startMvc()
    ->setLayoutPath($themeFullPath . '/layouts');

$this->bootstrap('view');
$view = $this->getResource('View');

$this->frontController->registerPlugin(
                            new YU_Controller_Plugins_Layout($view, $themePath));
}

YU/Controller/Plugins/Layout.php

Code:

[lang=php]class YU_Controller_Plugins_Layout extends Zend_Controller_Plugin_Abstract
{
    protected $_view;
    protected $_themePath;

    function __construct(Zend_View_Abstract $view, $themePath)
    {
        $this->_view      = $view;
        $this->_themePath = $themePath;
    }
    
    public function routeShutdown(Zend_Controller_Request_Abstract $request)
    {
        if ($request->isXmlHttpRequest() AND $request->getParam('format') != 'html')
        {
            //Zend_Controller_Front::getInstance()->setParam('noViewRenderer', true);
        } else {
            $this->initHeader();
        }
    }
    
    
    /**
     * Init the html header
     *
     * @return void
     */
    private function initHeader()
    {
        $this->_view->appendStylesheet(
                         '/themes' . $this->_themePath . '/css/default.css');
    }
}

Mes themes ce trouvent ensuite dans mon répertoire public/themes/ , et le theme utilisé est défini dans un fichier site.ini

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