Esaminiamo renderPartial

Allora come da oggetto, ero alle prese con la lettura del metodo renderPartial

Questo metodo permette l’uso di 4 parametri.

$view = il nome della vista dove vengono riversati i dati,

[i]

es. renderPartial(‘ugo’,…,…,…,…);

sarà l’equivalente di un tradizionale include_once(’/protected/views/nome_del_controller/ugo.php’)

[/i]

$data = i dati veri e propri sottoforma di un array associativo,

[i]

es. renderPartial(‘ugo’,array(‘pippo’=>$jumbo),…,…,…);

Se nel controller abbiam definito $jumbo = 10;

all’interno del nostro (’/protected/views/nome_del_controller/ugo.php’) potremo far uso della variabile $pippo che conterrà il valore $jumbo quindi $pippo sarà uguale a 10.

[/i]

===========

domanda sui restanti 2 parametri ($return e $processOutput)che nonstante li abbia tradotti dall’ing all’ita non li comprendo ;)

thanks

Non li ho mai usati, ma sono convinto che $return, se impostato a true, dica a renderPartial di NON stampare il contenuto di $view, e di restituirlo:




$codice = $this->renderPartial('view', null, true);



Come dire… renderizzami il codice che me lo metto in una variabile. E’ un po’ la logica di var_export o var_dump di php.

Sul processOutput non so aiutarti.

Per capire meglio ogni metodo/parametro non ce miglior modo che leggere il codice… era questa la mia ideaguardi la documentazione quando ho generato il "show source code"… che a quel tempo era unico tra tutti i framework… guardi la documentazione… e se non e chiara… premi "show" et voila… ti si mostra il source del methodo…

per il terzo parametro nel source puoi vedere




if($return)

	return $output;

else

	echo $output;



E lo stesso che ha spiegato sensorario, pero molto piu “geek” ;)

Per il processOutput ti sara un po piu difficile capire il codice core affince non ci fai conoscienca…, pero in breve… se e true si rende anche il codice javascript necesario, se e false no (util in certi cassi come una ajax chiamata)

Grazie ragazzi ho rettificato non erano 5 ma bensì 4 i parametri.

io mi son letto il codice alla riga #866 della classe CController :P è lo stesso presumo, certo che a leggerlo (sarà l’oraio) ma mi si torcono gli occhi!!


...

$output=$this->renderFile($viewFile,$data,true);

        if($processOutput)// se $processOutput è true

            $output=$this->processOutput($output); //andiamo a capire cosa fà $this->processOutput()

        if($return)//se $return è true

            return $output; // questo ritorna il valore

        else

            echo $output; // mentre questo stampa il valore ...

....

non ho capito, ma il nome_del_controller non dovrebbe essere in /protected/controllers/nome_del_controller/ugo.php ?

Se il controller si chiama "Mouse", deve chiamarsi MouseController e si deve trovare dentro al file /protected/controllers/MouseController.php. Dentro questo file ci sarà una classe chiamata MouseController. Le cartelle sono tutte lowercase. I nomi di file/classe sono UpperCamelCase.

La confusione nasce da questo articolo

in cui spiega di usare la seguente sintassi:


<?php $this->renderPartial('//library/_book', array('books'=>$books))?>

che riutilizza la view contenuta in /protected/views/library/_book.php

quindi è possibile dire a renderPartial di usare sia una view che un controller?

I controller sono nel folder protected/controllers/

Le view sono nel folder protected/views/<nome_del_controller>/

Percio se hai un controller chiamato Mouse… avrai


protected/controllers/MouseController.php

Le view usate da lui si trovano nel folder


protected/views/mouse/

cioe se il view si chiama ugo.php, avrai un file


protected/views/mouse/ugo.php

Nel controller Mouse per usare una sua view basta dare il nome della view


$this->render('ugo.php');

Se vuoi usare questa view da un altro controller… alora nel altro controller userai


$this->render('//mouse/ugo.php');

spero sia piu chiaro