我在Yii框架中构建了一个通知小部件,每个页面都会调用它,并为用户提供通知。现在我想用Ajax每10秒自动更新一次这些通知。结构如下:
<?php
class NotificationsWidget extends CWidget {
public function init(){
}
public function run() {
}
最好的方法是什么?我到处搜索,但我似乎无法找到答案。也许我只是看错了关键字..如果有人有另一种(更好)的方式来做这件事,请!唯一的限制是必须将其加载到界面布局中并至少每10秒更新一次。
非常感谢:)
答案 0 :(得分:2)
你在你的控制器中设置了一个动作并且每10秒轮询一次,如果有更新,它将从部分视图返回通知,如果没有更新则不返回任何内容,这是一个骨架实现,可以给你一个想法,请注意它不会按原样运行。
在您的布局文件中
...
// Your normal layout content
<?php Yii::app()->clientScript->registerScript("poll_ajax_notifications",
'function getNotification(){'.
CHtml::ajax(array(
'url'=>array("//notifications/update"),
'dataType'=>'html',
'type'=>'GET',
'update'=>'#divcontainingNotificationWidget',
)
) . '. }
timer = setTimeout("getNotification()", 10000);
', CClientScript::POS_END);
在通知控制器中
class NotificationsController extends CController {
....
public function actionUpdate(){
$user = Yii::app()->user->id;
// Your logic logic for finding notifications
if($notificationPresent){ // or any validation to check whether to push data or not
$this->renderPartial('_notificationWidget',array('widgetData'=>$widgetData)); // pass data required by widget here
}
Yii::app()->end();
}
...
}
最后在名为_notificationsWidget.php
的views / notifications文件夹中创建局部视图
在您的视图中放置小部件调用
<?php
$this->widget('path.to.my.widget',array(
//widget parameters
));