1

我在 Yii 框架中构建了一个通知小部件,它被调用每个页面并给用户通知。现在我想使用 Ajax 每 10 秒自动更新一次这些通知。结构如下:

<?php

class NotificationsWidget extends CWidget {

public function init(){

}
public function run() {

}

做这个的最好方式是什么?我到处搜索,但似乎找不到答案。也许我只是在寻找错误的关键字。如果有人有另一种(更好的)方法来做到这一点,拜托!唯一的限制是它必须加载到界面布局中并至少每 10 秒更新一次。

非常感谢:)

4

1 回答 1

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 在您的视图中放置您的小部件调用

<?php 
  $this->widget('path.to.my.widget',array(
     //widget parameters
   ));
于 2014-07-23T16:58:01.273 回答