2013-11-02 90 views
0

他在那裏!動態更新進度條yiiframework

我有計算百分比的函數,這些百分比是基於時間的。有一個開始時間(例如15:00)和一個結束時間(例如15:05)。如果我在15:02調用這個函數,結果將會是40%。

public function getBuildPercentage() { 
    $currentTime = strtotime(date('Y-m-d H:i:s')); //50 
    $boughtTime = strtotime($this->boughtTime); 
    $finishTime = strtotime($this->finishTime); //100 

    $first = $currentTime - $boughtTime; 
    $second = $finishTime - $boughtTime; 

    $percentage = round(($first/$second) * 100);  

    // if the percentage is higher than 100 -> item is finished 
    if($percentage >= 100) 
     $this->setToFinished($this->id); 

    return $percentage; 
} 

我使用引導進度條控件如下顯示這個百分比:

<?php 
    $this->widget(
     'bootstrap.widgets.TbProgress', 
     array(
      'type' => 'success', 
      'percent' => $item->getBuildPercentage(), 
      'htmlOptions' => array(
       'data-toggle' => 'tooltip', 
       'title' => 'Approximately ...to go.' 
       )         
      ) 
     ) 
?> 

目前,用戶必須刷新頁面看到的百分比和正確的進度條的準確值。

如果進度條動態更新(因此不刷新),這將非常酷。

什麼是最好的辦法呢?阿賈克斯? (我沒有任何經驗,所以如果你還可以舉一個例子,那真是太棒了!)

非常感謝你的時間和精力。

回答

2

首先,AJAX你應該有機會通過要求你的函數,所以把這個代碼在你的控制器:

public function actionPercentage($id) { 
if (Yii::app()->request->isAjaxRequest) { 
    $item = YourModelName::model()->findByPk($id); //obtain instance of object containing your function 
    echo $item->getBuildPercentage(); //to return value in ajax, simply echo it 
} 
} 

然後,在你看來,你可以註冊腳本,每一秒將請求發送到服務器獲得當前百分比:

Yii::app()->clientScript->registerCoreScript('jquery'); 
Yii::app()->clientScript->registerScript('ajax-percentage',' 
    var interval = 1000; 
    setInterval(function() { $.ajax(
     type: "GET", 
     url: '.Yii::app()->createUrl('yourController/percentage', array('id'=>$item->id)).', 
     success: function (percents) { 
      // you have got your percents, so you can now assign it to progressbar value here 
     } 
)}, interval); 
'); 

我也建議你使用JQuery UI Progressbar如果您有引導部件的任何問題。

+0

謝謝你!這是我正在尋找的。 – Shark