这个类并不难,思路来自分页,思想是在内容里加入不在页面显示的标签, 作为分页的标志!
类中有个url分析的函数,是亲自试验出来的!可能跟您想要的不一样!主要还有个在后台使用的js,那是个难点,我用了半天的时间,调试跟查找
<?php
/**
author sanshi
QQ:35047205
Email:sanshi0815@tom.com
MSN:sanshi0815@tom.com
*
*@version 1.0.0 2005/10/25
*
长文章分页
edit 2005/10/26 add function is _delNull()
*/
class stringPage
{
var $sumpage = 0;//看此篇文章有多少页
var $showPage = 0;//要显示那段
var $curPage = 0;//当前显示段
var $content = array();//内容存储数组
var $file; //设置传输页
var $pvar;
var $format; //设置分隔符号
/*
param $text 要分隔的文本
param $format 分割符号
*/
function stringPage($text,$format='<!--@-->')
{
$this->content = $this->_delNull( explode($format,$text) );
//去掉空元素,并去掉相同的元素
//$this->content = $this->_delNull( array_unique( explode($format,$text) ) );
$this->sumpage = count($this->content);
$this->format = $format;
}
function _delNull($array)
{
$temp=array();
$f="/^( |<p>| ){0,}$/";
for($i=0;$i<count($array);$i++)
{
if(!preg_match_all($f,$array[$i],$out))
{
$temp[]=$array[$i];
}
}
return $temp;
}
function show($file='',$pvar='')
{
$this->file = empty($file)? $HTTP_SERVER_VARS['PHP_SELF'] : $file ;
$this->pvar = empty($pvar)? 'apage' : $pvar;
$p = $_GET[$this->pvar];
$p = ( $p=='')? 1 : $p;
$this->curPage = $p;
$tmp='';
//$tmp.= $this->_showHead();
$tmp.= $this->content[$this->curPage-1];
$tmp.= $this->_showFoot();
return $tmp;
//echo $this->_showFoot();
}
function _makeUrl($url)
{
$arrayUrl=parse_url($url);
$q=$arrayUrl['query'];
if(strpos($q,$this->pvar)===false)
{
return $url.'&'.$this->pvar."=";
}else{
$url=explode('=',$q);
$url[count($url)-1]='';
//$arrayUrl['query']=implode('=',$url);
return $this->file.'?'.implode('=',$url);
}
}
function _showHead()
{
$url=$this->_makeUrl($_SERVER["REQUEST_URI"]);
$upPage=$this->curPage-1;
$downPage=$this->curPage+1;
$head="<dir class='article_bar'>";
if($this->curPage>1&&$this->curPage>0)
{
$head.= "<a href=".$url.$upPage.">上一页</a> ";
}
if($this->sumpage>1&&$this->curPage<$this->sumpage)
{
$head.= "<a href=".$url.$downPage.">下一页</a> ";
}
$head.="第{$this->curPage}页 共{$this->sumpage}页";
$head.="</dir>";
return $head;
}
function _showFoot()
{
return $this->_showHead();
}
}
?>
<?php
//使用
$p=new stringPage($print_content);
echo $p->show();
?>
所使用的js
//取得鼠标的位置
function GetCursorPos(oTextArea)
{
var s="%]~!@#$%^";
clipboardData.setData('text',s);
oTextArea.focus();
document.execCommand('paste');
var ret=oTextArea.value.indexOf(s);
document.execCommand('undo');
if(ret==-1) GetCursorPos(oTextArea)
return ret;
}
function addtext(content)
{
var len=GetCursorPos(content);
var all = hxf.content.value;
//alert(len);
if(len>0 && len!=all.length)
{
//alert(hxf.content.value.length);
var old1= all.substring(0,len);
var old2= all.substring(len,all.length);
var format="<?=$FORMAT?>";
var tmp=old1+format+old2;
hxf.content.value=tmp;
var r=content.createTextRange();
r.moveStart('character',len);
r.collapse(true);
r.select();
//alert();
//setCaretAtEnd(content);
//hxf.content.focus();
}else if(len==0){
alert("不能在文章首设置分页!");
}else if(len==all.length)
{
alert("不能在文章尾设置分页!");
}
}
页面使用
<input type="button" name="pagep" value="设置分页" onclick="addtext(content)" >
传递文本区域的在表单里的名称!