Обновление представления о droplist onchange и сохранении состояния

#javascript #ajax #yii #highcharts

#javascript #ajax #yii #высокие диаграммы

Вопрос:

У меня есть представление, содержащее некоторые пользовательские данные, a CListView с данными, извлеченными из базы данных, представляющими журнал запросов (IP, ключ, дата / время) и пользовательский виджет HighCharts, который рисует диаграмму на основе этих данных.

Данные CListView отображаются без группировки, то есть это представление 1: 1 того, что сохраняется в базе данных.

Виджет HighCharts должен отображать данные, группируя их по дням, месяцам или годам.

Я заметил, что CListView он способен повторно отображать всю страницу без ее перезагрузки, выполняя AJAX-запрос (который я не реализовал в своем контроллере).

Возможно ли создать единый dropDownList виджет, который будет запускать тот же AJAX-запрос и заставит действие моего контроллера учитывать выбранное значение?

Это действие моего контроллера:

 public function actionUser($id)
{
    $usuario = User::model()->with('Contract')->findByPk($id);

    $contract = new CArrayDataProvider($usuario->Contract, array(
            'keyField'=>'idkey'
    ));

    $usage = new CArrayDataProvider($user->Usage, array(
        'keyField'=>'idusage',
        'pagination'=>array(
            'pageSize'=>15
        )
    ));

    $this->render('user',array(
        'user'=>$user,
        'contract'=>$contract,
        'usage'=>$usage
    ));
}
  

И dropDownList виджет

 <?php echo CHtml::dropDownList('graph', 'gr', array(
    'd'=>'Daily',
    'm'=>'Monthly',
    'y'=>'Yearly'
)); ?>
  

Комментарии:

1. Используйте json (с помощью json_encode в php) для связи вашего скрипта с javascript ($.getJSON()).

Ответ №1:

Я бы рекомендовал отправить ajax-запрос вашему контроллеру, чтобы получить данные, а затем вернуть данные в формате json в представление. Затем повторно отобразите таблицу с новыми данными.