CakePHP: impostare il layout automaticamente in base alla sezione del sito
All'interno di un controller è possibile impostare il layout della pagina tramite la proprietà $this->layout. Per impostare una regola generale per la gestione dei layout dell'applicazione è possibile scrivere una funzione apposita all'interno dell'app_controller. In un caso reale potremmo ad esempio avere 4 layout diversi:
- public: per la visualizzazione del sito pubblico
- admin: per il pannello di amministrazione
- fornitore: un layout che verrà visualizzato agli utenti che eseguono il login come fornitori
- ajax: per le richieste asincrone tramite javascript
Utilizzando i prefissi per le sezioni del sito diverse da quella pubblica la funzione sarà:
function _setLayout(){
//imposta layout standard per il sito pubblico
$this->layout = 'public';
//modifica in base al prefisso
if(isset($this->params['prefix'])){
switch($this->params['prefix']){
case 'admin':
$this->layout = 'admin';
break;
case 'fornitore':
$this->layout = 'fornitore';
break;
}
}
//layout per le richieste ajax
if($this->RequestHandler->isAjax()){
$this->layout = 'ajax';
}
}
Ovviamente all'interno dello switch è possibile inserire tanti "case" quante sono le sezioni gestite tramite prefisso. La funzione sarà richiamata all'interno del metodo beforeFilter(): in questo modo sarà anche possibile gestire eventuali eccezioni tramite i metodi dei controllers in quanto il callback beforeFilter viene richiamato prima di ogni altro metodo dell'applicazione. Ad esempio:
class HomeController extends AppController{
//pagina con layout non standard
function index(){
$this->layout = "layout_non_standard";
}
}

Commenti