Ho un problema stupidissimo con Yii.
Se nella descrizione delle attribute labels del model metto dei caratteri accentati, nel browser viene segata via tutta la parola
Per esempio, nel model ho:
class Issue extends CActiveRecord
{
....
/**
* @return array customized attribute labels (name=>label)
*/
public function attributeLabels()
{
return array(
'id' => 'ID',
'name' => 'Nome',
'description' => 'Descrizione',
'project_id' => 'Progetto',
'type_id' => 'Tipo',
'status_id' => 'Status',
'priority_id' => 'Priorità',
....
e nella view ho
<div class="view">
....
<b><?php echo CHtml::encode($data->getAttributeLabel('priority_id')); ?>:</b>
<?php
echo '<span id="' .$data->priority->getCssClass() .'">';
echo CHtml::encode($data->priority->getText());
echo '</span>';
?>
però quello che ottengo a video è che la descrizione del campo priority viene troncata, mentre riappare se tolgo la a accentata.
Credo di avere settato come charset utf-8 un pò dappertutto, ma forse trascuro qualcosa.
Qualche idea?
Roberto
Confermo di avere il charset settato a UTF-8, almeno è quello che ottengo con
>>echo Yii::app()->charset;
UTF-8
>>
Ho risolto così
Model:
class Issue extends CActiveRecord
{
....
/**
* @return array customized attribute labels (name=>label)
*/
public function attributeLabels()
{
return array(
'id' => 'ID',
'name' => 'Nome',
'description' => 'Descrizione',
'project_id' => 'Progetto',
'type_id' => 'Tipo',
'status_id' => 'Status',
'priority_id' => CHtml::decode("Priorità"),
....
View:
<div class="view">
....
<b>
<?php
/* tolto il CHtml::encode */
echo $data->getAttributeLabel('priority_id');
?>:
</b>
<?php
echo '<span id="' .$data->priority->getCssClass() .'">';
echo CHtml::encode($data->priority->getText());
echo '</span>';
?>
ma se devo dire che mi piace…
Roberto
janka74
(Giancarloalbanese 74)
January 4, 2012, 2:43pm
4
Penso che il problema sia dovuto al fatto che fai l’encode di qualcosa che non ne ha bisogno, tant’è che hai risolto aggiungendo il decode in [size=“2”]attributeLabels[/size]
Quindi a logica presumo che anziché usare:
[color="#660066 "]CHtml[/color][color="#666600 "]::[/color][color="#000000 "]encode[/color]color="#666600" ;[/color]
tu debba usare un qualcosa del genere:
[color="#660066 "][size=“2”]CHtml[/size][/color][color="#666600 "][size=“2”]::scriviSenzaFare[/size][/color][size=“2”]Encode[/size][color="#666600 "]size=“2” ;[/size][/color]
ne approfitto per chiedere una delucidazione agli esperti.
Ma a cosa serve inserire nel modello gli attributeLabel ?
Non sarebbe più comodo, pratico e veloce inserire nella view direttamente le scritte?
In pratica sostituire direttamente:
[color="#660066 "]CHtml[/color][color="#666600 "]::[/color][color="#000000 "]encode[/color]color="#666600" ;[/color]
con il risultato:
[color=#008800]Priorità[/color]
Ma a cosa serve inserire nel modello gli attributeLabel ?
Non sarebbe più comodo, pratico e veloce inserire nella view direttamente le scritte?
E se cambi la label? Dopo devi andare a modificarla sia nel file _form, che nel gile _view o view, se il campo è una chiave esterna di un’altra tabella devi fare la stessa cosa in tutti gli altri _form e _view o view.
Se ci pensi la lable è una informazione legata al dato, dunque al model. La view serve solo per impaginare i dati. Non è dato sapere, alla view, cosa c’è dentro le variabili. Sa solo che ci sono dei div con dei css. O per lo meno dovrebbe.