我目前正在yii框架中创建一个应用程序。该应用程序的目的之一是能够对不同预定义类别和平台的游戏进行评级。游戏可以属于多个平台。
这是一个怎样的例子:我选择评价一个名为“x”的游戏。我可以看到游戏是在4个不同的平台上发布的,所以当我评价游戏时,我会选择我玩的平台。之后我对5种不同类别的游戏进行评级。如果我稍后返回此游戏,我应该能够更新该评级,但我也应该能够为不同的平台创建新的评级。
这是我不确定的最后一部分。我对如何做到这一点的猜测是创建一个包含游戏所属平台的下拉列表,并且有一些AJAX函数决定它应该创建新的评级还是更新现有的评级。但是,我不清楚如何做到这一点,因为我很少用AJAX做过什么。
您能否告诉我一些如何实现这一目标的提示?
编辑: 它可能看起来像我没有尝试过,所以我将发布一些我迄今为止创建的代码(出于某种原因,我将其命名为排名而不是评级......)。正如你所看到的,它没有任何AJAX,也没有考虑平台:
protected function createRanking($model)
{
$user_id=Yii::app()->user->getId();
$game_id=$model->id;
$rank=ranking::model()->find("create_user_id=$user_id and game_id=$game_id");
if($rank===null){
$ranking=new Ranking;
}
else{
$ranking=$rank;
}
if(isset($_POST['Ranking']))
{
$ranking->game_id=$model->id;
$ranking->attributes=$_POST['Ranking'];
$valid = $ranking->validate();
if ($valid)
{
$ranking->save(false);
$this->redirect(array('index'));
}
}
return $ranking;
}
答案 0 :(得分:1)
http://www.yiiframework.com/wiki/394/javascript-and-ajax-with-yii/ http://api.jquery.com/jQuery.ajax/
我认为你应该首先阅读(并且有一些PHP和javascript知识)。
如果你想使用DropDowns,你应该看看EventHandlers(jQuery可以帮助你)。通过下拉列表的选择器,您可以附加这样的处理程序。我不会再添加这个了,我给你的关键词,你应该找到关于这个主题的优秀文档。
在Yii的一侧,你处理AjaxRequest就像处理一个normale HTTP-Request一样。所以你会有一个动作,你有一个控制流来检查记录的存在(findByPk将是一个选项)。
在我看来,你有非常基本的问题并且给你代码只会让你在短期内变得容易。我真的建议你在yii-framework上学习这些教程: http://www.yiiframework.com/doc/guide/ http://www.yiiframework.com/doc/blog/
编辑: 你的问题仍然不是很清楚imo(哪种暗示缺乏对该主题的阅读)。正如您已经想到的那样,“isNewRecord”是一种方法,用于检查它是更新还是创建。如果存在与之相关的问题,您应该考虑发布包含它的代码并重新处理问题。
无论如何,这里有一些与您的代码相关的小问题:
$ranking = ranking::model()->findByAttributes(array(
"create_user_id" => $user_id,
"game_id" => $game_id
));
if($ranking===null) {
$ranking=new Ranking;
}
排名/排名变量声明不清楚,因为您对同一件事使用不同的名称。同样如上面的代码所示,它不是必需的。 你也基本上在你的find方法中使用了SQL,这被认为是一种不好的做法,因为Yii的整个想法只是用DB语言来说,当它完全无法解决时。与阵列的param绑定方式也更安全(在这种情况下,我认为这不是一个问题)。