+ -
当前位置:首页 → 问答吧 → 专为zendframework打造的smarty分页插件

专为zendframework打造的smarty分页插件

时间:2007-05-04

来源:互联网

zendframework请求的地址很让搜索工具喜爱,但是假如这里用相对路径来取地址的话或多或少出现问题,在这里我通过$_SERVER['REQUEST_URI']来取得,然后再对他加工,再传递给smarty。

最后的效果如下:

假如当前请求的uri是 /dis/forum/index/lv/2/fid/2/page/3 或 /dis/forum/index/lv/2/fid/2/page/3/ 或 /dis/forum/index/lv/2/fid/2

那么分页链接会显示为 /dis/forum/index/lv/2/fid/2/page/N  ,N代替分页显示的数字

这个插件难免会有bug,假如对您有用的话,请多多支持以及修正(修正后记得发我一份),我的小站: http://hey-m.phpoo.cn,欢迎大家光临
smarty分页模板(样式就根据自己来订造拉):
复制PHP内容到剪贴板
PHP代码:
<!--smarty分页显示插件-->
<div id="pagebar">
    <ul>
        <{section name="loop" loop=$end start=$act }>
            <{if $smarty.section.loop.index eq $page}>
                <li><{$smarty.section.loop.index}></li>
            <{else}>
                <li><a href="<{$url}><{$smarty.section.loop.index}>"><{$smarty.section.loop.index}></a></li>
            <{/if}>
        <{/section}>
    </ul>
</div>

模板的调用:
复制PHP内容到剪贴板
PHP代码:
<!--调用插件,date是分页的数组(从数据库获取),page是当前的页面-->
<{postpager date=$posts page=$page}>
<!--包含分页模板-->
<{include file="pagebar.html"}>

smarty分页插件代码:
复制PHP内容到剪贴板
PHP代码:

<?php
/**
 * smarty分页插件
 *
 * @author edwardhey
 * @package defaultPackage
 * @copyright 2007-05-04
 * @version 1.0
 */
function smarty_function_postpager($params,&$smarty){
    //每页显示数目
    $per=15;
    //获取当前页码
    $page=$params['page'];
    //总记录数
    $trecord=0;
    //得出记录数
    if($params['date']){
        foreach($params['date'] as $v){
            $trecord += count($v);
        }
    }
    //得出总页数
    $tpage = ceil($trecord/$per);
    //这个根据自己需求而定
    $nums = count($params['date']['top']);
    $less = $per-$nums;
    if(is_array($params['date']['normal'])){
        if($page==1){
            $less = $per-$nums;
            $starno = 0;
            $normal=array_slice($params['date']['normal'],$starno,$less);
        }else{
            $starno = $less+$per*($page-2)+1;
            $normal=array_slice($params['date']['normal'],$starno,$per);
        }
    }
    //    当前页数前显示数字
    $front=2;
    //    当前页后显示数字
    $behind=7;
    //    开始页数
    $act = $page - $front;
    //    结束页数
    $end = $page + $behind;
    if ($act < 1) $act = 1;
    if ($end > $tpage) $end = $tpage;
    /*解决url请求问题*/
    $url=$_SERVER['REQUEST_URI'];
    if(!preg_match("/page/i",$url)){
        $url .= '/page/';
    }else{
        $url = preg_replace('/(?:page\/\\d+\/?)/', 'page/', $url);
    }
    /*地址url*/
    $smarty->assign("url",$url);
    /*分页开始项*/
    $smarty->assign("act",$act);
    /*分页结束项*/
    $smarty->assign("end",$end+1);
    //总共页
    $smarty->assign("tpage",$tpage);
    //置顶
    $smarty->assign("top",$params['date']['top']);
    //正常
    $smarty->assign("normal",$normal);
}
?>

[ 本帖最后由 edwardhey 于 2007-5-4 10:12 编辑 ]

作者: edwardhey   发布时间: 2007-05-04