这是 2.0 的分页函数,比较好用。我都用它。function multi($num, $perpage, $curr_page, $mpurl) {
$multipage = '';
if($num > $perpage) {
$page = 10;
$offset = 2; $pages = ceil($num / $perpage);
$from = $curr_page - $offset;
$to = $curr_page + $page - $offset - 1;
if($page > $pages) {
$from = 1;
$to = $pages;
} else {
if($from < 1) {
$to = $curr_page + 1 - $from;
$from = 1;
if(($to - $from) < $page && ($to - $from) < $pages) {
$to = $page;
}
} elseif($to > $pages) {
$from = $curr_page - $pages + $to;
$to = $pages;
if(($to - $from) < $page && ($to - $from) < $pages) {
$from = $pages - $page + 1;
}
}
}
$multipage .= "<a href=\"$mpurl&page=1\">&lt;&lt;</a> &nbsp;";
for($i = $from; $i <= $to; $i++) {
if($i != $curr_page) {
$multipage .= "<a href=\"$mpurl&page=$i\">[$i]</a>&nbsp;";
} else {
$multipage .= '<u><b>['.$i.']</b></u>&nbsp;';
}
}
$multipage .= $pages > $page ? " ... <a href=\"$mpurl&page=$pages\"> [$pages] &gt;&gt;</a>" : " <a href=\"$mpurl&page=$pages\">&gt;&gt;</a>";
}
return $multipage;
}

