quando si vuole aggiornare una porzione di pagina, ci viene necessariamente in aiuto ajax.
Io opterei per una funzione js che con json prende i dati che servono per ripristinare la porzione di pagina.
ci sono vari modi per realizzare una cosa del genere.
Ad esempio: renderPartial nella view, della porzione che vuoi aggiornare, e con gli strumenti che ti mette a disposizione yii restituire un renderPartial in json e sostituirla.
oppure json solo del dato e sostituzione a mano del dato stesso. Dipende da cosa vuoi fare.
Per la temporizzazione che dicevi, in questo modo, puoi richiamare ogni tot questa funzione e in più mettere un bottone che richiama la funzione per fare il sync manualmente.
setTimeout('check_dato()',5000);
function check_dato()
{
<?php echo CHtml::ajax(array(
'url'=>array('controller/action_json/'.$model->id.''),
'data'=> "js:$(this).serialize()",
'type'=>'post',
'dataType'=>'json',
'success'=>"function(data)
{
$('#div').html(data.div);
} ",
))?>
return false;
}
if (Yii::app()->request->isAjaxRequest)
{
echo CJSON::encode(array(
'div'=>$this->renderPartial('controller/_div', array('model'=>$model),true,true)));
exit;
}
ovviamente non è codice testato quindi prendilo con le pinze.
altra cosa che ti risolverebbe un pò di grane è, se i dati che vuoi refreshare siano in una gridview.
a quel punto risolvi agile con una cosa di questo tipo:
setTimeout("$.fn.yiiGridView.update('tua-grid', { data: $(this).serialize() })",5000);