【问题标题】:create jquery pagination?创建jquery分页?
【发布时间】:2011-08-14 10:15:55
【问题描述】:

我需要在CodeIgniter中实现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:=@rownum+1 rownum, t.* FROM (SELECT @rownum:=0) r, hotel_submits t order by id desc');

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

尊重

【问题讨论】:

    标签: javascript jquery codeigniter pagination


    【解决方案1】:

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

    所以,第一步是让你的分页在关闭 javascript 的情况下工作,然后你就可以添加 AJAX 功能了。

    现在,分页的工作方式是您在查询中使用 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,仅此而已。

    如果您需要这方面的帮助,请告诉我。

    【讨论】:

    • 为什么not change pagination after click (分页页面改变但没有)?我的意思是在我的示例中(单击后不会更改):here-pagination示例: My code
    • 你的分页 PHP 搞砸了!!如果你不听我的话,那你为什么还要来这里?就像我在回答中所说的那样:“你的第一步是让你的分页在关闭 javascript 的情况下工作”。现在,您的分页链接指向:binboy.gigfa.com/admin/hotel/hotels/show/2,这是一个不存在的页面。检查您的$config['base_url']。这有点问题。
    • thanks, it worked. 这是怎么回事,对于分页中的行:(这是一个示例)显示 1 到 3 个,共 8 个
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    • 2015-07-27
    • 1970-01-01
    • 2016-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多