解决方案 »

  1.   

    请问:discuz使用的是哪种模板引擎?我看了看它的源代码,看不太懂,好像它用的是自己的一个模板引擎,是吗?
    还有,有哪位大侠对discuz的程序结构比较了解的?能不能分析一下discuz的程序结构?谢谢
      

  2.   

    呵呵,个人感觉csdn的也很好噢,
    另外,分页我觉得大龄青年的js也很好用,看着还省心
      

  3.   

    回复人: xinxin1982(新新) ( ) 信誉:99  2005-03-09 07:04:00  得分: 0  
     
     
       呵呵,个人感觉csdn的也很好噢,
    另外,分页我觉得大龄青年的js也很好用,看着还省心
      
     
    大龄青年的是哪个?
      

  4.   

    function multi($num, $perpage, $curr_page, $mpurl)
    里面的形参都表示什么呀...
      

  5.   

    回复人:zairwolfd(君子兰) ( 一级(初级)) 信誉:100  2005-03-11 20:32:00  得分:0大龄青年的是哪个?就是"变态",很好的前辈,CSDN__PHP_Blog看
      

  6.   

    Discuz 4.0的function multi($num, $perpage, $curpage, $mpurl, $maxpages = 0) {
    $multipage = '';
    $mpurl .= strpos($mpurl, '?') ? '&' : '?';
    if($num > $perpage) {
    $page = 10;
    $offset = 2; $realpages = ceil($num / $perpage);
    $pages = $maxpages && $maxpages < $realpages ? $maxpages : $realpages;

    $from = $curpage - $offset;
    $to = $curpage + $page - $offset - 1;
    if($page > $pages) {
    $from = 1;
    $to = $pages;
    } else {
    if($from < 1) {
    $to = $curpage + 1 - $from;
    $from = 1;
    if(($to - $from) < $page && ($to - $from) < $pages) {
    $to = $page;
    }
    } elseif($to > $pages) {
    $from = $curpage - $pages + $to;
    $to = $pages;
    if(($to - $from) < $page && ($to - $from) < $pages) {
    $from = $pages - $page + 1;
    }
    }
    } $multipage = ($curpage - $offset > 1 && $pages > $page ? '<td>&nbsp;<a href="'.$mpurl.'page=1"><b>|</b>&lt;&nbsp;</td>' : '').
    ($curpage > 1 ? '<td>&nbsp;<a href="'.$mpurl.'page='.($curpage - 1).'">&lt;</a>&nbsp;</td>' : '');
    for($i = $from; $i <= $to; $i++) {
    $multipage .= $i == $curpage ? '<td bgcolor="'.ALTBG2.'">&nbsp;<u><b>'.$i.'</b></u>&nbsp;</td>' :
    '<td>&nbsp;<a href="'.$mpurl.'page='.$i.'">'.$i.'</a>&nbsp;</td>';
    } $multipage .= ($curpage < $pages ? '<td>&nbsp;<a href="'.$mpurl.'page='.($curpage + 1).'">&gt;</a>&nbsp;</td>' : '').
    ($curpage + $page - $offset <= $pages ? '<td>&nbsp;<a href="'.$mpurl.'page='.$pages.'">&gt;<b>|</b></a>&nbsp;</td>' : '').
    ($curpage == $maxpages ? '<td>&nbsp;<a href="misc.php?action=maxpages&pages='.$maxpages.'">&gt;<b>?</b></a>&nbsp;</td>' : '').
    ($pages > $page ? '<td style="padding: 0"><input type="text" name="custompage" size="2" style="border: 1px solid '.BORDERCOLOR.'" onKeyDown="javascript: if(window.event.keyCode == 13) window.location=\''.$mpurl.'page=\'+this.value;"></td>' : ''); $multipage = $multipage ? '<table cellspacing="0" cellpadding="0" border="0"><tr><td height="3"></td></tr><tr><td>'.
    '<table cellspacing="'.INNERBORDERWIDTH.'" cellpadding="2" class="tableborder"><tr bgcolor="'.ALTBG1.'" class="smalltxt"><td class="header">&nbsp;'.$num.'&nbsp;</td><td class="header">&nbsp;'.$curpage.'/'.$realpages.'&nbsp;</td>'.$multipage.'</tr></table>'.
    '</td></tr><tr><td height="3"></td></tr></table>' : '';
    }
    return $multipage;
    }
      

  7.   

    discuz的template已经被我剽窃了~~哈
      

  8.   

    function multi($num, $perpage, $curr_page, $mpurl)
    里面的形参都表示什么呀...
    $num  记录数
    $perpage  每页显示多少条记录
    $curr_page  当前页数
    $mpurl  页号的连接地址
      

  9.   

    loveconan(放牛娃娃)  怎么剽窃的,能共享出来不
      

  10.   

    为了方便,改成个类,删了点东西,把模板时间也加到页面总执行时间里了
    它还是那个它,别的没动<?php// Template Class
    // Based on Discuz template Functionsclass Template { var $classname = 'Template';

    var $tpl_root = 'template/';

    var $tpl_cache_root = 'sitedata/template/';

    var $tpl_name = 'default';

    var $tpl_file_ext = 'htm';


    function parse_template($tplfile, $objfile)
    {
    global $language;

    $nest = 5;

    if(!@$fp = fopen($tplfile, 'r')) {
    exit("Current template file '".$tplfile."' not found or have no access!");
    }

    $template = fread($fp, filesize($tplfile));
    fclose($fp);

    $var_regexp = "((\\\$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)(\[[a-zA-Z0-9_\"\'\$\x7f-\xff]+\])*)";
    $const_regexp = "([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)";

    $template = preg_replace("/([\n\r]+)\t+/s", "\\1", $template);
    $template = preg_replace("/\<\!\-\-\{(.+?)\}\-\-\>/s", "{\\1}", $template);
    $template = preg_replace("/\{lang\s+(.+?)\}/ies", "languagevar('\\1')", $template);
    $template = str_replace("{LF}", "<?=\"\\n\"?>", $template);

    $template = preg_replace("/\{(\\\$[a-zA-Z0-9_\[\]\'\"\$\x7f-\xff]+)\}/s", "<?=\\1?>", $template);
    $template = preg_replace("/$var_regexp/es", "addquote('<?=\\1?>')", $template);
    $template = preg_replace("/\<\?\=\<\?\=$var_regexp\?\>\?\>/es", "addquote('<?=\\1?>')", $template);

    $template = preg_replace("/\s*\{template\s+(.+?)\}\s*/is", "\n<?php if (!\$tmp_tpl_obj) \$tmp_tpl_obj = new Template('".$this->tpl_root."', '".$this->tpl_cache_root."');\n\$tmp_tpl_obj->set_tpl_name ('".$this->tpl_name."');\ninclude \$tmp_tpl_obj->parse('\\1'); ?>\n", $template);
    $template = preg_replace("/\s*\{eval\s+(.+?)\}\s*/ies", "stripvtags('\n<?php \\1 ?>\n','')", $template);
    $template = preg_replace("/\s*\{elseif\s+(.+?)\}\s*/ies", "stripvtags('\n<?php } elseif(\\1) { ?>\n','')", $template);
    $template = preg_replace("/\s*\{else\}\s*/is", "\n<?php } else { ?>\n", $template);

    for($i = 0; $i < $nest; $i++) {
    $template = preg_replace("/\s*\{loop\s+(\S+)\s+(\S+)\}\s*(.+?)\s*\{\/loop\}\s*/ies", "stripvtags('\n<? if(is_array(\\1)) { foreach(\\1 as \\2) { ?>','\n\\3\n<? } } ?>\n')", $template);
    $template = preg_replace("/\s*\{loop\s+(\S+)\s+(\S+)\s+(\S+)\}\s*(.+?)\s*\{\/loop\}\s*/ies", "stripvtags('\n<? if(is_array(\\1)) { foreach(\\1 as \\2 => \\3) { ?>','\n\\4\n<? } } ?>\n')", $template);
    $template = preg_replace("/\s*\{if\s+(.+?)\}\s*(.+?)\s*\{\/if\}\s*/ies", "stripvtags('\n<? if(\\1) { ?>','\n\\2\n<? } ?>\n')", $template);
    }

    $template = preg_replace("/\{$const_regexp\}/s", "<?=\\1?>", $template);
    $template = preg_replace("/ \?\>[\n\r]*\<\? /s", " ", $template);

    if(!@$fp = fopen($objfile, 'w')) {
    exit("Directory '".$this->tpl_root.'/'.$this->tpl_cache_root."' not found or have no access!");
    }

    flock($fp, 3);
    fwrite($fp, $template);
    fclose($fp);
    }

    function language($file)
    {

    $tpldir = $this->tpl_root.'/'.$this->tpl_name;
    $templateid = $templateid ? $templateid : 0;

    $languagepack = $this->tpl_dir.$file.'.lang.php';
    if(file_exists($languagepack)) {
    return $languagepack;
    }
    else {
    return FALSE;
    }
    }

    function parse($file)
    {
    global $page_time, $page_time_start;

    $tpl_dir = $this->tpl_root.'/'.$this->tpl_name.'/';
    $this->tpl_dir = str_replace ('//', '/', $tpl_dir);

    $tplfile = $this->tpl_dir.$file.'.'.$this->tpl_file_ext;
    $objfile = $this->tpl_cache_root.'/'.$this->tpl_name.'_'.$file.'.tpl.php';

    if (!file_exists($tplfile)) {
    $tplfile = $this->tpl_root.'/default/'.$file.'.'.$this->tpl_file_ext;
    $objfile = $this->tpl_cache_root.'/default_'.$file.'.tpl.php';
    }

    if ((@filemtime($tplfile) > @filemtime($objfile)) || (!@file_exists($objfile))) {
    $this->parse_template($tplfile, $objfile);
    }

    list($usec, $sec) = explode(" ",microtime());
    $page_time_end = $usec + $sec;
    $page_time = sprintf ("%0.6f", $page_time_end - $page_time_start);

    return ($objfile);
    }

    function Template($root, $cache_dir)
    {
    $this->tpl_root = $root;
    $this->tpl_cache_root = $cache_dir;
    }

    function set_tpl_name($name)
    {
    $tpl_dir = $this->tpl_root.'/'.$this->tpl_name.'/';
    if ($name != '' && is_dir ($tpl_dir))
    $this->tpl_name = $name;
    }
    }function addquote($var)
    {
    return str_replace("\\\"", "\"", preg_replace("/\[([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)\]/s", "['\\1']", $var));
    }

    function languagevar($var)
    {
    if(isset($GLOBALS['language'][$var])) {
    return $GLOBALS['language'][$var];
    }
    else {
    return "!$var!";
    }
    }

    function stripvtags($expr, $statement)
    {
    $expr = str_replace("\\\"", "\"", preg_replace("/\<\?\=(\\\$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\[\]\"\'\x7f-\xff]*)\?\>/s", "\\1", $expr));
    $statement = str_replace("\\\"", "\"", $statement);
    return $expr.$statement;
    }

    ?>懒得再加别的了……