sto lavorando ad un’applicazione in Yii con un template personalizzato, avrei necessità di reindirizzare la login ad un main.php diverso da quello base, diciamo loginMain.php, ho proceduto in questo modo:
in siteController, nella actionLogin mi sono impostato $this->layout=‘application.views.layouts.loginColumn’;
in loginColumn.php ho impostato $this->beginContent(’//layouts/loginMain’);
A quanto pare pero’ continuo ad utilizzare il vecchio main.php, cosa sto sbagliando?
Continua a non funzionare, in effetti l’unica differenza dai miei tentativi è la diversa nomenclatura dei files che ho provveduto ad allineare alla tua, provo a postare qui sotto il mio codice perchè non riesco a capire dove possa essere l’errore.
Ho 3 files:
SiteController.php
columnLogin.php
mainLogin.php
Su SiteController nella action actionLogin() ho impostato:
public function actionLogin()
{
$model=new LoginForm;
$this->layout='//layouts/columnLogin';
...
}
Ho provato a settare layout anche così (senza il path):
In mainLogin.php ho dell’altro codice che pero’ non credo sia necessario alla soluzione del problema, sta di fatto che Yii continua ad utilizzare il vecchio main.php (non quello di default, ma quello nella cartella dei themes).
Ho copiato i file columnLogin.php e mainLogin.php sia nella cartella delle views/layout del mio template, sia in quella di default, Yii continua ad utilizzare il file main.php presente nella cartella del template.
// This is the main Web application configuration. Any writable
// CWebApplication properties can be configured here.
return array(
'basePath' => dirname(__FILE__).DIRECTORY_SEPARATOR.'..',
'name' => 'Lince',
'theme' => 'lince2012',
...
Ed ho creato la cartella "lince2012" in "/themes". I file di cui parlavamo, tranne il controller, ovviamente, sono in "/themes/lince2012/views/layouts/"
in realtà no (infatti ho i files in entrambe le directory, quella di default e quella del tema) però in effetti per la index usa correttamente la main.php del template, però è l’unica conferma che ho trovandomi ancora in una fase di sviluppo embrionale. Per il momento ho messo in “stand-by” questo task concentrandomi su cose più “core”, appena torneremo sull’argomento tornerò a chiedere lumi o a postare l’eventuale soluzione al problema.
Oggi ho affrontato nuovamente il problema, e l’ho risolto senza trovare particolari difficolta, si vede che quel giorno ero particolarmente rinco .
Riporto di seguito i passi necessari al raggiungimento dello scopo, magari possono tornare utili a qualcuno:
Creo 2 nuovi files in /views/layouts e li chiamo "columnLogin.php" e "mainLogin.php" (consiglio di duplicare column1.php e main.php e poi andarli ad editare).
Nel controller siteController nella actionLogin modifico il codice in questo modo:
da
$this->layout='//layouts/column1';
a
$this->layout='//layouts/columnLogin';
Nel file columnLogin.php metto questo codice:
<?php
//*** column1 del tema
$this->beginContent('//layouts/mainLogin');
echo $content;
$this->endContent();
?>
Nel caso io stia utilizzando un template personalizzato, il path /views/layouts sarà riferito alle cartelle presenti all’interno del vostro template in /themes/nomeTemplate/ e non a quelle di default. Sempre in questo caso sarà necessario creare i files per le viste delle singole actions quindi provvedo a copiare la cartella /views/site in quella del template, avrò così la possibilità di personalizzare la login andando a modificare i files /views/layouts/mainLogin.php e /views/site/login.php.