Cgridview - Passaggio Dei Dati Al Controller

Ciao a tutti…

ho una domanda da fare. In una pagina ho una CGridView. L’utente ovviamente può filtrare, ordinare ecc come gli pare. Ora in questa pagina ho un pulsante che fa il submit di una form reindirizzandomi in un altra pagina dove faccio l’analisi dei dati. Ora la mia domanda è : come faccio a passare alla pagina di analisi dei dati le sole righe contenute nella CGridView?

metti un bottone nella columnbutton, fai il submit anche solo dell’id, nell’action recuperi i valori che ti servono e renderizzi la view interessata.

oppure se vuoi mantenere la tua struttura, devi mettere dei checkbox, e con un bottone ajax recuperi l’id della riga e poi segui lo stesso ragionamento del suggerimento sopra.

oppure mi viene il dubbio, che non ho capito cosa vuoi fare.

vuoi mandare tutte le righe filtrate ad un’altra pagina?

se è così, anche se non riesco a focalizzarne l’utilizzo, puoi passarti le criteria e poi recuperare i valori.

ciao, allora in pratica il mio obbiettivo è questo. passare l’istanza di CActiveDataProvider sulla quale lavora la CGRidView alla pagina di analisi dei dati. In questo modo posso avere il riferimento a tutti i dati che erano filtrati nella griglia e lavorarci sopra

ma la pagina di analisi esiste già o devi costruirla?

come lavora? se deve lavorare con un ActiveDataProvider,

ovviamente il dataprovider che ti genera la gridview ce lo hai già, la cosa che ti manca

sono i valori dei filtri, che una volta recuperati con il submit li aggiungi come criteria a seconda di come ti servono.

sbaglio?

Esatto. La pagina la sto costruendo, anzi diciamo che la sto ottimizzando. Di activedataprovider uso quello della griglia , ok, ma come lo passo alla pagina di analisi? Per quanto riguarda i filtri ho provato a utilizzarli in un certo modo ma capita una cosa strana. Ti spiego. In pratica se tu ci fai caso quando in una pagina metti una CGridView tutti i campi di testo dei filtri hanno un nome costruito in questo modo: [nomeDelModello][nomeDelCampo] (lo puoi vedere con Chrome cliccandoci sopra col destro e poi selezionando “ispeziona elemento”). Una volta appurato questo ho fatto un paio di tentativi. In pratica ho messo la CGridView in mezzo ad una form e nella pagina di analisi andavo a recuperarmi i dati con $_POST[nomeDelModello][nomeDelCampo]. Tutto funziona perfettamente fino a quando non si scrive nulla nei campi di testo dei filtri. Quando scrivo qualcosa viene spianata la parte dell’array $_POST che contiene i dati dei campi della CGridView. Ma la cosa strana è che questo avviene solo con explorer (che sbocco…). All’inizio infatti facevo le mie prove con Chrome e tutto andava alla grande. Poi un cliente mi ha fatto notare che con explorer non andava… maledetta Microsbocc!

si so come funziona, se guardi come viene renderizzata una actionAdmin (generata con gii) potrai renderti conto meglio di come lavora yii e del perchè di quello che dici.

avrai un:




		$model=new Scheda('nomeDelModello');

		$model->unsetAttributes();  // clear any default values

		if(isset($_GET['nomeDelModello']))

			$model->attributes=$_GET['nomeDelModello'];


		$this->render('admin',array(

			'model'=>$model,

		));



come puoi capire dallo snippet di codice, una volta che crei un oggetto "nomeDelModello" nella view i campi della form se generati con gli strumenti che ti fornisce yii saranno necessariamente come dici tu, e quindi name=[nomeDelModello][nomeAttributo].

Da qui per dirti che i campi puoi recuperarli semplicemente come puoi vedere nel codice esemplificativo (sempre generato con gii) di una create o update:




		$model=$this->loadModel($id);


		if(isset($_POST['nomeDelModello']))

		{

			$model->attributes=$_POST['nomeDelModello'];

			if($model->save())

				$this->redirect(array('view','id'=>$model->id));

		}


		$this->render('update',array(

			'model'=>$model,

		));



in questa maniera:




$model->attributes=$_POST['nomeDelModello'];



dopo di che non ho capito la seconda parte di quello che hai scritto:

“Tutto funziona perfettamente fino a quando non si scrive nulla nei campi di testo dei filtri. Quando scrivo qualcosa viene spianata la parte dell’array $_POST che contiene i dati dei campi della CGridView. Ma la cosa strana è che questo avviene solo con explorer (che sbocco…). All’inizio infatti facevo le mie prove con Chrome e tutto andava alla grande. Poi un cliente mi ha fatto notare che con explorer non andava… maledetta Microsbocc!”

cosa vuol dire che se inizi a scrivere nel campo text del filtro si resettano gli altri valori?

No perchè che cambi dinamicamente la gridview è normale, perchè nei filtri ad ogni onchange corrisponde una chiamata ajax per aggiornare la grid.