Salve a tutti, sto provando da settimane a cimentarmi con il TabularInput per aggiornare più record con un unico form Submit.
Nonostante abbia seguito la guida http://www.yiiframework.com/doc/guide/1.1/it/form.table e nonostante abbia letto praticamente tutti i forum possibili e immaginabbili non riesco a farlo funzionare.
Chiedo cortesemente a qualcuno di voi se può leggere un po del mio codice per capire dove sto sbagliando.
L’ action del controller mi renderizza la vista con un findAll tramite CdBCriteria.
Questa è l’ action:
public function actionClienti()
{
$filiale_id = Yii::app()->user->filiale_id;
$codice_fiscale='Assegna CF';
$cr = new CDbCriteria();
$cr->condition = 'filiale_id = :filiale_id AND status = :status AND codice_fiscale = :codice_fiscale';
$cr->params = (array(':filiale_id' => $filiale_id, ':status'=>0, ':codice_fiscale'=>$codice_fiscale));
$items = Missiva::model()->findAll($cr);
$this->render('frontend/_assegna_codice_fiscale',array('items'=>$items));
}
Vista _assegna_codice_fiscale:
<table class="tabella_login" style="width: 85%; margin: auto;">
<tbody>
<tr>
<td colspan="5" class="tabella_info_header tabella_first_form">Assegnazione Codice Fiscale</td>
</tr>
<tr class="table_data_header">
<td class="table_data_l" width="auto" style="font-weight:bold;">Nome - Cognome</td>
<td class="table_data" width="auto" style="font-weight:bold;">Citta</td>
<td class="table_data_r" width="auto" style="font-weight:bold;">Codice Fiscale</td>
</tr>
<tr id="table_data_content" align="center">
<?php foreach($items as $i=>$item): ?>
<?php echo CHtml::beginForm(); ?>
<td id="table_data" width="auto" style="text-align:left;">
<?php
$nome_cognome =
CHtml::encode($item->cliente_cognome. ' ' .$item->cliente_nome);
echo wordwrap ($nome_cognome,85, '<br />', true);
?>
</td>
<td id="table_data" width="auto">
<?php echo CHtml::activeTextField($item,"[$i]citta",array('value'=>$item->citta, 'name'=>'citta')); ?>
</td>
<td id="table_data" width="auto">
<?php echo CHtml::activeTextField($item,"[$i]codice_fiscale",array('value'=>$item->codice_fiscale, 'name'=>'codice_fiscale')); ?>
</td>
<td id="table_data" width="auto">
<?php echo CHtml::activeTextField($item,"[$i]cliente_id",array('value'=>$item->cliente_id, 'name'=>'cliente_id', 'id'=>'cliente_id')); ?>
</td>
<?php endforeach; ?>
<tr class="tabella_info_footer">
<td colspan=5 class="tabella_chiusura_form">
<?php echo CHtml::submitButton('Salva',array('class'=>'btn btn-primary btn-small', 'submit'=>array('SaveAll')));?>
<?php echo CHtml::endForm(); ?>
</td>
</tr>
</tbody>
</table>
Questa è l’ actionSaveAll:
public function actionSaveAll()
{
// retrieve items to be updated in a batch mode
// assuming each item is of model class 'Item'
$items=$this->getItemsToUpdate();
if(isset($_POST['Missiva']))
{
$valid=true;
foreach($items as $i=>$item)
{
if(isset($_POST['Missiva'][$i]))
$item->attributes=$_POST['Missiva'][$i];
$valid=$item->validate() && $valid;
}
if($valid) ; // all items are valid
// ...do something here
}
// displays the view to collect tabular input
$this->render('frontend/_assegna_codice_fiscale',array('items'=>$items));
}
Questa è la funzione getItemsToUpdate():
public function getItemsToUpdate() {
// Create an empty list of records
$items = array();
// Iterate over each item from the submitted form
if (isset($_POST['Missiva']) && is_array($_POST['Missiva'])) {
foreach ($_POST['Missiva'] as $item) {
// If item id is available, read the record from database
if ( array_key_exists('id', $item) ){
$items[] = Missiva::model()->findByPk($item['cliente_id']);
}
// Otherwise create a new record
else {
$items[] = new Missiva();
}
}
}
return $items;
}
Perfavore qualcuno salvi il mio cervello!!! sto andando in depressione !!! Non riesco a fargli passare i parametri via post perchè non capisco come vada strutturata in questo senso l’ actionClienti. Credo l’ errore sia in questa action…ma non riesco a risolvere …Ho provato a fare il render della vista nella stessa actionSaveAll…ma non cambia nulla. E’ la seconda volta che provo il Tabular Input…già la prima volta avevo abbandonato perchè non mi riusciva. Ora vorrei riuscire a farlo funzionare…per questo vi chiedo un’ aiuto. Un Saluto.