Layout diverso per ogni modulo

Buongiorno,

a voi è capitato mai di dover gestire dei layout diversi per ogni modulo? Io per ora ho due moduli, un main e un admin. Secondo le specifiche, ogni cartella ha una struttura di questo tipo all'interno:

configs/

controllers/

forms/

models/

services/

views/

Bootstrap.php

nel livello superiore c'è (tra le altre) la cartella layouts/scripts/ ed dentro admin.phtml e main.phtml.

Vorrei fare in modo che ogni modulo utilizzi il suo layout.

Nella configurazione di base dico allo ZF che il layout è main, e poi nella config del modulo main gli dico che il layout è il main.

Ma così no funziona.

Viene sempre utilizzato il layout main.phtml.

Come devo impostare la struttura per rendere il layout personalizzabile per ogni modulo?

Forse nel file di configurazione generale devo omettere il layout, e lo specifico solo nelle configurazioni di ogni modulo?

Grazie

Ciao

Luca

inviato 6 anni fa
Luca450Mhz
X 0 X

RISOLTO! :)

Se a qualcuno potrà essere utile ecco cosa ho fatto:

Nell'apllication.ini generale ho lasciato questo codice:

resources.layout.layoutPath = APPLICATION_PATH "\layouts\scripts"
resources.layout.layout = "main"

E poi nel bootstrap del modulo del quale voglio cambiare il layout uso questo codice:

class Admin_Bootstrap extends Zend_Application_Module_Bootstrap {
   
   public function _initLayout() {
      $layout = Zend_Layout::getMvcInstance();
                $layout -> setLayout('admin');
   }
}

E così funziona!

Ciao

Luca

risposto 6 anni fa
Luca450Mhz
X 0 X

Ho cantato vittoria troppo presto... non sono riuscito a risolvere.. in questo modo viene sempre applicato il layout dell'ultimo modulo acceduto (viene tenuto conto solamente del suo bootstrap e non di quello di ogni modulo, boh non lo so..)

Sono ancora disposto a suggerimenti vari! :) :)

Ciao

Luca

risposto 6 anni fa
Luca450Mhz
X 0 X

Questa volta penso proprio di esserci riuscito con il codice:

$this -> _helper -> layout -> setLayout('admin');

all'interno del controller del modulo admin. Ora devo solo capire se c'è un modo per evitare di riscrivere questo codice per ogni azione..

I suggerimenti comunque sono sempre i benvenuti!

Ciao

Luca

risposto 6 anni fa
Luca450Mhz
X 0 X

Invece di metterlo in ogni azione potresti provare ad inserirlo in nel costruttore del controller.

A me piace di più l'idea di usare il bootstrap del modulo. Hai già provato a settare il layout per ogni bootstrap di ogni modulo?

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Si, idealmente avevo pensato : se lo imposto nel bootstrap lo fa una volta per tutte e prima di caricare il resto. Ma non funziona. Avevo provato con:

public function _initLayout() {
   $layout = Zend_Layout::getMvcInstance();
        $layout -> setLayout('admin');
}

nel file di boostrap del modulo, ma non andava.

Ora provo nel costruttore, per la fretta non ci avevo pensato! ;)

Grazie!

Ciao

Luca

risposto 6 anni fa
Luca450Mhz
X 0 X

Basta inserire in application.ini:

admin.resources.layout.layoutPath = APPLICATION_PATH "/modules/admin/layouts/"

cioè [Nome_Modulo]. come prefisso.

Documentazione qui:

http://framework.zend.com/manual/en/zend.application.available-resources.html#zend.application.available-resources.modules

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