2014-07-22 21 views
1

我在Yii框架中构建了一个通知小部件,该小部件被称为每页,并提供用户通知。现在我想用Ajax每10秒自动更新一次这些通知。结构如下:Yii:使用ajax更新内容小部件

<?php 

class NotificationsWidget extends CWidget { 

public function init(){ 

} 
public function run() { 

} 

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

感谢很多:)

回答

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 
    )); 
+1

谢谢Manquer。我绝对可以用这个。 – Shark