phpcms2008的分页有时会出现莫名的错误,对html源代码的要求和分页符的位置要求较高,会造成不必要的分布错误,如把第一段作为标题。如把[page]和[page][/page]混排,还会造成导航的页码错误等。
分页符没有把<p></p>包含进去,也会造成每页html的代码开头为</p>,结尾为<p>。这些都是可以避免的,如tinymce编辑器把<p><!– pagebreak –></p>作为分页符,就是为了防止把段落标志p截断,而论坛上一些以<br />作为文章分段的解决,也是不符合标准。
分页的说明:
1、无标题时用<p>[page]</p>作为分页符;
2、用<p>[page]标题[/page]</p>作为标题分页符
敬告:修改之后的执行效率有下降,如果你的网站不用分页,切勿使用

phpcms2008修改分页后效果
主要的修改地方:
手头上没有流程绘制工具,就简单的说一下主要修改的地方。
1、$paginationtype==1自动生成时,把分页符替换,调用自动分页函数(不建议自动分页,因为自动分页的函数没有加<p></p>,可以自行加上,该函数在include\global.func.php,最后1384行修改为$data = implode(‘<p>[page]</p>’, $data););
2、$paginationtype==0不分页时,把分页符替换;
3、有分页符时且有标题分页符时,首页不是<p>[page]开头,则加上。由于编辑器的原因,首行开能是<p> </p>,所以要注意看源文件删除空行;
4、把<p>[page]</p>转换成<p>[page][/page]</p>
5、为符合规范,最后生成的文件开头为</p>时,要替换$content=substr_replace($content,”",0,4);
6、没有标题的分页为原标题+页码,防止把内容作为标题,也能规范标题
7、第一页如果没有标题则为原标题
附:1、修改的文件include\html.class.php下载
2、修改部分的源代码
//以下注释可删除,以
[page](.*)
为分页格式
$oldtitle=$title;//记录原文件名
if($paginationtype==1)
{
if(strpos($content, '[/page]
')!==false)
{
$content = preg_replace("|
\[page\](.*)\[/page\]
|U", '', $content);
}
if(strpos($content, '
[page]
')!==false)
{
$content = str_replace('
[page]
', '', $content);
}
$content = contentpage($content, $maxcharperpage);
}
elseif($paginationtype==0)
{
if(strpos($content, '[/page]
')!==false)
{
$content = preg_replace("|
\[page\](.*)\[/page\]
|U", '', $content);
}
if(strpos($content, '
[page]
')!==false)
{
$content = str_replace('
[page]
', '', $content);
}
}
if(strpos($content, '
[page]') !== false)
{
$contents = array_filter(explode('
[page]', $content));//生成分页数组
$pagenumber = count($contents);
for($i=1; $i<=$pagenumber; $i++)//生成网址 { $pageurls[$i] = $this->url->show($r['contentid'], $i, $r['catid'], $r['inputtime']);
}
if(strpos($content, '[/page]
') !== false)//有标题分页,则全部标题分页
{
if(strpos($content, '
[page]') !== 0 )
{//首行不是标题分页,则加上标题分页,注意编辑器原代码,首行为有可能为
$content='
[page][/page]
'.$content;
}
$content=str_replace('
[page]
','
[page][/page]
',$content);//把不是分页标题的格式转换成分页标题
echo $content;
if(preg_match_all("|
\[page\](.*)\[/page\]
|U", $content, $m, PREG_PATTERN_ORDER))
{
foreach($m[1] as $k=>$v)
{
$page = $k+1;
if ($v==''){$v='第'.$page.'页';};//分页标题为空时,输出第几页
$titles .= ''.$page.'、'.$v.'';
}
}
}
$page = $filesize = 0;
foreach($contents as $content)
{
$page++;
$pages = $this->url->show_pages($page, $pagenumber, $pageurls);
if($titles)
{
if (strpos($content,'
')==0){$content=substr_replace($content,"",0,4);};//符合w3c规范
不能为开头
if (strpos($content,'[/page]
')!==false)
{
list($title, $content) = explode('[/page]
', $content);
}
else
{
$title=$oldtitle.'('.$page.')';//没有标题的分页为原标题+页码
if ($page==1){$title=$oldtitle;};//第一页如果没有标题则为原标题
}
}
$title = strip_tags($title);
$head['title'] = $title.'_'.$C['catname'].'_'.$PHPCMS['sitename'];
ob_start();
include template('phpcms', $template);
$file = PHPCMS_ROOT.$pageurls[$page][0];
$filesize += createhtml($file);
}
return $filesize;
}
else
{
$page = $page ? $page : 1;
$images_number = $GLOBALS['images_number'];
$array_images = $GLOBALS['array_images'];
$title = strip_tags($title);
$head['title'] = $title.'_'.$C['catname'].'_'.$PHPCMS['sitename'];
$ishtml = 1;
$info = $this->url->show($r['contentid'], 0, $r['catid'], $r['inputtime']);
$file = PHPCMS_ROOT.$info[0];
ob_start();
include template('phpcms', $template);
return createhtml($file);exit;
}

十月 19th, 2011 on 4:59 下午
分页是个比较麻烦的事情
七月 12th, 2009 on 6:45 下午
呃 太麻烦了吧
七月 12th, 2009 on 5:31 下午
改的还是不严谨,有一些情况没有判断到,再改的话,可能就会拖慢集中生成的速度了,就没有再修改。
七月 12th, 2009 on 4:33 下午
改的挺复杂