khalilfiona 发表于 2013-8-26 22:35:27

CI的ajax分页

本帖最后由 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;      //取第七个为article_id的值
                var href=$(this).attr("href");    //jquery获取标签的href属性值,千万别用$(this).href!无解!!
                var arr=href.split('/');
                if(arr==''){arr=1;}   //不知道为什么第一页的页码可能为空,所以在这里处理一下
                var cur_page=arr;
                //var offset=$(this).text(); //获取页码上的数字,这样可能导致得到的页数有prev和next这类非数字,所以不用了
                var offset=arr;            //干脆都用a标签本身的href获取好了
                $.ajax({
                  url:"index.php/home/comment_page",
                  type:"post",
                  dataType:"text",
                  data: {
                        offset:offset,            //获取页码上的数字,这里的三个参数可以不需要左右值用一样的名称,下次改进
                        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>";
         }







qq907274532 发表于 2013-10-8 17:32:55

:lol看看

goyuquan 发表于 2014-4-11 17:32:56

CI分页不好使

wwwhx110com 发表于 2014-5-9 00:25:36

做个记号吧,日后好用
页: [1]
查看完整版本: CI的ajax分页