创建jquery分页
create jquery pagination?
我需要在CodeIgniter中实现jQuery分页。
我在CodeIgniter论坛和CodeIgniter AJAX分页示例/指南上读过一些帖子。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论坛中看到的代码正在使用渐进式增强。这意味着代码在没有javascript的情况下工作得一样好(尽管有页面刷新)。
所以,你的第一步是让你的分页工作与javascript关闭,然后你将能够添加AJAX功能。
现在,分页的工作方式是在查询中使用SQL的LIMIT
来限制每个查询的结果。LIMIT
接受2个值,偏移量和量,如下所示:如果您希望每页显示2行,您将使用LIMIT 0, 2
查询数据库。这意味着"从第一行开始,总共给我2行"。然后,对于下一页,您使用LIMIT 2, 2
进行查询,这意味着"从第三行开始(2是第三行-这是一个基于零的索引),总共给我2行"。
您将对每个查询执行此操作,以便下一个查询将具有LIMIT 4, 2
,等等。正如您所看到的,从一个查询到下一个查询的唯一变化是偏移量(从哪一行开始查询)。
现在,Codeigniter分页类的工作方式是,它将偏移量放在它使用$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,而不是更多。
如果你需要帮助,告诉我。
- 使用ajax的服务器端分页&jQuery
- 不带jquery的全屏分页
- jQuery简单分页
- 使用jQuery在表中分页
- jQuery分页下一页和上一页按钮在点击零或超过最后一页后失败
- jQuery:根据select选项中的每页项目进行分页
- 用键盘分页jQuery下一个和上一个控件.触发器('点击')不'不起作用
- 检测活动<李>用于jQuery转盘(分页)
- 如何自定义分页 jQuery
- jQuery 数据表 在页面上导航时,在分页表上重置行的数据
- jQuery分页刷新:分页不记得以前页面中更改的样式
- 如何在分页期间链接回特定的jquery ui选项卡
- 如何在jquery中进行分页
- JQuery在ace:dataTable分页器上为锚点类单击监听器
- jQuery不会拾取嵌套了标记值的分页
- 没有jQuery的HTML文档分页
- 自定义JQUERY未在分页页面上加载(第一页除外)
- jQuery Datatables分页设置
- DataTable没有显示分页按钮和记录信息-JQuery
- Datatable上的多个分页-Jquery插件