我正在尝试为我们的Web应用程序实现up / downvote系统。目前,用户可以在我们的网站上“发布”一个问题。当用户访问我们网站的浏览部分时,会显示当前在网站上提出的所有问题的列表。
当用户点击up或downvote链接时,应该通过AJAX更新数据库(即我不想重定向用户,或者刷新页面)。
如何检索与每个up / downvote链接相关的问题,然后将该数据发送到控制器?
site/browse:
<?php
/*
* @var $model Question
*/
//loop through all the given questions
foreach($model as $q)
{
//add the upvote and downvote (text for now)
echo CHtml::ajaxLink('up', array('question/upvote'));
echo ("  - ");
echo CHtml::ajaxLink('down', array('question/downvote'));
echo '<br />';
echo CHtml::link($q['name'], array('question/browse/'.$q['_id']));
echo "<br />Description: " . $q["description"] . "<br />";
echo "Owner: " . $q["user_id"] . "<br />";
$timeStamp = new Timestamp($q['timestamp']);
echo $timeStamp->getDifferenceString() . "<br /><br />";
}
?>
question controller:
...
public function upvote()
{
//should retrieve question_id and then update database accordingly
//e.g. UPDATE Question SET value = value + 1 WHERE Question.id = id
}
...
答案 0 :(得分:1)
您可以在ajax请求的URL中传递获取upvote的问题的id,或者在ajax请求中传递POST数据。我建议通过jQuery AJAX调用使用POST数据,但是在这里我将展示如何使用你提供的代码来实现它。
<?php
/*
* @var $model Question
*/
//loop through all the given questions
foreach($model as $q)
{
//add the upvote and downvote (text for now)
echo CHtml::ajaxLink('up', array('question/upvote',array('id'=>$q['_id'])));
echo ("  - ");
echo CHtml::ajaxLink('down', array('question/downvote',array('id'=>$q['_id'])));
echo '<br />';
echo CHtml::link($q['name'], array('question/browse/'.$q['_id']));
echo "<br />Description: " . $q["description"] . "<br />";
echo "Owner: " . $q["user_id"] . "<br />";
$timeStamp = new Timestamp($q['timestamp']);
echo $timeStamp->getDifferenceString() . "<br /><br />";
}
?>
获得ID后,您可以在问题控制器中修改upvote()方法,如图所示。
问题控制员:
...
public function upvote($id)
{
//you have the question id, now you can update database accordingly
//e.g. UPDATE Question SET value = value + 1 WHERE Question.id = id
}
...
这将帮助您入门。你应该看一下使用jQuery来生成upvote / downvote请求并处理响应 - 我并不是指ajaxLink()方法自动生成的jQuery。您还可以查看使用路线处理upvote和downvote请求的网址看起来更好。