我有这样的问题。我正在使用codeigniter创建一个网站。在其中,用户可以提出问题并“喜欢”它们。所有问题都应该在网站上按降序排列。如果第一个问题有20个喜欢而第二个问题有18个然后,一个人喜欢第二个问题,那么它有19个喜欢它应该保持在同一个地方如果它有21个喜欢它应该来到顶部。 我怎样才能做到这一点? 我搜索互联网这么多次,但我找不到合适的东西。
这是我的问题表。
答案 0 :(得分:1)
在你看来,你有类似的东西我想:
<input type="button" class="likeAction" data-questid="<?=$question->id?>" value="Like">
在jquery中,当一个like按钮被cliked时,读取数据的值(questid),你应该对likeQuestion方法启动ajax查询。
我不知道你的代码所以我只是像我一样写...
在您的控制器中:
public function likeQuestion($quest_id){
$json = (object) []; //init an object, easier to use with json
$json->result = "error";
$res = $this->question_model->like($quest_id);
if($res){
$json->result = "success";
//read the number of like of the question
$json->num_like = $this->question_model->countLikeNumber($quest_id);
}
header("Content-type:application/json");
echo json_encode($json);
}
在你的模特中:
public function like($quest_id){
$this->db->set('likes', 'likes+1', FALSE); //the false is important here
$this->db->where('id', $quest_id);
$this->db->update('question');
}
public function countLikeNumber($quest_id){
$this->db->select('*');
$this->db->from('question');
$this->db->where("id", $quest_id);
$query = $this->db->get();
return $query->num_rows();
}
答案 1 :(得分:0)
我假设你想通过ajax发送你的[添加类似]请求,然后根据每个问题的喜欢次数排序你的列表,我将基本上涵盖阅读评论的前端代码,这样:
您的观点应该是这样的:
<ul class="questions">
<li id="question_item_<?= $id ?>">
...
<span id="likes_<?= $id ?>"><?= $likesNum ?></span>
<button class="likeBtn" data-id="<?= $id ?>" >Like</button>
</li>
<li id="question_item_<?= $id ?>">
...
<span id="likes_<?= $id ?>"><?= $likesNum ?></span>
<button class="likeBtn" data-id="<?= $id ?>" >Like</button>
</li>
...
</ul>
你的Ajax电话:
$('.likeBtn').click(function(){
var $clicked = $(this),
questionID = $clicked.data('id'),
likesNum = $('li#question_item_' + questionID).find('span').text;
$.ajax({
url: 'PATH_TO_YOUR_CONTROLLER_METHOD_addingLike',
data: {'question_id': questionID},
dataType: 'json',
success: function(returnedData){
if(returnedData.status === 'success'){
$('li#question_item_' + questionID).find('span').text(parseInt(likesNum ) + 1);
reorderQuestions(returnedData.ids);
}
},
error: function(error){
console.log(error.resposeText);
}
});
});
/* Reordering your list at the front-end base,
* preventing server resources highly consumptions
*/
function reorderQuestions(ids){
var newUL = $('<ul class="questions">');
$each(ids, function(index, id){
newUL.append($('li#question_item_' + id));
});
$('ul.questions')replaceWith(newUL);
}
你的控制器应该是这样的:
public function addingLike($question_id){
# Increasing the number of like for question holding the specific id,
# Fetching all your questions ids ordered by the number of its likes
# Return a json object ['status': success, 'ids': [array_of_ids_ordered_by_likes]]
}