Main.php Personalizzata Per Il Login

Ciao ragazzi,

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?

Grazie mille.

Questo è il layout column1.php di default:




<?php $this->beginContent('//layouts/main'); ?>

<div id="content">

	<?php echo $content; ?>

</div><!-- content -->



puoi creare un layout columnLogin.php e modificarlo in questo modo




<?php $this->beginContent('//layouts/mainLogin'); ?>

<div id="content">

	<?php echo $content; ?>

</div><!-- content -->



Quindi avrai un mainLogin personalizzato. Ed un layout columnLogin personalizzato.

dentro all’action fissi il layout

La mia action utilizza un layout (ad esempio column1 che posso sovrascrivere con $this->layout=‘columnLogin’;).

a sua volta il layout richiama un altro template:

<?php $this->beginContent(’//layouts/mainLogin’); ?>

Ciao e innanzi tutto grazie della risposta :)

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):


$this->layout='columnLogin';

ottenendo lo stesso risultato.

In columnLogin.php ho questo codice:




<?php

	$this->beginContent('//layouts/mainLogin');

	echo $content;

	$this->endContent();

?>



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.

Grazie ancora.

Marco.

Il nome del tema è specificato correttamente all’interno del file di configurazione!?

Il template lo imposto così, in /config/main.php:




// 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/"

Grazie ancora.

Marco.

E sei certo che "tira su" le view presenti nella cartella themes?

Ciao sensorario,

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.

A presto, grazie.

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.

Spero di essere riuscito a spiegarmi bene.

Ciao a tutti