[Risolto] In A Form Di Un Oggetto È Possibile Vedere Anche Una Gridview Di Un'altro Modello Relazionato?

Oggetti

Listings [N - 1] ListingItems [1 - N] Items

Attualmente ho già tutte le relations impostate e funzionanti.

Nella form dei listings ho una combo che prende gli item e li associa al listino grazie ad un pulsante.

Subito sotto, nella form ho temporaneamente fatto questo per vedere gli item già abbinati al singolo listino




<?php 

	     foreach ($model->listingItemObj as $listingItem) {

                            echo "<PRE>";

                            print_r ($listingItem->itemObj->description);

                            echo "</PRE>";

	     }

				    

?>



Questo funziona, e senza fare nient’altro !!!

Dato che esteticamente fa schifo, ma la relazione N->1->N funziona benissimo, vorrei aggiungere nella view _form una CDataGridView che mi visualizzi tutti gli item di quel listino.

C’è modo di dire alla CGridView di fare sta cosa?

Ha senso questa strada? http://www.yiiframework.com/wiki/224

Devi usare un arrayDataProvider perche’ devi prendere i dati non dal db ma dal post.

Grazie per la dritta !

Dimmi se ho fatto bene o se c’era una strada più semplice ancora:

Nel model di Listing ho creato questo




	// Dà una lista degli Item associati ad uno specifico Model

	public function searchAssociated() {

	    $items = Item::model()->with('listingItemObj')->findAll("listingItemObj.listingId = " . $this->id);

	    $arrayDataProvider=new CArrayDataProvider($items, array(

	            'id'=>'id',

	            'pagination'=>array(

	                    'pageSize'=>10,

	            ),

	    ));

	    return $arrayDataProvider; 

	}



Questo invece è dentro la view _form: come puoi vedere compare solo se sono in modifica




<div class="mws-form-row" <?php if ($model->isNewRecord) echo "style='display: none;'"; ?>  >

                	<div class="mws-panel-header">

                		<span class="mws-i-24 i-list"><?php echo Yii::t('models', 'Item' );  ?></span>

                	</div>

                	<div class="mws-panel-body">

                	    <?php $params =array('arrayDataProvider'=>$model->searchAssociated(), );

        		               echo $this->renderPartial('_associatedItem', $params); 

        		        ?>			

                	</div>				

				</div>



Ed infine ecco il partial _associatedItem:




	

<?php


if ( $this->hasWriteAccess() )

{

    $template = '{delete}';

    $assButtonsArray = array(

            'delete' => array(

                    'label'=>Yii::t('general','Cancella'),

                    'imageUrl'=> Yii::app()->request->baseUrl.'/css/icons/16/cross.png',

            ),

    );

}


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

    	'id'=>'item-listing-grid',

    	'dataProvider'=>$arrayDataProvider,

    	'template'=>'{items}{pager}{summary}',

    	'pager' => array(

    		'header' => false,

    	),

    	'columns'=>array(

	        array (

                'name' => Yii::t('Item.Item',"Code"),

                'value' => '$data->code',

	        ),

    	    array (

    	        'name' => Yii::t('Item.Item',"Description"),

    	        'value' => '$data->description',    

    	    ),

	        array(

                'class'=>'CButtonColumn',

                'template'=> $template,

                'buttons'=> $assButtonsArray,

	        ),

    	),

    )); 




?>




Dato che la form ha come model un Listing, che HAS_MANY ListingItem, il quale BELONGS_TO Item, mi aspettavo di poter usare come array

$model->listingItemObj (che è il nome della relation dentro a listing, che appunto lega listing a listingItem)

RISOLTO !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Nel model di listing





$arrayDataProvider=new CArrayDataProvider($this->listingItemObj ,




E poi nelle colonne della CGridView:




array (

                'name' => Yii::t('Item.Item',"Code"),

                'value' => '$data->itemObj->code',

	        ),

    	    array (

    	        'name' => Yii::t('Item.Item',"Description"),

    	        'value' => '$data->itemObj->description',    

    	    ),




Preciso, e questo sistema funzione bene anche se ottieni la lista dal post, cioe’ se ti fai tutti gli abbinamenti in post e salvi sul db alla fine, come sarebbe coerente fare nelle form.

come diceva topo gigio, ma cosa mi dici mai !?!?

spiegami spiegami, che non ho capito come fare ma questa cosa mi interessa …

vuoi dire che potrei tenermi in form la relazione tra il listino e gli oggetti senza fare cose sconcie in javascript e senza fare il submit ogni volta (posto che ci mette talmente poco che quasi sembra sia fatto via ajax) ?

come si fa ? ;D