stavolta avrei bisogno di una dritta su come rendere leggibili dei dati durante la visualizzazione "view" di un item…mi spiego meglio:
l’item in questione è un model di tipo “Applicazioni” e come spesso capita, ha degli attributi che non sono altro che ID di tabelle anagrafiche esterne, ad esempio
"Sistema Operativo = 2" dove nella tabella "SistemiOperativi" il 2 = "Win7" ad esempio.
praticamente ho la necessità di rendere umanamente leggibili i dati numerici che ho.
ora come sappiamo il 99% delle view.php utilizza CDetailView come classe per presentare i dati, domanda: [b]
come è possibile inserire all’iterno di uno o + attributi una funzione custom capace di formattare i dati?[/b]
<?php $this->widget('zii.widgets.CDetailView', array(
'data'=>$model,
'attributes'=>array(
'id_applicazioni',
'desc_nome',
'fk_id_area',
'fk_id_tipi_applicazioni',
'fk_id_aree_infap',
'fk_id_piattaforma',
'fk_id_unita_organizzativa',
'fk_id_societa',
'nume_dismessa',
'nume_sostituita',
'nume_certificazione',
'data_dismissione',
'row_created_dttm',
'row_created_user',
'row_updated_dttm',
'row_updated_user',
array(
'name'=>'flag_eliminato_sn',
// --> funzioneCustomFormat prende il dato lo elabora e ne ripresenta il corrispettivo label etc etc
// --> questa cosa l'ho provata in CGridView e và...ma in CDetailView no...
'value'=>array('Applicazioni','funzioneCustomFormat')
),
),
)); ?>
Per questi casi e’ meglio fare un getter nel model per ottenere il valore gia’ formattato:
public function getFormattedData()
{
return Applicazioni::funzioneCustomFormat($model->data)
}
In questa maniera aggiungi valore al model, e puoi usarlo anche nella cgridView senza ricorrere a dei callable, che sono l’equivalente delle goto e incasinano il codice
poi nel model* la funzione fa una cosa semplicissima, per ora:
public function formatInput($field){
switch ($field){
//*** FLAG_ELIMINATO_SN
case 'flag_eliminato_sn':
$tmp = $this->attributes[$field];
return $tmp .= ($this->attributes[$field]=='S')?" (Elemento eliminato)":" (Elemento attivo)";
//*** per default ritorno il valore di entrata
default:return $this->attributes[$field];
}
}
= in realtà questa funzione formattatrice, per motivi di comodità l’ho inserita all’interno di una classe che ho inserito tra i Model e ActiveRecord…ma la lgica della cosa è la stessa.