2012-11-17 12 views
1

我在我的Yii應用程序中使用融合圖表擴展。我正在使用ajax提交來創建各種圖形。它呈現,但是當我嘗試用ajax過濾它時,我得到相同的輸出。在YII中使用ajax的融合圖表

這是我在視圖中的代碼:

<?php 
$this->renderPartial('_search'); ?> 
<p id="ChartArea" style="text-align:center;"> 
<?php 
$this->renderPartial('_chart',array('cchart'=>'mychart', 
'chartType'=>'Line','chartName'=>'callTrend','data'=>array('')));?> 

在_search.php:

$form=$this->beginWidget('CActiveForm', array(
     'id'=>'calltrend-form', 
     'enableAjaxValidation'=>false, 
     'htmlOptions'=>array('onsubmit'=>"return false;"), 
    )); 
echo CHtml::hiddenField('chartType','Line'); 
echo CHtml::hiddenField('chartName','callTrend'); 
echo "&nbsp;&nbsp;&nbsp;".CHtml::Label('From:','from_date', 
    array('style'=>'display:inline;clear:both;'))."&nbsp;&nbsp;&nbsp;"; 
$this->widget('zii.widgets.jui.CJuiDatePicker', array(
     'attribute'=>'from_date', 
     'name'=>'from_date', 
     'htmlOptions'=>array('class'=>'input-small','style'=>'margin-top:9px;'), 
     'options'=>array(
      'dateFormat' => 'yy-mm-dd', 
      'altField' => '#self_pointing_id', 
      'altFormat' => 'yy-mm-dd', 
      'changeYear'=>'true', 
      'changeMonth'=>'true', 
     ), 
    )); 
