2012-07-05 3 views
0

У меня проблема, что я действительно не могу решить.Codeigniter добавить в избранное ajax logic advice

Я делаю ajax insiter для сохранения функции фаворитов, она отлично работает.

Но так как его отсутствие не имеет формы, которая немного теряется в логике.

Что мне хотелось бы сделать, когда пользователь нажмет на кнопку, он изменит желтый цвет и останется желтым, если пользователь снова щелкнет, он удалит из избранного и снова изменится на синий.

Я не хочу, чтобы кто-нибудь написал это для меня, мне просто нужен какой-то намек или совет для логики.

Вот мой код

JQuery

//save to favorites 
$('.favorite').on('click', function(e){ 
    e.preventDefault(); 
    var data = [], 
    newclass = 'btn-warning', 
    oldcalss = 'btn-primary', 
    fav = $(this); 
    favId = fav.attr('id'), 

    $.ajax({ 
     type: "POST", 
     url: base_url + 'ajax/add_favorite/' + favId, 
     success: function(result) 
     { 
      fav.removeClass(oldcalss) 
      .addClass(newclass);  
     } 
    }); 

}); 

модель

function insert_favorite($id) 
{ 
    $favData = array(
     'job_id' => $id, 
     'uid' => $this->session->userdata('user_id') 
    ); 

    $this->db->insert('job_favorites', $favData); 
} 

HTML

<?php if($this->ion_auth->logged_in()): ?> 
<a href="#" id="<?php echo $res->info_id; ?>" class="favorite btn btn-primary btn-mini" title="Add to favorite"><i class="icon-star icon-white"></i></a> 
<?php endif; ?> 

ответ

1

Вы должны проверить, является ли идентификатор задания в базе данных и возврата ценность для удовольствия AJAX cct:

function insert_favorite($id) 
{ 

    if (!is_numeric($id)) { 
     exit; 
    } 

    $this->db->where('job_id', $id); 
    $this->db->where('uid', $this->session->userdata('user_id')); 
    $row = $this->db->get('job_favorites')->row(); 

    //There is a previous value 
    if ($row) { 
     $this->db->where('job_id', $row->id); 
     $this->db->where('uid', $this->session->userdata('user_id'));   
     $this->db->delete('job_favorites'); 
     echo json_encode(array('result' => 'exists')); 
    } 
    else { 
     $favData = array(
      'job_id' => $id, 
      'uid' => $this->session->userdata('user_id') 
     ); 

     $this->db->insert('job_favorites', $favData); 
     echo json_encode(array('result' => 'new')); 
    } 
} 

В функции обратного вызова изменить цвет кнопки в соответствии с переменной результата.

Я рекомендую перемещать вызовы и логику db на модель и оставлять как можно меньше логики в контроллере.

+0

Благодарю вас за помощь и за то, – Side

Смежные вопросы