2015-10-28 4 views
0

Я уже некоторое время работал над проектом, используя CodeIgniter, и я несколько раз сражался с проблемой. Я показываю серию изображений из базы данных с циклом foreach на индексном представлении и каждому изображению, которое вам может нравиться или не нравится, и это прекрасно работает, проблема в том, что на странице отображается только количество понравившихся изображений для одного изображения. Поэтому я решил, что решение будет заключаться в том, чтобы отправить данные в общедоступный метод index() на моем контроллере, а затем сделать запрос в модели и вернуть все в представление. Вы думаете, есть еще один способ снять это?Вернуть все изображения в цикле foreach с Codeigniter

Это мой Аякса запрос

jQuery(document).ready(function($) { 
    var id = $("*#id_image").val(); 
    $.ajax({ 
     url: 'index.php/inicio/display_votes_index', 
     type: "POST", 
     dataType: "JSON", 
     data: {id_image: id}, 
     success: function (response) { 
      $("#displayVote"+id).html(response.msg + " puntos"); 
      console.log(response); 
     }, 
     error: function (response) { 
      console.log(response); 
     } 
    }); 
}); 

Это мой вид

<aside class="container"> 
    <div class="row col-md-8"> 
     <?php 
     foreach ($images as $value) { 
      ?><h1 style="font-size:20px;"><a href="#"><?= $value->title; ?></a></h1><?php 
      ?><img src="<?= base_url(); ?>images/<?= $value->path; ?>" alt="<?= $value->title ?>" class="img-responsive" width="500"/> 
      <a href="#" style="color: #636363; margin-top:10px;display:block" id="displayVote<?= $value->id_image; ?>"></a><br/> 
      <button type="button" style="margin-right:5px;" class="btn btn-default btn-md" onclick="voteUp(<?= $value->id_image; ?>)"><i class="fa fa-arrow-up"></i></button> 
      <button type="button" style="margin-right:5px;" class="btn btn-default btn-md"><i class="fa fa-arrow-down"></i></button> 
      <button type="button" style="margin-right:5px;" class="btn btn-default btn-md"><span class="glyphicon glyphicon-comment"></span></button> 
      <input type="hidden" id="id_image" value="<?= $value->id_image; ?>"/> 
      <hr/> 
      <?php 
     } 
     ?> 
    </div> 
</aside> 

Это модель

public function get_all_votes($id_image) 
{ 
    $sql = "SELECT COUNT(vote) AS vote_up FROM likes WHERE id_image = ? AND id_status = 1"; 
    $query = $this->db->query($sql, $id_image); 
    $row = $query->row(); 
    return $row->vote_up; 
} 

И это контроллер ПОЛУЧАТЬ Данные,

public function display_votes_index() 
{ 
    $id_image = $this->input->post('id_image'); 
    $votes = $this->vote_model->get_all_votes($id_image); 
    if ($votes) { 
     echo json_encode(['success' => TRUE, 'msg' => $votes]); 
    } else { 
     echo json_encode(['success' => FALSE, 'msg' => 'Error']); 
    } 
} 

PD: если я использую eq() как это: var id = $("#id_image").eq(1).val(); страница показывает количество подобных второго изображения в цикле, и если я изменить номера дисплеев нравится другим изображениям. Есть ли способ выбрать все идентификаторы всех изображений? Я пробовал с eq(*), но это не сработало. Благодаря!!!

ответ

0

Изменить скрытое поле на HTML, как:

<input type="hidden" CLASS="id_image" id="id_image_<?= $value->id_image; ?>" value="<?= $value->id_image; ?>"/> 

И JS:

jQuery(document).ready(function($) { 
    $(".id_mage").each(function(i) { 
     var id = $(this).val(); 
     $.ajax({ 
      url: 'index.php/inicio/display_votes_index', 
      type: "POST", 
      dataType: "JSON", 
      data: {id_image: id}, 
      success: function (response) { 
       $("#displayVote"+id).html(response.msg + " puntos"); 
       console.log(response); 
      }, 
      error: function (response) { 
       console.log(response); 
      } 
     }); 
    }); 
}); 

Над раствором делает больше, чем вызов Ajax. Поэтому лучшим решением является использование одного вызова ajax, и модель вернет все голоса всех изображений. Тогда js поставит голосование на правильный образ.

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