Автозагрузка в посте - PullRequest
       1

Автозагрузка в посте

1 голос
/ 24 июня 2019

Я хочу, чтобы автозагрузка была такой: https://www.thejakartapost.com/news/2019/04/09/woman-decapitated-in-traffic-accident-in-depok.html

Но после того, как я реализовал это, результаты зациклили те же самые данные как это: https://staging.casaindonesia.com/article/read/12/2016/79/Lantai-Motif-Kayu-dengan-Low-Maintance

Что-то не так с моей программой? (Извините, мой английский недостаточно хорош)

Controller.php

public function more(){
    $data['asset'] = $this->asset;
    $data['gallery'] = $this->gallery;

    $page_number = $this->input->post('page');
    $this->martikel->idartikel = $this->input->post('idartikel');
    $this->martikel->idkanal = $this->input->post('idkanal');
    if(!is_numeric($page_number)){
        header('HTTP/1.1 500 Invalid page number!');
        exit();
    }

    $data['content'] = $this->martikel->getMore(1,0);
    $data['count_item'] = count($data['content']);
    $data['page'] = $page_number;

    $this->load->view('morearticle',$data);
}

Model.php

    public function getMore($per_page,$row, $justOnce = TRUE) {
    $this->db->select($this->queryArtikel);
    $this->db->from('artikel_content');
    $this->db->join('artikel_kategori','artikel_kategori.id = artikel_content.idkategori');
    $this->db->join('artikel_kanal', 'artikel_kanal.id = artikel_kategori.idkanal');
    $this->db->join('sys_user', 'artikel_content.uid = sys_user.id');
    $this->db->join('contributor', 'artikel_content.idcontributor = contributor.id');
    $where = array(
        'artikel_content.isdel' => 0,
        'artikel_content.ispub' => 1,
        'artikel_content.idkanal' => $this->idkanal
    );
    $this->db->where($where);
    $this->db->where_not_in('artikel_content.id',$this->idartikel);
    $this->db->order_by('artikel_content.cdate','desc');
    $this->db->limit($per_page,$row);
    $query = $this->db->get();
    if($query->num_rows() > 0) {
        if ($justOnce == TRUE) {
            return $query->row_array();
        }
        else {
            return $query->result_array();
        }
    }
    else {
        return FALSE;
    }
}

Javascript в View.php

<script type="text/javascript">
var track_page = 1; 
var loading  = false;
var idarticle = <?php echo $content['idartikel']?>;
var idkanal = <?php echo $content['idkanal']?>; 

$(window).scroll(function() {
    if($(window).scrollTop() == $(document).height() - $(window).height()) {
        track_page++;
        load_contents(track_page,idarticle,idkanal);
    }
});

function load_contents(track_page,idarticle,idkanal){
  if(loading == false){
    loading = true;  
    $('.loading-info').show();  
    $.post( "http://localhost/staging-casa/article/more/",
      {page:track_page,idkanal:idkanal,idartikel:idarticle},
      function(data){
        loading = false;
        if(data.trim().length == 0 || track_page >= 10){
          $('.loading-info').html("");
          return;
      }
      $('.loading-info').hide(); 
      $("#more_article").append(data);
      //var url = 'https://' + window.location.hostname + ;
      //window.history.pushState("object or string", "Title", url); 

    }).fail(function(xhr, ajaxOptions, thrownError) { 
      alert(thrownError); 
    })
  }
}
</script>

1 Ответ

0 голосов
/ 24 июня 2019

Вы используете начальное значение idkanal и idartikel снова и снова, поскольку оно не получает обновленное значение из запроса ajax.
Одним из решений является изменение ответа от контроллера для включения обновленного значения idkanal и idartikel в качестве параметров и включение его в следующие последующие запросы.

Шаги, которые я делаю:

  1. Создание элементов, содержащих idkanal и idartikel начальное значение
  2. Сделайте начальный вызов ajax
  3. Вернуть данные и обновить значение элемента idkanal и idartikel
  4. Выполните вызов ajax с обновленными значениями idkanal и idartikel

Controller.php

public function more(){
    $data['asset'] = $this->asset;
    $data['gallery'] = $this->gallery;

    $page_number = $this->input->post('page');
    $this->martikel->idartikel = $this->input->post('idartikel');
    $this->martikel->idkanal = $this->input->post('idkanal');
    if(!is_numeric($page_number)){
        header('HTTP/1.1 500 Invalid page number!');
        exit();
    }

    $data['content'] = $this->martikel->getMore(1,0);
    $data['count_item'] = count($data['content']);
    $data['page'] = $page_number;

    // instead of directly showing the view, separate article view with the newly retrieved article ids data with json_encode
    echo json_encode( array(
        'article_view' => $this->load->view('morearticle',$data,true),
        'article_data'      =>  array(
            'idartikel' => $data['content']['idartikel'],
            'idkanal' => $data['content']['idkanal']
        )
    ));
}

Javascript в View.php

<script type="text/javascript">
var track_page = 1; 
var loading  = false;
var idarticle = <?php echo $content['idartikel']?>;
var idkanal = <?php echo $content['idkanal']?>; 

// create html element to hold the idarticle and idkanal values
$('#more_article').append('<input type="hidden" id="idarticle" value="'+idarticle+'" /><input type="hidden" id="idkanal" value="'+idkanal+'" />');    

$(window).scroll(function() {
    if($(window).scrollTop() == $(document).height() - $(window).height()) {
        track_page++;
        idarticle = $('#idarticle').val();
        idkanal = $('#idkanal').val();
        load_contents(track_page,idarticle,idkanal);
    }
});

function load_contents(track_page,idarticle,idkanal){
if(loading == false){
    loading = true;  
    $('.loading-info').show();  
    $.post( "http://localhost/staging-casa/article/more/",
    {page:track_page,idkanal:idkanal,idartikel:idarticle},
    function(data){
        loading = false;
        if(data.article_view.trim().length == 0 || track_page >= 10){
        $('.loading-info').html("");
        return;
    }
    $('.loading-info').hide(); 
    $("#more_article").append(data.article_view);
    $('#idarticle').val(data.article_data.idartikel);
    $('#idkanal').val(data.article_data.idkanal);
    //var url = 'https://' + window.location.hostname + ;
    //window.history.pushState("object or string", "Title", url); 

    }).fail(function(xhr, ajaxOptions, thrownError) { 
    alert(thrownError); 
    })
}
}
</script>

Я добавил несколько комментариев в коды, чтобы показать вам информацию о каждом соответствующем изменении кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...