用户
 找回密码
 入住 CI 中国社区
搜索
查看: 8771|回复: 3
收起左侧

[AJAX] CI的ajax分页

[复制链接]
发表于 2013-8-26 22:35:27 | 显示全部楼层 |阅读模式
本帖最后由 khalilfiona 于 2013-8-26 22:35 编辑

在坛子里看到两篇帖子:一篇是CI的AJAX分页实现,还有一篇是CI扩展分页类,使其适用于ajax分页
第一篇没有扩展分页类,但是实际使用的时候发现不能解决cur_page的问题,也就是拦截了链接
之后,不能定位当前页。于是结合第二篇的扩展分页类实现方法如下:
扩展分页类:
将这段代码:
                       if ($CI->uri->segment($this->uri_segment) != $base_page)
                        {
                                $this->cur_page = $CI->uri->segment($this->uri_segment);

                                // Prep the current page - no funny business!
                                $this->cur_page = (int) $this->cur_page;
                        }

替换成下面的代码
                        if (!$cur_page)
                        {
                                $this->cur_page = $CI->uri->segment($this->uri_segment);
                                (其实我自己也不太明白这里什么意思,用ajax分页基本上也就不需要看url了吧,是参照写第二篇文章的                                     大神这样写的,而且下面那句也会覆盖$this->cur_page的值。。。,好了,不管了,先这么着吧):
                                // Prep the current page - no funny business!
                                $this->cur_page = (int) $this->cur_page;
                                (这个待会会说到,就是获取当前页码)
                        }

然后就可以在控制器中这么load进来:$this->load->library('MY_pagination');注意load进来后的对象名默认是这个类名
所有字母的小写哦!也就是my_pagination,千万别弄成MY_pagination,具体可以参照CI手册关于load类的描述。

我做了一个评论列表的ajax分页,其实主要是因为我想通过文章页面的刷新次数来统计文章的点阅量,那如果每翻页一次
评论页都刷新页面,统计出来的值就不对了,接下来还要做一个添加评论的ajax实现,嗯,先记在这里,下次再做。

视图里的js代码:
$('.ajax_fpage').live('click', function(eve){//注意这里的live!!!!!用法在jQuery手册里,我也说不清楚,还有个bind什么的
                eve.preventDefault();       //屏蔽当前a标签的默认动作:
                var str=window.location.href;       //获取当前url
                var arr=str.split('/');        //分割当前url,这里分割是从协议名称也就是http开始的,
                var article_id=arr[7];      //取第七个为article_id的值
                var href=$(this).attr("href");    //jquery获取标签的href属性值,千万别用$(this).href!无解!!
                var arr=href.split('/');  
                if(arr[8]==''){arr[8]=1;}     //不知道为什么第一页的页码可能为空,所以在这里处理一下
                var cur_page=arr[8];
                //var offset=$(this).text(); //获取页码上的数字,这样可能导致得到的页数有prev和next这类非数字,所以不用了
                var offset=arr[8];              //干脆都用a标签本身的href获取好了
                $.ajax({
                  url:"index.php/home/comment_page",
                  type:"post",
                  dataType:"text",
                  data: {
                          offsetffset,            //获取页码上的数字,这里的三个参数可以不需要左右值用一样的名称,下次改进
                          article_id:article_id, //文章的ID,作为获取评论列表的参数
                          cur_page:cur_page //当前第几页,用于生成分页
                  },
                   success: function(html) {
                            $('.comment').html(html);//把关于评论的内容都包在这个div里面了。带会控制器里的
                   }
                });        

控制器里是这么写的:
         function comment_page()
         {
                $this->load->model('Mhome');
                 $offset=$this->input->post('offset');//通过ajax获取当前第几页
                 $article_id=$this->input->post('article_id');//通过ajax获取文章的id
                 $cur_page=$this->input->post('cur_page');//通过ajax获取当前第几页
                 $config['base_url'] = base_url().'index.php/home/content/'.$article_id;
                 $config['total_rows'] = $this->Mhome->select_num_rows_article($article_id);
                 $config['per_page'] = 2;
                 $config['full_tag_open'] = '<p class=pagestyle>';//这里便于为页码加样式
                 $config['full_tag_close'] = '</p>';
                 $config['next_link'] = 'next';
                 $config['prev_link'] = 'prev';
                 $config['use_page_numbers']='true';//使用页码,而不是offset
                 $config['anchor_class']="class='ajax_fpage'";//借鉴第一篇文章的大神,这里为每个a标签加样式
                 $config['cur_page']=$cur_page;
                 $this->my_pagination->initialize($config);//默认的对象名是类名的小写
                 $links=$this->my_pagination->create_links($cur_page);
                 $comment_list = $this->Mhome->get_page_comment($article_id,$offset,$config['per_page']);
                 echo "<div class='comment'><p class='rightTxt2'>";
                 foreach ($comment_list as $row):
                         echo "<span>".$row->content."</span>";
                         echo "<b>".$row->author."</b> 于";
                         echo "<i> ".$row->last_date."</i> 评论<br />";
                         endforeach;
                         echo "</p>";
                 echo "<br class='spacer' />";
                 echo $links;
                 echo "</div>";
         }







发表于 2013-10-8 17:32:55 | 显示全部楼层
看看
发表于 2014-4-11 17:32:56 | 显示全部楼层
CI分页不好使
发表于 2014-5-9 00:25:36 | 显示全部楼层
做个记号吧,日后好用

本版积分规则