2009-12-21 12 views

risposta

14

Copiare il /cake/libs/controller/pages_controller.php nella vostra /app/controller/ dir e fare una delle seguenti operazioni:

  • Aggiungi una linea verso la fine del display() per cambiare il layout, se è richiesto 'casa':
    if ($page == 'home') $this->layout = 'homepage';
  • Creare un metodo home() (o denominato comunque come desiderato) in cui si imposta $this->layout e reindirizzare il percorso / in /app/config/routes.php per utilizzare questo nuovo metodo.

Edit:
In sintesi, avete bisogno di qualche metodo personalizzato in cui potrai impostare $this->layout = 'homepage', questo è tutto. Puoi farlo in qualsiasi controller in qualsiasi momento, riutilizzando lo PagesController è solo il modo più conveniente e convenzionale per farlo in Cake.

+0

Non sovrascrive la classe un po 'più intelligente. Immagino anche che '$ this-> layout' possa essere chiamato da qualche altra funzione, qualcosa di' init'-like. – Franz

+2

In realtà, non è nemmeno necessario il 'PagesController' originale - puoi usare le rotte per puntare a un controller personalizzato e impostare' $ this-> layout' da lì –

+0

@Franz Cosa intendi per "sovrascrittura"? – deceze

1

La risposta sopra è ormai obsoleta, ma fornisce il giusto approccio.

Nelle versioni moderne di CakePHP, il controllore ti chiede di fare è già presente ed è:

/app/Controller/PagesController.php 

avevo un modello chiamato "loggedoff", e ha aggiunto questa come segue, poco prima che il comando $this->render() (circa la linea 73).

$this->layout = 'loggedoff'; 
0

Questo funziona bene:

class RegistrationsController extends AppController { 
    public $helpers = array('Html', 'Form', 'Time'); 
    public $components = array('Session'); 

    public function login() { 
     $this->layout = 'empty'; 
    } 
} 

Basta impostare il layout desiderato nella funzione di controllo.

Problemi correlati