喜欢使用codeigniter的网站选项

时间:2018-01-25 02:10:34

标签: codeigniter

我有这样的问题。我正在使用codeigniter创建一个网站。在其中,用户可以提出问题并“喜欢”它们。所有问题都应该在网站上按降序排列。如果第一个问题有20个喜欢而第二个问题有18个然后,一个人喜欢第二个问题,那么它有19个喜欢它应该保持在同一个地方如果它有21个喜欢它应该来到顶部。 我怎样才能做到这一点? 我搜索互联网这么多次,但我找不到合适的东西。

这是我的问题表。

This is my question table

2 个答案:

答案 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]]
}