Php Yii的消息系统实现

Php Yii的消息系统实现,php,module,yii,message,Php,Module,Yii,Message,这已经在很多网站上实现了,比如说odesk,我想的是实现一个消息发送方案,通知用户他们已经收到消息 比如说 你给我发消息,我会从绿色显示消息红色图标。显然,我们需要一个数据库表来存储发送者id、接收者id等等,但我们如何实现它,使用户不需要点击刷新按钮 我是从c#出身的新手,所以不知道很多方法 我正在用Yii开发它。没有什么好建议您可以通过使用简单的javascript方法来实现这一点 在具有消息指示器的视图中类似这样的内容: <?php Yii::app()->clientScri

这已经在很多网站上实现了,比如说odesk,我想的是实现一个消息发送方案,通知用户他们已经收到消息

比如说

你给我发消息,我会从绿色显示消息红色图标。显然,我们需要一个数据库表来存储发送者id、接收者id等等,但我们如何实现它,使用户不需要点击刷新按钮

我是从c#出身的新手,所以不知道很多方法


我正在用Yii开发它。没有什么好建议

您可以通过使用简单的javascript方法来实现这一点

在具有消息指示器的视图中类似这样的内容:

<?php Yii::app()->clientScript->registerScript('autoupdate-div-inbox-update',
            "setInterval(function(){
                // do an ajax call to server to check for new messages
                // using jquery's ajax method
                $.ajax({
                    url: 'http://example.com/index.php?r=controller/action',// this is the url that will check for new messages for the current user
                    success: function(data) {// data is the data returned from the server
                        if(data){
                            // update your new message div
                            // you can show your red icon here
                        }
                    }
                });
                return false;
             },1000);"
      );
?>
请阅读更多有关该网站的信息

这种模式也称为轮询,还有其他流行的方法,如长轮询服务器推送,我不太熟悉,但在决定模式之前,您也应该检查它们


希望这能有所帮助,如果有,请询问澄清。

谢谢。url可以是:url:“控制器/操作”。因为我使用apache的端口82,所以手动修改它以适应新的服务器配置可能会让人不舒服。哦,我忘了。“控制器/操作”仅适用于我们希望在视图中实现这一点的情况。我们应该将字符串凹形,如url:\“”。CController::createUrl('controller/action')。“\”,当然是的,但我会稍微改一句::“controller/action”只在php解析值时才起作用,在我的回答中,整个javascript脚本只是php的一个字符串。我不想通过连接使答案复杂化,假设询问者知道这一点。但感谢您的帮助,连接肯定会更好。
public function actionMessages(){
    // check for new messages in the db
    $xyz = checkMessage();
    // assuming checkMessage returns the number of new messages if any or false if none
    // whatever we echo will be available to the javascript we wrote in the data variable
    echo $xyz;
}