Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Viste

Semplici file PHP, richiamati dal controller, che servono a mostrare a video il codice XHTML.
Semplici file PHP, richiamati dal controller, che servono a mostrare a video il codice XHTML.
Link copiato negli appunti

Le viste rappresentano la parte più semplice del pattern MVC. Si tratta di semplici file PHP in cui, mediante del normalissimo codice HTML, viene mostrato l'output all'utente finale. Ovviamente, nel caso di pagine dinamiche, avremo pezzi di codice PHP. La quantità di codice PHP deve essere ridotta al minimo questo per applicare alla regola il pattern MVC.

Prima di vedere come si passano dati alle viste è bene soffermarci un attimo sulla nomenclatura.

Le viste si trovano nella posizione application.views (alias). All'interno di questa cartella sono presenti ulteriori cartelle ognuna delle quali rappresenta un gruppo di file. L'insieme di questi file forma le viste per un determinato controller. Il nome di queste cartelle corrisponde all'id del controller con la prima lettera minuscola. Nel nostro caso, riferendoci al controller user, le viste che ci interessano sono quelle situate sotto la cartella user.

A questo punto si potrebbe pensare che un controller può renderizzare esclusivamente le proprie viste. Anche se questa è la prassi consigliata, è possibile renderizzare le viste di un altro controller.

Scorgendo l'albero dell'applicazione vi sarete resi conto che sotto la cartella views è presente una cartella chiamata layouts. Intuirete che questa cartella costituisce il template della nostra applicazione. Prima di soffermarci su di essa però, dobbiamo chiarire ancora come visualizzare una vista e come passargli dei valori.

L'operazione di renderizzazione di una vista avviene all'interno dei singolo controller. Il metodo che ci consente di effettuare questa operazione è il metodo render. Questo metodo ha tre argomenti:

  • Nome della vista: indica il nome del file fisico da caricare senza l'estensione PHP. Normalmente il file viene ricercato sotto la cartella views/idController. Nel caso quindi del controller user views/user/nomeDellaVista
  • Parametri: un array associativo.
  • Return (booleano): se questo parametro è impostato su true la vista non viene mostrata a video ma viene restituita come stringa. In questo caso quindi il metodo render ha un valore di ritorno di tipo stringa. Tuttavia il valore di default è impostato a false e quindi la vista viene visualizzata.

Per quanto riguarda i parametri si tratta appunto dei dati variabili che possono essere renderizzate nelle viste semplicemente leggendone i valori. Ad esempio se all'interno di una delle azioni del nostro controller user scriviamo una cosa del genere:

$parametri = array('oggi'=>date("d-m-Y"));
$this->render('index',$parametri);

visualizzeremo a video il contenuto del file index.php che si trova nella cartella views/user. Inoltre inserendo nella vista il seguente codice:

<?php
	echo $oggi;
?>

Questo codice stamperà quindi la data odierna. Come si nota il nome della variabile corrisponde alla chiave dell'array parametri. È facile intuire che in questo modo possiamo visualizzare nella vista tutti i dati che vogliamo.

Richiamare il metodo render vuol dire mostrare, all'interno del template del sito, il contenuto di una vista. Il template del sito viene realizzato mediante i file che sono presenti nella cartella views/layout. Facendo riferimento al controller user, si nota la presenza del seguente codice:

public $layout='//layouts/column2';

questo codice indica ad Yii che deve utilizzare, per la visualizzazione delle nostre pagine, il file column2.php che si trova ovviamente sotto la vista layouts del sito. È possibile modificare questa proprietà in ogni controller, in modo da personalizzare il template.

A questo punto guardiamo più da vicino la vista layouts che contiene informazioni molto importanti. Come abbiamo accennato in precedenza questa vista rappresenta, insieme ai fogli di stile, il template della nostra applicazione.

Scendendo ancora di più nel dettaglio possiamo affermare che oltre al file main anche i file column1.php, e column2.php contribuiscono alla realizzazione del template. Abbiamo appena detto infatti che modificando la proprietà layout del nostro controller, possiamo scegliere quale dei due file utilizzare tra column1 e column2. Se analizziamo entrambi i file ci rendiamo conto che all'inizio e alla fine di ognuno troviamo il seguente codice:

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

e

<?php $this->endContent(); ?>

Questo codice, che va inserito in ogni file che vogliamo usare come template, come ad esempio una struttura a tre colonne, effettua il render della pagina main sempre della vista layouts. $this invece rappresenta l'istanza del controller che invoca la vista.

Bisogna assolutamente che ricordiate questa cosa. Infatti all'interno delle viste potranno essere renderizzati dei widget, di cui discuteremo più avanti, mediante l'istanza del controller. In merito i widget al momento ci interessa sapere che sono strumenti che ci aiutano a realizzare porzioni di codice anche complesse. Nel file main.php si utilizza un widget per la realizzazione del menu in alto. Come si vede ogni elemento del menu è un array in cui c'è la label e l'url.

Dando un rapido sguardo al file main, ci si rende conto che in un punto del codice è presente:

<?php echo $content; ?>

In questa posizione verrà inserito il contenuto del file definito nella proprietà layout del controller. Nel nostro caso quindi verrà visualizzato il contenuto del file column2.

Sempre guardando il file main troviamo il seguente codice:

Yii::app()->request->baseUrl;

come si intuisce esso fornisce l'uri di base della nostra applicazione. Infatti viene utilizzato per caricare i css e i javascript che intendiamo adoperare nell'applicazione.

Nel Tag title della pagina troviamo

CHtml::encode($this->pageTitle);

Il valore della proprietà $this->pageTitle fornisce il titolo della nostra pagina che Yii comporrà automaticamente, mentre il metodo statico CHtml::encode, parte di una classe helper di Yii, trasforma i caratteri speciali in entità HTML

Molto interessante è la proprietà Yii::app()->user->isGuest che ci dice infatti se l'utente è un guest o un utente registrato. Sfruttando questa proprietà, insieme all'attributo visible del menu, è possibile quindi visualizzare o meno una voce del menu a secondo se si tratta di un utente registrato o meno. Per finire il seguente pezzo di codice

<?php if(isset($this->breadcrumbs)):?>
	<?php $this->widget('zii.widgets.CBreadcrumbs', array(
		'links'=>$this->breadcrumbs,
	)); ?><!-- breadcrumbs -->
<?php endif?>

Visualizza il bradcrumbs.

Per concludere il discorso delle viste dobbiamo parlare del metodo renderPartial. Come intuirete dal nome questo metodo effettua una renderizzazione parziale di una vista. Cosa vuol dire? Che, a differenza del metodo render, il file main, ed eventualmente il file dichiarato nella proprietà layout, non vengono renderizzati. Solo il contenuto del file richiamato dal metodo è processato e mostrato.

Questo sistema risulta particolarmente utile quando ci sono porzioni di codice comuni a più viste. Il metodo dispone di quattro argomenti. Oltre a quelli del metodo render è disponibile $processOutput. Questo parametro se impostato a true processa gli script all'interno della vista. In poche parole se ci sono javascript all'interno del codice questi vengono processati.

Ti consigliamo anche