他在那里!
我有计算百分比的功能,这些百分比是基于时间的。有一个开始时间(例如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;
}
我使用bootstrap progressbar小部件显示此百分比,如下所示:
<?php
$this->widget(
'bootstrap.widgets.TbProgress',
array(
'type' => 'success',
'percent' => $item->getBuildPercentage(),
'htmlOptions' => array(
'data-toggle' => 'tooltip',
'title' => 'Approximately ...to go.'
)
)
)
?>
目前,用户必须刷新页面才能看到百分比的准确值和正确的进度条。
如果进度条会动态更新(因此无需刷新),这将非常酷。
最好的方法是什么?阿贾克斯? (我对此没有任何经验,所以如果你也可以举一个例子,那真的很棒!)
非常感谢您的时间和精力。
答案 0 :(得分: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);
');
如果您对Bootstrap小部件有任何问题,我还建议您使用JQuery UI Progressbar。