创建jquery分页?

我需要在CodeIgniter中实现jQuery分页

我已经在CodeIgniter论坛和CodeIgniter AJAX分页示例/指南上阅读了一些post。 CI论坛上的人建议使用TOHIN博客的解决方案,但我无法理解如何做到这一点。 有人能举个例子吗?

另外,有人可以解释一下, $this->load->model('model') 在这里意味着什么。

我的代码:

 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:=@rownum+1 rownum, t.* FROM (SELECT @rownum:=0) r, hotel_submits t order by id desc'); $this->load->view('admin/accommodation_submit_show', $data); } 

尊重地

您在Codeigniter论坛中查看的代码正在使用渐进增强function。 这意味着代码在没有javascript的情况下也能正常工作(尽管页面刷新)。

因此,您的第一步是使您的分页工作与javascript关闭,然后您将能够添加AJAXfunction。

现在,分页的工作方式是在查询中使用SQL的LIMIT来限制每个查询的结果。 LIMIT取2个值,偏移量和金额,如下所示:如果要在每页显示2行,则将使用LIMIT 0, 2查询数据库。 这意味着“从第一行开始,总共给我2行”。 然后,对于下一页,您使用LIMIT 2, 2查询,这意味着“从第三行开始(2是第三行 – 它是基于零的索引)并且总共给我2行”。

您将对每个查询执行此操作,以便下一个查询将具有LIMIT 4, 2依此类推。 正如您所看到的,从一个查询到下一个查询的唯一变化是偏移量(从哪个行开始查询)。

现在,Codeigniter Pagination类的工作方式是,它将使用$this->pagination->create_links()生成的链接中的每个页面的偏移量。 偏移在哪里? 这是由$config['uri_segment'] ,但默认设置为3.由于你没有提供完整的代码,我不知道你的控制器是什么。 我们假设它叫做hotels 。 所以,你必须设置$config['base_url'] = 'hotels/show'; 。 如您所见,您的第一个URI段是hotels ,第二个是show ,第三个是Pagination类为您生成的偏移量。

你怎么得到那个偏移量? 你问我很高兴。 只需让你的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:=@rownum+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,仅此而已。

如果您需要帮助,请告诉我。