Login
Libri
Home Argomenti Generali Viste

Viste

Share

Una vista è semplicemente una pagina web, o un frammento di pagina, come l'header, footer, sidebar, etc. Infatti, le viste possono essere inglobate all'interno di altre viste (a sua volta inclusa in un'altra vista, etc.,etc.) se si ha bisogno di questo tipo di gerarchia.

Non si può richiamare direttametne una vista, esse devono essere caricate da un controller. Ricorda che in un framework MVC, i Controllers si comportano come un vigile del traffico, ovvero sarà responsabile nel prendere una particolare vista. Se non si è letto il capitolo sui Controllers, se ne consiglia la lettura prima di procedere.

Usando il controller creato come esempio nella pagina dei controllers, aggiungiamogli una vista.

Creare una Vista

Usando il tuo editor di testo crea un file chiamato blogview.php e inserisci il seguente codice HTML:

<html> 
 <head> 
 <title>My Blog</title> 
 </head> 
 <body> 
 <h1>Welcome to my Blog!</h1> 
 </body> 
</html>

Poi salva il file nella cartella application/views/.

Caricare una Vista

Per caricare un vista particolare è necessario utilizzare la seguente istruzione:

$this->load->view('name');

Dove name è il nome del tuo file. Nota: Non è necessario specificare l'estensione .php a meno che non si utilizzi qualcosa di diverso.

Ora, apri il file controller fatto in precedenza e chiamato blog.php e sostituisci le istruzioni echo con le funzioni per richiamare le viste:

<?php 
class Blog extends Controller { 
function index() { 
 $this->load->view('blogview'); 
 } 
} 
?>

Se visiti il tuo sito potrai vedere il nuovo layout. L'URL sarà simile al seguente:

example.com/index.php/blog/

Caricare Viste multiple

CodeIgniter gestirà intelligentemente chiamate multiple a $this->load->view all'interno del controller. Se ci sarà più di una chiamata, queste verranno unite insieme. Per esempio, si potrebbe avere una view con l'header, una con il menù, una con i contenuti ed una con il footer. La chiamata potrebbe avvenire nel seguente modo:

<?php
 
 class Page extends Controller {
 
 function index()
 {
 $data['page_title'] =  'Your title';
 $this->load->view('header');
 $this->load->view('menu');
 $this->load->view('content', $data);
 $this->load->view('footer');
 }
 
 }
 ?>

Nell'esempio sopra, è stato usata "l'assegnazione di dati automatica", che verrà spiegata in seguito.

Salvare Viste all'interno di sub-cartelle

Se si preferisce questo tipo di organizzazione le tue viste potranno essere salvate all'interno di sub cartelle. Per richiamare le viste sarò quindi necessario includere il nome della cartella quando si richiama la vista. Per esempio:

$this->load->view('folder_name/file_name');

Aggiungere Dati Dinamici alle Viste

I Dati possono essere passati dal controller alla vista attraverso un array o un oggetto come secondo parametro nella funzione che richiama la vista. Di seguito un esempio utilizzando un array:

$data = array(
 'title' => 'My Title',
 'heading'   => 'My Heading',
 'message' => 'My Message'
 );
 
 $this->load->view('blogview', $data);

Mentre sotto viene passato un oggetto:

$data = new Someclass();
 $this->load->view('blogview', $data);

Nota: se si utilizza un oggetto le variabili della classe saranno convertiti in elementi di un array.

Prova con il file controller creato in precedenza. Aprilo ed aggiungi questo codice:

<?php 
class Blog extends Controller { 
 function index() { 
 $data['title'] = "My Real Title"; 
 $data['heading'] = "My Real Heading"; 
 $this->load->view('blogview', $data); 
 } 
} 
?>

Ora apri il file view e cambia il testo nelle variabili che corrispondono alle chiavi dell'array:

<html> 
<head> 
 <title><?php echo $title;?></title> 
</head> 
<body> 
 <h1><?php echo $heading;?></h1> 
</body> 
</html>

Al caricamento della pagina si dovrebbero vedere i valori contenuti nelle variabili.

Creare Loops

Gli array che vengono passate alle viste non sono limitati a semplici variabili. E' possibile passare anche array multidimensionali, che possono essere utilizzati per creare righe multiple attraverso loop. Per esempio, se si estraggono dati da un database, questi, tipicamente, sono rappresentati da array multidimensionali.

Qui un semplice esempio. Aggiungi al tuo controller:

<?php 
class Blog extends Controller { 
 function index() { 
 $data['todo_list'] = array('Clean House', 'Call Mom', 'Run Errands'); 
 $data['title'] = "My Real Title"; 
 $data['heading'] = "My Real Heading"; 
 $this->load->view('blogview', $data); 
 } 
} 
?>

Ora apri la vista e crea un loop:

<html> 
 <head> 
 <title><?php echo $title;?></title> 
 </head> 
 <body> 
 <h1><?php echo $heading;?></h1> 
 <h3>My Todo List</h3> 
 <ul> 
 <?php foreach($todo_list as $item):?> 
 <li><?php echo $item;?></li> 
 <?php endforeach;?> 
 </ul> 
 </body> 
</html>

Note: Come si nota, nell'esempio sopra abbiamo utilizzato la sintassi alternativa di PHP. Se non si ha familiarità con questo tipo di sintassi è possibile approfondire qui.

Restituire viste come dati

Esiste un terzo parametro, opzionale, che cambia il comportamento della funzione così che ritorni dati della vista sotto forma di una stringa, invece di essere inviata al browser. Questo potrebbe essere utile quando si voglio processare le inforamzioni in modi diversi. Se si setta il parametro a TRUE la funzione ritornerà una stringa. Di default il terzo parametro è settato a FALSE, ovvero la vista viene inviata al browser. ricordati di assegnare la funzione ad una variabile se si vuole ottenere che la vista ritorni sotto forma di dati:

$string = $this->load->view('myfile', '', true);

Ultimo aggiornamento ( Domenica 06 Giugno 2010 06:19 )