|
本帖最后由 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>";
}
|
|