Se tutto il mio sito utilizza il layout default.ctp specificato in apps/view/layouts/default.ctp, come posso modificare solo il layout della home page per utilizzare homepage.ctp e lasciare il resto del sito utilizza default.ctp?Modifica solo il layout della pagina iniziale in cakephp
risposta
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.
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';
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.
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
In realtà, non è nemmeno necessario il 'PagesController' originale - puoi usare le rotte per puntare a un controller personalizzato e impostare' $ this-> layout' da lì –
@Franz Cosa intendi per "sovrascrittura"? – deceze