Avere layout differenti nei moduli

Ho realizzato due moduli, default e admin ed in entrambi i moduli ho riportatato la struttura /Controllers, /forms, /layouts, /models, /views e ovviamente il file bootstrap.php.

Nel file application.ini ho scritto:

resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" resources.modules[] = ""    Funziona tutto eccetto che per i layout. Ho scritto nel file .ini default.resources.layout.layoutPath = APPLICATION_PATH "/modules/default/layouts/" admin.resources.layout.layoutPath = APPLICATION_PATH "/modules/admin/layouts/" Ma mi prende solo quello di admin. ?????   Spero di essere stato chiaro, mi spiego meglio: Nei miei moduli non riesco a settare (per ognuno di loro) il layoutPath corretto. Penso si possa fare in due modi: Il primo, che ho tentato sopra, è quello di indicare percorsi differenti inserendo il nome del modulo prima della direttiva nel file.ini ma funziona sempre per un solo modulo. Credo che una possibilità sia di settare un file .ini in ogni modulo, ma non so come fare.   Il secondo, sicuramente più elegante, è quello di scrivere qualcosa nel file Boostrap.php di ogni modulo. Anche qui non so come fare ....   Qualcuso può aiutarmi, magari postando anche un esempio. Grazie a tutti!

inviato 5 anni fa
Lapo
Lapo
7
X 0 X

Io per realizzare questa cosa uso sempre un plugin salvato in application/plugins/Layout.php

class Plugin_Layout extends Zend_Controller_Plugin_Abstract
{
    /**
     * Called before an action is dispatched by Zend_Controller_Dispatcher.
     *
     * @param  Zend_Controller_Request_Abstract $request
     * @return void
     */
    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {
        $layout = Zend_Layout::getMvcInstance();
        $module = $request->getModuleName();
        switch ($module) {
            case 'default':
                $layout->setLayout('default');
                break;
            case 'admin':
                $layout->setLayout('admin');
                break;
            default:
                $layout->setLayout('default');
                break;
        }
    }
}

nel Bootstrap.php inserisci la seguente funzione: 

 /**
 * @return Zend_Application_Module_Autoloader
 */
protected function _initAutoload()
{
    $autoloader = new Zend_Application_Module_Autoloader(array('namespace' => '', 'basePath' => APPLICATION_PATH));
    $autoloader->addResourceType('plugin', 'plugins', 'Plugin');
    return $autoloader;
}

e nell'application.ini scrivi questo:

resources.frontController.plugins.layout = Plugin_Layout
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"

Il Plugin non fa altro che settare il layout default.phtml presente dentro /layout/scripts/ se ci si trova nel modulo default oppure instanza il file admin.phtml se ci si trova nel modulo admin! ;)

Spero di esserti stato di aiuto!

Ciao

    small-logo.png

    small-logo.png  

risposto 5 anni fa
JellyBelly
modificato 5 anni fa
X 0 X X
Effettua l'accesso o registrati per rispondere a questa domanda