您的位置:首页 > 其它

dedecms会员空间不能分页的解决办法

2014-09-09 16:42 197 查看
在用dedecms的时候发现一个很奇怪的bug,就是在会员空间中所有的内容都不能分页,去官方论坛也没能找到解决方法,无奈之下自动动手查找原因,最后发现是include/arc.memberlistview.class.php这个文件的问题,找到这个文件,将以下代码替换掉原来的就可以了。
<?php if(!defined('DEDEINC')) exit("Request Error!");

require_once(DEDEINC."/dedetemplate.class.php");
$lang_pre_page = '上页';
$lang_next_page = '下页';
$lang_index_page = '首页';
$lang_end_page = '末页';
$lang_record_number = '条记录';
$lang_page = '页';
$lang_total = '共';
class MemberListview
{
var $dsql = '';
var $tpl = '';
var $pageNO = 1;
var $totalPage = 0;
var $totalResult = 0;
var $pageSize = 25;
var $getValues = array();
var $sourceSql = '';
var $isQuery = false;
var $randts = 0;

/**
* 用指定的文档ID进行初始化
*
* @access public
* @param string $tplfile 模板文件
* @return void
*/
function __construct($tplfile='')
{
$this->sourceSql = '';
$this->pageSize = 25;
$this->queryTime = 0;
$this->getValues = Array();
$this->randts = time();
$this->dsql = $GLOBALS['dsql'];
$this->SetVar('ParseEnv','datalist');
$this->tpl = new DedeTemplate();
if($GLOBALS['cfg_tplcache']=='N')
{
$this->tpl->isCache = false;
}
if($tplfile!='')
{
$this->tpl->LoadTemplate($tplfile);
}
}

//兼容PHP4
function MemberListview($tplfile='')
{
$this->__construct($tplfile);
}

/**
* 设置SQL语句
*
* @access public
* @param string $sql SQL语句
* @return void
*/
function SetSource($sql)
{
$this->sourceSql = $sql;
}

/**
* 设置模板
* 如果想要使用模板中指定的pagesize,必须在调用模板后才调用 SetSource($sql)
*
* @access public
* @param string $tplfile 模板文件
* @return void
*/
function SetTemplate($tplfile)
{
$this->tpl->LoadTemplate($tplfile);
}

/**
* 设置模板
*
* @access public
* @param string $tplfile 模板文件
* @return void
*/
function SetTemplet($tplfile)
{
$this->tpl->LoadTemplate($tplfile);
}

/**
* 对config参数及get参数等进行预处理
*
* @access private
* @return void
*/
function PreLoad()
{
global $totalresult,$pageno;
if(empty($pageno) || preg_match("/[^0-9]/", $pageno))
{
$pageno = 1;
}
if(empty($totalresult) || preg_match("/[^0-9]/", $totalresult))
{
$totalresult = 0;
}
$this->pageNO = $pageno;
$this->totalResult = $totalresult;

if(isset($this->tpl->tpCfgs['pagesize']))
{
$this->pageSize = $this->tpl->tpCfgs['pagesize'];
}
$this->totalPage = ceil($this->totalResult/$this->pageSize);
if($this->totalResult==0)
{
//$this->isQuery = true;
//$this->dsql->Execute('mbdl',$this->sourceSql);
//$this->totalResult = $this->dsql->GetTotalRow('mbdl');
//$countQuery = preg_replace("/select[ \r\n\t](.*)[ \r\n\t]from/i","Select count(*) as dd From",$this->sourceSql);
$countQuery = preg_replace("#SELECT[ \r\n\t](.*)[ \r\n\t]FROM#is", 'SELECT COUNT(*) AS dd FROM', $this->sourceSql);
$countQuery = preg_replace("#ORDER[ \r\n\t]{1,}BY(.*)#is", '', $countQuery);
$row = $this->dsql->GetOne($countQuery);
$row['dd'] = empty($row['dd']) ? 0 : $row['dd'];
$this->totalResult = $row['dd'];
$this->sourceSql .= " limit 0,".$this->pageSize;
}
else
{
$this->sourceSql .= " limit ".(($this->pageNO-1) * $this->pageSize).",".$this->pageSize;
}
}

/**
* 设置网址的Get参数键值
*
* @access public
* @param string $key 键
* @param string $value 值
* @return void
*/
function SetParameter($key, $value)
{
$this->getValues[$key] = $value;
}

/**
* 设置/获取文档相关的各种变量
*
* @access public
* @param string $k 键
* @param string $v 值
* @return void
*/
function SetVar($k, $v)
{
global $_vars;
if(!isset($_vars[$k])) $_vars[$k] = $v;
}

/**
* 获取值
*
* @param string $k
* @return string
*/
function GetVar($k)
{
global $_vars;
if(isset($_vars[$k])) return $_vars[$k];
else return '';
}

/**
* 获取当前页数据列表
*
* @access public
* @param string $atts 属性
* @param string $refObj 实例化对象
* @param string $fields 字段
* @return array
*/
function GetArcList($atts,$refObj='',$fields=array())
{
$attlist = "titlelen=30,infolen=200,imgwidth=120,imgheight=90";
FillAtts($atts,$attlist);
FillFields($atts,$fields,$refObj);
extract($atts, EXTR_OVERWRITE);
$rsArray = array();

//global $_vars;
//$t1 = Exectime();
if(!$this->isQuery)
{
$this->dsql->Execute('mbdl',$this->sourceSql);
}
$i = 0;
while($row = $this->dsql->GetArray('mbdl'))
{
$i++;

if(!isset($row['description'])) $row['description'] = '';
if(!isset($row['color'])) $row['color'] = '';
if(!isset($row['pubdate'])) $row['pubdate'] = $row['senddate'];
//处理一些特殊字段
$row['infos'] = cn_substr($row['description'],$infolen);
$row['id'] = $row['id'];
$row['filename'] = $row['arcurl'] = GetFileUrl($row['id'],$row['typeid'],$row['senddate'],$row['title'],$row['ismake'],
$row['arcrank'],$row['namerule'],$row['typedir'],$row['money'],$row['filename'],$row['moresite'],$row['siteurl'],$row['sitepath']);
$row['typeurl'] = GetTypeUrl($row['typeid'],$row['typedir'],$row['isdefault'],$row['defaultname'],$row['ispart'],
$row['namerule2'],$row['moresite'],$row['siteurl'],$row['sitepath']);
if($row['litpic'] == '-' || $row['litpic'] == '')
{
$row['litpic'] = $GLOBALS['cfg_cmspath'].'/images/defaultpic.gif';
}
if(!preg_match("/^http:\/\//i", $row['litpic']) && $GLOBALS['cfg_multi_site'] == 'Y')
{
$row['litpic'] = $GLOBALS['cfg_mainsite'].$row['litpic'];
}
$row['picname'] = $row['litpic'];
$row['stime'] = GetDateMK($row['pubdate']);
$row['typelink'] = "<a href='".$row['typeurl']."'>".$row['typename']."</a>";
$row['image'] = "<img src='".$row['picname']."' border='0' width='$imgwidth' height='$imgheight' alt='".preg_replace("/['><]/", "", $row['title'])."'>";
$row['imglink'] = "<a href='".$row['filename']."'>".$row['image']."</a>";
$row['fulltitle'] = $row['title'];
$row['title'] = cn_substr($row['title'],$titlelen);
if($row['color']!='')
{
$row['title'] = "<font color='".$row['color']."'>".$row['title']."</font>";
}
if(preg_match('/b/', $row['flag']))
{
$row['title'] = "<strong>".$row['title']."</strong>";
}

//$row['title'] = "<b>".$row['title']."</b>";
$row['textlink'] = "<a href='".$row['filename']."'>".$row['title']."</a>";
$row['plusurl'] = $row['phpurl'] = $GLOBALS['cfg_phpurl'];
$row['memberurl'] = $GLOBALS['cfg_memberurl'];
$row['templeturl'] = $GLOBALS['cfg_templeturl'];
$rsArray[$i] = $row;
if($i >= $this->pageSize)
{
break;
}
}
$this->dsql->FreeResult();

//echo "执行时间:".(Exectime() - $t1);
return $rsArray;
}

/**
* 获取分页导航列表
*
* @access public
* @param string $atts 属性
* @param string $refObj 实例化对象
* @param string $fields 字段
* @return string
*/
function GetPageList($atts,$refObj='',$fields=array())
{
global $lang_pre_page,$lang_next_page,$lang_index_page,$lang_end_page,$lang_record_number,$lang_page,$lang_total;
$prepage = $nextpage = $geturl= $hidenform = '';
$purl = $this->GetCurUrl();
$prepagenum = $this->pageNO-1;
$nextpagenum = $this->pageNO+1;
if(!isset($atts['listsize']) || preg_match("/[^0-9]/", $atts['listsize']))
{
$atts['listsize'] = 5;
}
if(!isset($atts['listitem']))
{
$atts['listitem'] = "info,index,end,pre,next,pageno";
}
$totalpage = ceil($this->totalResult/$this->pageSize);

//echo " {$totalpage}=={$this->totalResult}=={$this->pageSize}";

//无结果或只有一页的情况
if($totalpage<=1 && $this->totalResult > 0)
{
return "{$lang_total} 1 {$lang_page}/".$this->totalResult.$lang_record_number;
}
if($this->totalResult == 0)
{
return "{$lang_total} 0 {$lang_page}/".$this->totalResult.$lang_record_number;
}
$infos = "<span>{$lang_total} {$totalpage} {$lang_page}/{$this->totalResult}{$lang_record_number}</span> ";
if($this->totalResult!=0)
{
$this->getValues['totalresult'] = $this->totalResult;
}
if(count($this->getValues)>0)
{
foreach($this->getValues as $key=>$value)
{
$value = urlencode($value);
$geturl.="$key=$value"."&";
$hidenform.="<input type='hidden' name='$key' value='$value'>\r\n";
}
}
$purl .= "?".$geturl;

//获得上一页和下一页的链接
if($this->pageNO!=1)
{
$prepage.="<a href='".$purl."pageno=$prepagenum'>$lang_pre_page</a> \r\n";
$indexpage="<a href='".$purl."pageno=1'>$lang_index_page</a> \r\n";
}
else
{
$indexpage="$lang_index_page \r\n";
}
if($this->pageNO!=$totalpage&&$totalpage>1)
{
$nextpage.="<a href='".$purl."pageno=$nextpagenum'>$lang_next_page</a> \r\n";
$endpage="<a href='".$purl."pageno=$totalpage'>$lang_end_page</a> \r\n";
}
else
{
$endpage=" $lang_end_page \r\n";
}

//获得数字链接
$listdd="";
$total_list = $atts['listsize'] * 2 + 1;
if($this->pageNO>=$total_list)
{
$j=$this->pageNO-$atts['listsize'];
$total_list=$this->pageNO+$atts['listsize'];
if($total_list>$totalpage)
{
$total_list=$totalpage;
}
}
else
{
$j=1;
if($total_list>$totalpage) $total_list=$totalpage;
}
for($j;$j<=$total_list;$j++)
{
if($j==$this->pageNO)
{
$listdd.= "<strong>$j</strong> \r\n";
}
else
{
$listdd.="<a href='".$purl."pageno=$j'>".$j."</a> \r\n";
}
}
$plist = "<div class=\"pagelistbox\">\r\n";

//info,index,end,pre,next,pageno,form
if(preg_match("/info/i",$atts['listitem']))
{
$plist .= $infos;
}
if(preg_match("/index/i",$atts['listitem']))
{
$plist .= $indexpage;
}
if(preg_match("/pre/i",$atts['listitem']))
{
$plist .= $prepage;
}
if(preg_match("/pageno/i",$atts['listitem']))
{
$plist .= $listdd;
}
if(preg_match("/next/i",$atts['listitem']))
{
$plist .= $nextpage;
}
if(preg_match("/end/i",$atts['listitem']))
{
$plist .= $endpage;
}
if(preg_match("/form/i",$atts['listitem']))
{
$plist .=" <form name='pagelist' action='".$this->GetCurUrl()."'>$hidenform";
if($totalpage>$total_list)
{
$plist.="<input type='text' name='pageno' style='padding:0px;width:30px;height:18px'>\r\n";
$plist.="<input type='submit' name='plistgo' value='GO' style='padding:0px;width:30px;height:18px;font-size:11px'>\r\n";
}
$plist .= "</form>\r\n";
}
$plist .= "</div>\r\n";
return $plist;
}

/**
* 获得当前网址
*
* @access public
* @return string
*/
function GetCurUrl()
{
if(!empty($_SERVER["REQUEST_URI"]))
{
$nowurl = $_SERVER["REQUEST_URI"];
$nowurls = explode("?",$nowurl);
$nowurl = $nowurls[0];
}
else
{
$nowurl = $_SERVER["PHP_SELF"];
}
return $nowurl;
}

//关闭
function Close()
{
}

/**
* 显示数据
*
* @access public
* @return void
*/
function Display()
{

if($this->sourceSql != '') $this->PreLoad();

//在PHP4中,对象引用必须放在display之前,放在其它位置中无效
$this->tpl->SetObject($this);
$this->tpl->Display();
}

/**
* 保存为HTML
*
* @access public
* @param string $filename 文件名称
* @return string
*/
function SaveTo($filename)
{
$this->tpl->SaveTo($filename);
}
}//End Class
dedecms会员空间不能分页的解决办法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: