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!!