Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 14-06-2010 21:29:58

overcrach
Membre
Date d'inscription: 20-04-2009
Messages: 11

[zend_view][1.10] chemin vers scripts de vue

Bonjour à tous.

Je travaille actuellement sur une application multi-templates (pouvoir choisir un template différent facilement).

Pour cela j'ai décidé de séparer complètement la vue des dossiers de modules.

Voilà un bref aperçu de mon arborescence :

 

Code:

|-- modules
|   `-- default
|       |-- controllers
|       `-- models
|   
|-- templates
|   `-- nomdutemplate
|       `-- modules
|            `-- default

Pour pouvoir le faire, j'ai étendu la class Zend_Controller_Action comme ceci :

Code:

class My_Controller_Action extends Zend_Controller_Action
{
    public function __construct(Zend_Controller_Request_Abstract $request, Zend_Controller_Response_Abstract $response, array $invokeArgs = array())
    {
        $this->setRequest($request)
                ->setResponse($response)
                ->_setInvokeArgs($invokeArgs);
        $this->_helper = new Zend_Controller_Action_HelperBroker($this);
        $this->initTemplates();
        $this->init();
    }

    private function initTemplates()
    {
        $module = $this->getRequest()->getModuleName();

        $themes = "base"; //Sera géré dynamiquement

        $this->view->setScriptPath(APPLICATION_PATH .'/templates/'.$themes.'/modules/'.$module.'/');        
        
    }
}

Je voudrai savoir si c'est la meilleur méthode pour faire cela?
ou si y en a une plus optimisé?

Merci d'avance.

Dernière modification par overcrach (14-06-2010 21:34:23)

Hors ligne

 

#2 16-06-2010 03:11:15

overcrach
Membre
Date d'inscription: 20-04-2009
Messages: 11

Re: [zend_view][1.10] chemin vers scripts de vue

Vraiment personnes ?

Hors ligne

 

#3 16-06-2010 22:52:57

overcrach
Membre
Date d'inscription: 20-04-2009
Messages: 11

Re: [zend_view][1.10] chemin vers scripts de vue

J'ai réfléchi et je pense qu'il serait mieux de passer par un plugin, il me servira en même temps a déclenché des actions qui me servent à définir mes différents menus.

Maintenant le problème c'est comment récupéré la vue dans un plugin afin de définir le chemin (setScriptPath) ?

Hors ligne

 

#4 17-06-2010 12:35:34

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

Re: [zend_view][1.10] chemin vers scripts de vue

Bonjour,

J'ai une approche un peu bovine, mais qui marche bien :
Je crée une classe qui étends Zend_View, je surcharge la méthode addBasePath de Zend_View.

Ensuite quand le site veut ajouter un répertoire de vue, il ajoute automatiquement le répertoire par défaut (défini par le ViewRenderer ou le Zend_Layout) et le répertoire de template.

Comme ça soit ton fichier de vue existe dans ton thème et il prend celui là, soit il n'existe pas et il se rabat sur ton .phtml par défaut (qui est dans le répertoire standard ZF).

Note si tu utilises Zend_Layout et Zend_Application, dans ton application.ini, il faut utiliser
resources.layout.viewBasePath = APPLICATION_PATH "/layouts" (et non layoutPath qui n'utilise pas la fonction addBasePath de Zend_View...)

Code:

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;
    }
}

A+, Philippe


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

Hors ligne

 

#5 18-06-2010 23:46:08

overcrach
Membre
Date d'inscription: 20-04-2009
Messages: 11

Re: [zend_view][1.10] chemin vers scripts de vue

Je te remercie, je vais m'inspirer de ta classe.

J'ai une question bête : comment tu déclare dans ton application que tu utilise Kitpages_Builder_View plutôt que Zend_view ?

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