CFcodes.com ColdFusion知识库

利用分隔符对单篇文章信息进行分页操作
发布时间:2008-08-20 作者:子心 点击:407
第1页   第2页   

对于长文章分页我们通常会有一些解决方案,比如按行分页,但是按行分页不好排,你是10个字一行呢还是50个字一行?800*600屏幕是10个字的,1024*800是15个字的,你是固定死的几个字一行呢还是咋的?

按分段也是不太好的,有些段长,有些段短,你是每页固定几段的话,那么就要有些页长有些页短了,而且每个分页的意思连接也有可能有问题。如果按字数也是不好的,简单的说是操作上没办法控制。控制字数是按源码进行控制的,如果你只有文字还无所谓,但你的源码里包括超链接,图片等内容,你的文字分隔就会有问题了。

好些的方案是可以利用分隔符号进行文章分隔。

下面我就将利用分隔符进行分页的程序发布如下:
 

<cfscript>
function GetPages(s,sep){
pos = 1;
begin_pos = ArrayNew(1);
end_pos = ArrayNew(1);
while(pos gte 1){
pos = FindNoCase(sep,s,pos);
if(pos gte 1){
ArrayAppend(end_pos,pos -1);
pos = len(sep) + pos;
ArrayAppend(begin_pos,pos);
}
}
ArrayAppend(end_pos, len(s));
ArrayPrepend(begin_pos,"1");
return end_pos;begin_pos;
}
function PageList(s){
if (ArrayLen(arguments) eq 1){
sep = '[pages]';
}else{
sep = arguments[2];
}
GetPages(s,sep);
PageLink = "";
if(Len(QUERY_STRING) GT 0){
if(FindNoCase("cpage", query_string)){
isQueryString = true;
QueryString = ListDeleteAt(Query_string,ListContainsNoCase(query_string,"cpage","&"),"&");
if(Len(QueryString) EQ 0){
isQueryString = false;
}
}else{
isQueryString = true;
QueryString = query_string;
}
}else{
isQueryString = false;
QueryString = query_string;
}
for(i = 1;i lte arraylen(end_pos);i = i + 1){
if(isQueryString IS true){
itPage = i & "&" & QueryString;
}else{
itPage = i;
}
PageLink = PageLink & "<a href=" & script_name & "?cpage=" & itPage & ">第" & i & "页</a>&nbsp;&nbsp;&nbsp;";
}
if(arraylen(end_pos) gt 1){
return PageLink;
}else{
return null;
}
}
function GetContent(str){
if(isdefined("url.cpage")){ url.cpage = url.cpage;}else{url.cpage = 1;}
if(url.cpage gt arraylen(end_pos) or url.cpage lt 1){
writeoutput("wrong page argu,please input right page argu,click 
 <a href=" & script_name & ">here</a> to back" );
}else{
bpos = begin_pos[url.cpage];
epos = end_pos[url.cpage];
writeoutput(mid(str,bpos,(epos-bpos+1)));
}
}
</cfscript>
第1页   第2页