对于长文章分页我们通常会有一些解决方案,比如按行分页,但是按行分页不好排,你是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> "; } 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>