echo "&nbsp;&nbsp;&nbsp;".CHtml::Label('To:','to_date',array('style'=>'display: 
inline;clear:both;'))."&nbsp;&nbsp;&nbsp;"; 
$this->widget('zii.widgets.jui.CJuiDatePicker', array(
     'attribute'=>'to_date', 
     'name'=>'to_date', 
     'htmlOptions'=>array('class'=>'input-small','style'=>'margin-top:9px;'), 
     'options'=>array(
      'dateFormat' => 'yy-mm-dd', 
      'altField' => '#self_pointing_id', 
      'altFormat' => 'yy-mm-dd', 
      'changeYear'=>'true', 
      'changeMonth'=>'true',), 
    )); 
echo "&nbsp;&nbsp;&nbsp;".CHtml::Label('Project:','project',array('style'=>' 
display:inline;clear:both;'))."&nbsp;&nbsp;&nbsp;"; 
echo CHtml::dropDownList('project','',CHtml::listData(Project::model()->findAll() 
     ,'id','name'),array('empty' => '--- Choose---','class'=>'inputmedium','style'=>' 
clear:both;margin-top:9px;')); 
echo "&nbsp;&nbsp;&nbsp;".CHtml::submitButton(Yii::t('app', 
     'Generate'),array('class'=>'btn btn-primary','style'=>'clear:both;')); 
echo "&nbsp;&nbsp;&nbsp;".CHtml::ajaxSubmitButton('Generate', 
    CHtml::normalizeUrl(array('site/chart')), 
    array(
     'data'=>'js:jQuery(this).parents("form").serialize()+ "&request=added"', 
     'success'=>'function(data){ 
$("#ChartArea").html(data); 
}' 
    ), 
    array(
     'id'=>'ajaxSubmitBtn', 
     'name'=>'ajaxSubmitBtn', 
     'class'=>'btn btn-primary' 
    )); 
$this->endWidget(); 

在控制器:actionChart()方法:

public function actionChart() 
{ 
    if(Yii::app()->request->isAjaxRequest) 
    { 
     $chartName=$_POST["chartName"]; 
     if($chartName=="callTrend") 
     { 
      $data = array('from_date'=>$_POST["from_date"],'to_date' 
      =>$_POST["to_date"],'project_id'=>$_POST["project"]); 
      $cchart="mychart"; 
     } 
     elseif($chartName=="topProducts"){ 
      $data = array('from_date'=>$_POST["from_date1"],'to_date'=>$_POST["to_date1"]); 
      $cchart="mychart1"; 
     } 
     elseif($chartName=="topCallers"){ 
      $data = array('project_id'=>$_POST["project1"]); 
      $cchart="mychart2"; 
     } 
     $chartType=$_POST["chartType"]; 
    } 
    else 
    { 
     $data=array(); 
     $chartName="callTrend"; 
     $cchart="mychart"; 
     $chartType="Line"; 
    } 
    $this->renderPartial('_chart',array('cchart'=>$cchart,'chartName' =>$chartName, 
      'chartType'=>$chartType,'data'=>$data)); 
} 

以我控制器:actionCallTrend方法:

public function actionCallTrend($from_date=NULL,$to_date=NULL,$project_id=NULL) 
{ 
    echo Yii::trace(CVarDumper::dumpAsString($from_date),'vardump'); 
    echo Yii::trace(CVarDumper::dumpAsString($to_date),'vardump'); 
    Yii::app()->fusioncharts->setChartOptions(array('caption'=>'Last Week Call Trend', 
      'xAxisName'=>'Date', 'yAxisName'=>'Calls')); 
    $con=""; 
    if($from_date!=NULL && $to_date==NULL) 
    { 
     $con="DATE(answer_ts) >= '$from_date'"; // date is database date column field 
    }elseif($to_date!=NULL && $from_date==NULL) 
    { 
     $con="DATE(answer_ts) <= '$to_date'"; 
    }elseif($from_date!=NULL and $to_date!=NULL){ 
     $con="DATE(answer_ts) >= '$from_date' and DATE(answer_ts) <= '$to_date'"; 
    } 
    if(($from_date!=NULL or $to_date!=NULL) && $project_id!=NULL) 
    { 
     $con.=" and project_id = '$project_id'"; // date is database date column field 
    } 
    $stats=Creport::model()->findAll(array(
      'select'=>'COUNT(id) as data_count, DATE(answer_ts) as unique_date, answer_ts', 
      'condition'=>$con, 
      'group'=>'DATE(answer_ts)', 
      'order'=>'answer_ts desc', 
      'limit'=>10, 
     )); 
    $ddg=Yii::app()->dateFormatter; 
    foreach ($stats as $s){ 
     Yii::app()->fusioncharts->addSet(array('label'=>$ddg->format("dd",$s->answer_ts)."-" 
       .$ddg->format("MMM",$s->answer_ts), 'value'=>$s->data_count)); 
    } 
    Yii::app()->fusioncharts->useI18N = true; 
    Yii::app()->fusioncharts->addTrendLine(array('startValue'=>'700000', 
      'color'=>'009933', 'displayvalue'=>'Target')); 
    Yii::app()->fusioncharts->addDefinition(array('name'=>'CanvasAnim', 
      'type'=>'animation', 'param'=>'_xScale', 'start'=>'0', 'duration'=>'1')); 
    Yii::app()->fusioncharts->addApplication(array('toObject'=>'Canvas', 
      'styles'=>'CanvasAnim')); 
    Yii::app()->fusioncharts->getXMLData(); 
} 

這是我的代碼。它的工作原理沒有ajax,但是當我使用ajax過濾字段時,將顯示相同的輸出,它們將不會在actionCallTrend控制器中獲取from_date,to_date & project_id。

回答

0

以訪問變量:

public function actionCallTrend($from_date=NULL,$to_date=NULL,$project_id=NULL)

你需要有那些在您的網址經理映射,

,最好是寫:

public function actionCallTrend() { 
    $from_date = Yii::app()->request->getQuery('from_date ', null); 
    $to_date = Yii::app()->request->getQuery('to_date', null); 
    $project_id = Yii::app()->request->getQuery('project_id', null); 

你可以如果您不確定POST或GET,請使用Yii::app()->request->getParam()