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

[中级] Codeigniter 带搜索功能的分页

[复制链接]
发表于 2011-12-22 10:50:48 | 显示全部楼层 |阅读模式
先说个题外话:老版本的ci只能用offset分页,ci2.1已经带了页码分页了,很好用。
对应的参数是:
var $use_page_numbers = FALSE; // Use page number for segment instead of offset
这里只要传TRUE就能用页码分页了。

但是我想请教一下,默认的分页都OK,加入要带上其他参数呢?比如搜索结果页面加分页不需要考虑SEO优化,其实用最古老的方式都行?请问你们是怎么弄的。
我现在的是类似/search.php?q=搜索的词&page=1
发表于 2011-12-22 15:17:46 | 显示全部楼层
本帖最后由 huboo82 于 2011-12-22 15:18 编辑

参考django的paginator,用php可以输出一个包含分页页码数据的数组,然后在view里自由组织。比如:
PHP复制代码
 
$paginator = array(
        'has_next'                => FALSE,
        'has_previous'        => FALSE,
        'page_num'        => FALSE,
        'page'                => FALSE,
        'page_range'        => array()
);
 
复制代码

has_next和has_previous是判断是否有下一页和上一页,page_num是总页数,page是当前页,page_range是个数组,显示页码范围比如一个3页array(1,2,3)。然后在视图里可以随意写分页了。

例如这样的:
PHP复制代码
 
<?php if($pagery): ?>
<div class="pagination">
        <ul>
                <?php if($pagery['has_previous']): ?>
                <li class="prev"><a href="<?php echo site_url('admin/posts/?page=' . ($pagery['page'] - 1) . '&status=' . $status . '&mid=' . $mid . '&q=' . $q); ?>"><?php echo lang('previous'); ?></a></li>
                <?php else: ?>
                <li class="prev disabled"><a href="javascript:void(0)"><?php echo lang('previous'); ?></a></li>
                <?php endif; ?>
                <?php foreach($pagery['page_range'] as $item):  ?>
                <?php if($pagery['page'] == $item): ?>
                <li class="active"><a><?php echo $item; ?></a></li>
                <?php else: ?>
                <li><a href="<?php echo site_url('admin/posts/?page=' . $item . '&status=' . $status . '&mid=' . $mid . '&q=' . $q); ?>"><?php echo $item; ?></a></li>
                <?php endif; ?>
                <?php endforeach;  ?>
                <?php if($pagery['has_next']): ?>
                <li class="next"><a href="<?php echo site_url('admin/posts/?page=' . ($pagery['page'] + 1) . '&status=' . $status . '&mid=' . $mid . '&q=' . $q); ?>"><?php echo lang('next'); ?></a></li>
                <?php else: ?>
                <li class="next disabled"><a href="javascript:void(0)"><?php echo lang('next'); ?></a></li>
                <?php endif; ?>
        </ul>
</div>
<?php endif; ?>
 
复制代码
发表于 2011-12-28 15:40:20 | 显示全部楼层
收藏起来先,到这块了再过来看看
发表于 2012-2-29 17:27:48 | 显示全部楼层
马克一下,学习了。
 楼主| 发表于 2012-3-2 08:43:42 | 显示全部楼层
不错,封装成一个单独的class,直接调用
发表于 2017-7-11 04:39:16 | 显示全部楼层
本帖最后由 666 于 2017-7-11 04:40 编辑

哈哈 分页参数直接加个 $config['reuse_query_string'] = TRUE;  搞定

本版积分规则