CGridView in CJuiTabs ricerca non funzionante

Salve di nuovo…sono sempre un novello di Yii (lo sto ‘studiando’ da meno di un mese) e sto preparando un prototipo per una applicazione nella quale ho la necessità di avere una form di tipo master-detail.

In realtà (in maniera forse un po artigianale) ho risolto gran parte della problematica, cercando qua e la il da farsi e sono riuscito ad ottenere una view dove ci sono le informazioni del model padre e sotto, nei tab, le gridview dei figli connessi.

Funziona tutto bene per aggiunta, modifica ed elimina…ma ho notato che solo la ricerca nelle gridview all’intero dei tab non ne vuole sapere di funzionare.

Arrivo a credere che sia un problema di riferimento al componente o cmq di dati passati…ma non riesco a capire dove e come sbaglio, anche perchè, ripeto, il resto funziona correttamente.

Di seguito un po di codice per capire il "macello" che sto combinando:

index.php (padre)




<?php

$this->breadcrumbs=array(

	'Siti'=>array('admin'),

	'Gestione',

	$model->id_sito,

);


$this->menu=array(

	/*array('label'=>'List Sito', 'url'=>array('index')),*/

	/*array('label'=>'Crea Sito', 'url'=>array('create')),*/

);

?>


<h1>Gestisci Sito #<?php echo $model->id_sito; ?></h1>


<?php 

$this->widget('zii.widgets.CDetailView', array(

    'data'=>$model,

    'attributes'=>array(

        'num_catalogo_generale',             

        'suffisso_num_catalogo_generale',    

        'protocollo',						 

    ),

));


// create tabs

$this->widget('zii.widgets.jui.CJuiTabs', array(

    'tabs'=>array(

       'Scavi' =>$this->renderPartial("../sitoCampagnaScavo/_detail", array('model' => SitoCampagnaScavo::model()), $this),

	   'US' =>$this->renderPartial("../us/_detail", array('model' => Us::model()), $this),

    ),

    // additional javascript options for the tabs plugin

    'options'=>array(

        'collapsible'=>true,

    ),

));

?>

_detail.php (di uno dei figli…sono tutte uguali come concetto)




<?php 

Yii::app()->clientScript->registerScript('search', "

$('.search-buttonSCS').click(function(){

	$('.search-formSCS').toggle();

	return false;

});

$('.search-formSCS form').submit(function(){

	$.fn.yiiGridView.update('sito-campagna-scavo-grid', {

		data: $(this).serialize()

	});

	return false;

});

");


echo CHtml::link('Ricerca Avanzata','#',array('class'=>'search-buttonSCS')); 

?>


<div class="search-formSCS" style="display:none">

<?php $this->renderPartial('../sitoCampagnaScavo/_search',array(

	'model'=>$model,

)); ?>

</div><!-- search-form -->


<?php 

$this->widget('zii.widgets.grid.CGridView', 

	array(

		'id'=>'sito-campagna-scavo-grid',

		'dataProvider'=>$model->search(),

		'filter'=>$model,

		'columns'=>array(

			'id_campagna_scavo',

			'id_sito',

			'nome_campagna',

			'anno',

			'data_inizio',

			'data_fine',

			/*

			'note',

			'autore_scheda',

			'data_creazione',

			'autore_modifica',

			'data_modifica',

			*/

			array(

				'class'=>'CButtonColumn',

				'template'=>'{view}{update}{delete}',

				'buttons'=>array

				(

					'view' => array

					(

						'label'=>'Visualizza',

						'imageUrl'=>Yii::app()->request->baseUrl.'/images/view.png',

						'url'=>'Yii::app()->createUrl("sitoCampagnaScavo/view", array("id"=>$data->id_campagna_scavo))',

					),

					'update' => array

					(

						'label'=>'Aggiorna',

						'imageUrl'=>Yii::app()->request->baseUrl.'/images/update.png',

						'url'=>'Yii::app()->createUrl("sitoCampagnaScavo/update", array("id"=>$data->id_campagna_scavo))',

					),

					'delete' => array

					(

						'label'=>'Elimina',

						'imageUrl'=>Yii::app()->request->baseUrl.'/images/delete.png',

						'url'=>'Yii::app()->createUrl("sitoCampagnaScavo/delete", array("id"=>$data->id_campagna_scavo))',

					),

				),

			),

		),

	)

); 

?>

Nei model e controller (creati con Gii) non ho modificato praticamente nulla…se richiamate esternamente alle Tab le pagine funzionano normalmente.

Ripeto, data la “fretta” di creare un prototipo ho studiato e applicato al volo quello che mi risultava utile allo scopo…quindi probabilmente mi sono perso dei concetti magari basilari per strada :)

Comunque…spero possiate aiutarmi!!

Grazie in anticipo a tutti voi!!

il fatto e’ che passi un model nuovo alla cgridView:


'model' => Us::model()



E dovresti invece caricare il model con i dati che ti arrivano dall’utente:


$usModel= new Us();

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

    $usModel->attributes= $_GET['Us'];

Perdonami ma non credo di aver capito…

io passo il model alla CGridView dal link del Tab e questo è il model “ufficiale” con i dati che mi servono…i dati presenti nella griglia appaiono come mi servono poichè sono già filtrati a monte grazie all’id del padre (comportamento già presente nel model stesso con un DefaultScope())…e di conseguenza riesco anche ad aggiornare e cancellare correttamente…

l’esempio che mi hai proposto tu (ovvero l’impostazione di attributes) dove andrebbe fatta? riguarda la chiamata al search?

perdonami ma sono un po confuso ???

Grazie ancora!

Devi farlo nel controller.

Dai una occhiata al codice di una actionAdmin, li’ imposta gli attributi del model usando i dati in $_GET, tu devi fare questo lavoro anche per us e sitoCampagnaScavo

Ahh ecco…ora ho capito!!!

Grazie mille ho risolto…ora funziona anche il cerca!!

Urra!!

Cerca di copiare il piu’ possibile dalle pagine generate da gii, tutta esperienza che ci guadagni