Salve mi stò avvicinando da poco a questo framework e dopo aver letto sia il cookbook che ‘Agile Web Application Dev with Yii 1.1 and Php5’ mi manca un pezzo o forse non ho compreso bene l’argomento.
L’argomento è il LAYOUT che a quanto pare non sembra permettere la gestione di + blocchi in una singola pagina, ma solo inclusioni stile matrioske (uno dentro l’altro).
Il mio intento è gestire nella stessa pagina più richieste contemporaneamente (un grafico, una gridview, etc…) come è possibile ottenere ciò con Yii ?
e così via. Occhio: in questo modo richiami il template grafico o gridview del controller attuale. Se vuoi specificare anche il controller devi indicare
Concordo sull’utilizzo di php per quanto riguarda i template, dunque nella view principale (quella dell’index.php) posso richiamare diversi templates ? Per template si intende la proprietà Layout del controller vero ? Quindi personalizzare il layout ad ogni controller che intendo usare come componente dell pagina principale.
Credo possa esserti utile sapere una cosa molto importante che riguarda i layout. Prendiamo una richiesta "base" ovvero index.php?r=site/index. Il codice che verrà richiamato sarà nel controller SiteController che si troverà nella cartella /protected/controllers. Abbiamo il layout e la view e sono indicati nel commento.
class SiteController {
public function actionIndex()
{
// renders the view file 'protected/views/site/index.php'
// using the default layout 'protected/views/layouts/main.php'
$this->render('index');
}
}
Il layout protected/views/layouts/main.php ad un certo punto ha un pezzetto di codice del tipo <?php echo $content; ?> in cui verrà renderizzato il contenuto di $this->render(‘index’) che corrisponde a protected’/views/site/index.php.
Detto questo, ti dico un paio di cose che potrebbero esserti utili. Guarda il prossimo snippet:
class SiteController {
public $ciaoMondo;
public function actionIndex()
{
$this->ciaoMondo = 'ciao';
$this->render('index', array(
'ciao' => 'mondo
));
}
}
Sia dentro al layout che alla view, sarà possibile usare la variabile $this->ciaoMondo. Al contrario, SOLO dentro alla view, sarà possibile usare una variabile $ciao.
Oltre a questo, aggiungo che SiteController, come tutti i controller che avrai, estende la classe Controller (che a sua volta estende CController). Controller la trovi dentro a /protected/component/Controller.php mentre CController fa parte del framework.
Se ti serve avere dei blocchi all’interno del tuo template, ti consiglio un paio di cose
dentro al layout utilizza <?php echo $this->nomeBlocco; ?>
Per ogni blocco, definisci una variabile pubblica dentro alla classe Controller
Perfetto mi hai chiarito il livello di visibilità delle variabili, grazie, però sbaglio o così dovrò gestire tutto da un unico Controller ? E quindi ritrovarmene uno corposissimo, pieno di funzioni … e di models (per i database)
La mia pagina conterrà molti widget (all jQuery based) dunque avrò da fare continue richieste asincrone (Ajax) allo stesso Controller.
Chi e come si gestiscono le chiamate di tipo ajax (con Yii)?
Interessanti anche le potenzialità con la grafica, dovrò fare un pò di esperimenti. Anch’io ho le stesse esigenze di paskuale.
Ne approfitto per chiedere una dritta.
Ho realizzato una mini applicazione didattica di cui ho pubblicato anche i sorgenti e volevo provare a modificarne la grafica arrotondando gli angoli delle edit box.
Da quello che ho capito, basta usare jquery e scrivere un codice simile a questo:
non so se ho ben capito quello che vuoi fare, ma ci provo: io ho realizzato una applicazione che aveva un’unica pagina composta da 3 blocchi di codice html caricati con chiamate ajax.
Per questioni di gestione permessi e diversificare i controller ne ho utilizzati 3. Le chiamate ajax nella index principale (vedi #7 di sensorario) chiamano le varie funzioni action dei controller ed il fatto che siano chiamate ajax cambia solo il metodo di renderer utilizzato nella action, che deve essere appunto renderPartial per non caricare tutto il layout. RenderPartial carica un file php in cui avrai la view restituita alla chiamata ajax.
La cosa è + semplice farla che non spiegarla, però un minimo di documentazione leggila, altrimenti rischi di perdere un sacco di tempo nel cercare di fare cose semplici, ma ben documentate.
Beh che dire … forse non era un framework mvc che cercavo ma qualcosa che mi aiutasse a snellire il lavoro ripetitivo della programmazione iniziale, ho deciso di fare da me … classi personalizzate e stop, alla fine questi MVC servono (sembrerebbe) per siti blog style, per chi deve organizzare una web.app il tempo per apprendere un nuovo framework è troppo, come dire … “l’impresa non vale la spesa” torno sui miei passi a farmi un pò di OOP + grezzo ma perlomeno ho il controllo totale su quello che faccio e quello che mi serve.
Anch’io sono stato tentato di abbandonare l’impresa piu’ di una volta. Ma poi ho resistito perche’ sono convinto che alla lunga, recuperero’ il tempo iniziale e poi andro’ piu’ veloce della luce. O almeno lo spero.
Io vi ringrazio tutti per i consigli e le preziose info, ma potreste ‘sbottonarvi’ un pò di più nelle spiegazioni se non chiedo molto ?
Non è una pretesa sia ben chiaro, ma se volete invogliare la crescita di questo frmwork (che mi stà simpatico lo ammetto) non bisogna sciupare 15 post di un topic per capire solo una riga e scoprire dopo una decina che lo slash era doppio e non singolo …
Forse mancano delle demo funzionanti oltre al bel alvoro di traduzione della guida ufficiale.
Beh non è niente di straordinario, solo una cozzaglia di classi fatte su misura alle mie esigenze, che non hanno i vantaggi di un MVC indubbiamente, e forse meno light di un MVC, ma mi lasciano libero dagli schemi, posso fare quello che voglio dentro una pagina, nel mio caso (una sorta di pannello di controllo) non posso limitarmi a [una richiesta= un controller=una azione per pagina] ma bensi [una richiesta=una risposta+tanti widget/files intorno aggiornati con ajax eventualmente].
Ribadisco la mia personale simpatia verso Yii ma non era quel che cercavo forse.