2011-08-14 53 views
0

我需要在CodeIgniter中執行jQuery分頁創建jquery分頁?

我讀過一些文章CodeIgniter forumCodeIgniter AJAX Pagination Example/Guideline。 CI論壇上的人們建議使用TOHIN's blog的解決方案,但我無法理解它是如何完成的。有人可以給我一個例子

另外,有人可以解釋,什麼$this->load->model('model')意味着here

我的代碼:

function show() 
    { 
    $this->load->library('Jquery_pagination'); 

     $this->admin_model->header(); 

     $this->load->library('pagination'); 

     $config['base_url'] = 'show'; 
     $config['total_rows'] = '200'; 
     $config['per_page'] = '2'; 
     $this->pagination->initialize($config); 
     $data['pagination'] = $this->pagination->create_links(); 

     $data['query_select'] = $this->db->query('SELECT @rownum:[email protected]+1 rownum, t.* FROM (SELECT @rownum:=0) r, hotel_submits t order by id desc'); 

     $this->load->view('admin/accommodation_submit_show', $data); 
    } 

對於

回答

1

您正在尋找在笨論壇採用漸進增強的代碼。這意味着代碼在沒有javascript的情況下也能正常工作(儘管刷新了頁面)。

因此,您的第一步是使您的分頁工作與javascript關閉,然後您將能夠添加AJAX功能。

現在,分頁工作的方式是在查詢中使用SQL的LIMIT來限制每個查詢的結果。 LIMIT需要2個值(偏移量和金額),如下所示:如果要每頁顯示2行,您將使用LIMIT 0, 2查詢數據庫。這意味着「從第一行開始,共給我2行」。然後,對於下一頁,您使用LIMIT 2, 2進行查詢,這意味着「從第三行開始(2是第三行 - 這是一個基於零的索引)並給我總共2行」。

您將在每個查詢中執行此操作,以便下一個查詢將具有LIMIT 4, 2等等。正如你所看到的,從一個查詢到下一個查詢的唯一變化是偏移量(從哪個行開始查詢)。現在

,該笨分頁類的工作,方式是,它使得偏移的每一頁,它與$this->pagination->create_links()生成的鏈接中。偏移量在哪裏?這是由$config['uri_segment']確定的,但默認情況下它被設置爲3.由於您沒有提供完整的代碼,我不知道您的控制器被稱爲什麼。我們假設它叫做hotels。所以,你必須設置$config['base_url'] = 'hotels/show';。正如你所看到的,你的第一個URI段是hotels,第二個是show,第三個是分頁類爲你生成的偏移量。

你如何得到這個抵消?我很高興你問。通過簡單地讓show方法接受一個參數,Codeigniter會將它傳遞給第三個URI段。因此,我們得到如下:

function show($offset = 0) 
{ 
    $this->load->library('pagination'); 

    $config['base_url'] = 'hotels/show'; // Change this to your controller name 
    $config['total_rows'] = '200'; // In reality, this should be the actual number of rows in your table 
    $config['per_page'] = '2'; 

    $this->pagination->initialize($config); 
    $data['pagination'] = $this->pagination->create_links(); 

    $offset = (int) $offset; // just to make sure nothing funky gets in here 
    $data['query_select'] = $this->db->query("SELECT @rownum:[email protected]+1 rownum, t.* ". 
     "FROM (SELECT @rownum:=0) r, hotel_submits t ". 
     "ORDER BY id desc LIMIT $offset, 2"); 
    // I just split it into lines so that SO doesn't make you scroll too much :-) 

    $this->load->view('admin/accommodation_submit_show', $data); 
} 

現在分頁鏈接應該工作爲標榜,但他們會做一個完整的頁面刷新。爲了解決這個問題,請這樣做:

$(function() { 
    // Assuming your pagination links 
    // are in a div with ID of pagination, 
    // and that you want to paginate a table with ID of paginate 
    $('#pagination a').live('click', function() { 
     $.get($(this).attr('href'), function(html) { 

      $('table#paginate').replaceWith($(html).find('table#paginate')); 
      $('#pagination').replaceWith($(html).find('#pagination')); 
     }); 
     return false; 
    }); 
}); 

所有這些都應該起作用。但是,我們可以改進這一點。在代碼的當前狀態下,我們每次點擊都會獲得整個頁面的html,並且只是過濾掉我們想要的內容。雖然這有效,但不需要發送太多不需要的額外信息。

他們正在做的論壇,裏面有什麼,是創建專門爲這些Ajax請求量身定做的另一個控制器,這樣它會只會相關的表HTML,僅此而已。

如果您需要與幫助,讓我知道。

+0

爲什麼'點擊後不改變分頁'(分頁改變,但不是)? 我的意思是在我的例子中(點擊後不會改變):[here-pagination](http://i.stack.imgur.com/zM3Ej.gif)。 **例子:** [我的代碼](http://www.binboy.gigfa.com/admin/hotel/show) –

+0

我改變了,但沒有工作。看你:http://www.binboy.gigfa.com/admin/hotel/show和http://www.binboy.gigfa.com/files/js/admin.js –

+0

你的PHP分頁是搞砸了! !如果你不會聽我的話,那你爲什麼還要繼續來這裏?就像我在回答中所說的那樣:「您的第一步是使javascript的分頁工作關閉」。現在,您的分頁鏈接指向:http://www.binboy.gigfa.com/admin/hotel/hotels/show/2,這是一個不存在的頁面。檢查你的'$ config ['base_url']'。這有什麼問題。 –