叙述、别离 преди 2 години
родител
ревизия
fc9191c0e0
променени са 6 файла, в които са добавени 792 реда и са изтрити 176 реда
  1. +7
    -5
      system/archive/archives.class.php
  2. +9
    -7
      system/archive/archives.m.class.php
  3. +280
    -55
      system/archive/listview.class.php
  4. +284
    -71
      system/archive/listview.m.class.php
  5. +1
    -1
      system/archive/searchview.class.php
  6. +211
    -37
      system/archive/sglistview.class.php

+ 7
- 5
system/archive/archives.class.php Целия файл

@@ -193,9 +193,11 @@ class Archives
$this->Fields['body'] = preg_replace("@ [\s]{0,}alt[\s]{0,}=[\"'\s]{0,}[\s\S]{0,}[\"'\s] @isU","",$this->Fields['body']);
$this->Fields['body'] = str_ireplace("<img","<img alt=\"".$this->Fields['title']."\" title=\"".$this->Fields['title']."\" ",$this->Fields['body']);
//图片模型正文图片注释自动为标题
$this->Fields['imgurls'] = str_ireplace(array('alt=""','alt=\'\''),'',$this->Fields['imgurls']);
$this->Fields['imgurls'] = preg_replace("@ [\s]{0,}alt[\s]{0,}=[\"'\s]{0,}[\s\S]{0,}[\"'\s] @isU","",$this->Fields['imgurls']);
$this->Fields['imgurls'] = str_ireplace("<img","<img alt=\"".$this->Fields['title']."\" title=\"".$this->Fields['title']."\"",$this->Fields['imgurls']);
if (isset($this->Fields['imgurls']) && is_array($this->Fields['imgurls'])) {
$this->Fields['imgurls'] = str_ireplace(array('alt=""','alt=\'\''),'',$this->Fields['imgurls']);
$this->Fields['imgurls'] = preg_replace("@ [\s]{0,}alt[\s]{0,}=[\"'\s]{0,}[\s\S]{0,}[\"'\s] @isU","",$this->Fields['imgurls']);
$this->Fields['imgurls'] = str_ireplace("<img","<img alt=\"".$this->Fields['title']."\" title=\"".$this->Fields['title']."\"",$this->Fields['imgurls']);
}
//移除文档模型正文图片宽度和高度,适配自适应/响应式网站
$this->Fields['body'] = preg_replace("/style=\"width\:(.*)\"/","",$this->Fields['body']);
}
@@ -493,7 +495,7 @@ class Archives
if ($GLOBALS['cfg_jump_once'] == 'N') {
$pageHtml = "<html>\r\n<head>\r\n<meta charset=".$GLOBALS['cfg_soft_lang']."\">\r\n<title>".$this->Fields['title']."</title>\r\n";
$pageHtml .= "<meta http-equiv=\"refresh\" content=\"3;URL=".$this->Fields['redirecturl']."\">\r\n</head>\r\n<body>\r\n";
$pageHtml .= "正在跳转文档:".$this->Fields['title']."<br><br>\r\n文档描述:".$this->Fields['description']."\r\n</body>\r\n</html>\r\n";
$pageHtml .= "正在前往文档:".$this->Fields['title']."<br><br>\r\n文档描述:".$this->Fields['description']."\r\n</body>\r\n</html>\r\n";
echo $pageHtml;
} else {
header("location:{$this->Fields['redirecturl']}");
@@ -1009,7 +1011,7 @@ function _highlightkeywords($matches)
{
return _highlight($matches[2], $GLOBALS['_dd_karr'], $GLOBALS['_dd_kaarr'], $matches[1]);
}
//高亮专用,替换多次是可能不能达到最多次
//高亮专用
function _highlight($string, $words, $result, $pre)
{
global $cfg_replace_num;


+ 9
- 7
system/archive/archives.m.class.php Целия файл

@@ -107,7 +107,7 @@ class ArchivesMobile
}
$this->addTableRow = $this->dsql->GetOne($query);
}
//issystem==-1 表示自定义模型,自定义模型不支持redirecturl这类参数,因此限定文档普通模型才进行下面查询
//issystem==-1表示自定义模型,自定义模型不支持redirecturl这类参数,因此限定文档普通模型才进行下面查询
if ($this->ChannelUnit->ChannelInfos['addtable'] != '' && $this->ChannelUnit->ChannelInfos['issystem'] != -1) {
if (is_array($this->addTableRow)) {
$this->Fields['redirecturl'] = $this->addTableRow['redirecturl'];
@@ -195,9 +195,11 @@ class ArchivesMobile
$this->Fields['body'] = preg_replace("@ [\s]{0,}alt[\s]{0,}=[\"'\s]{0,}[\s\S]{0,}[\"'\s] @isU","",$this->Fields['body']);
$this->Fields['body'] = str_ireplace("<img","<img alt=\"".$this->Fields['title']."\" title=\"".$this->Fields['title']."\" ",$this->Fields['body']);
//图片模型正文图片注释自动为标题
$this->Fields['imgurls'] = str_ireplace(array('alt=""','alt=\'\''),'',$this->Fields['imgurls']);
$this->Fields['imgurls'] = preg_replace("@ [\s]{0,}alt[\s]{0,}=[\"'\s]{0,}[\s\S]{0,}[\"'\s] @isU","",$this->Fields['imgurls']);
$this->Fields['imgurls'] = str_ireplace("<img","<img alt=\"".$this->Fields['title']."\" title=\"".$this->Fields['title']."\"",$this->Fields['imgurls']);
if (isset($this->Fields['imgurls']) && is_array($this->Fields['imgurls'])) {
$this->Fields['imgurls'] = str_ireplace(array('alt=""','alt=\'\''),'',$this->Fields['imgurls']);
$this->Fields['imgurls'] = preg_replace("@ [\s]{0,}alt[\s]{0,}=[\"'\s]{0,}[\s\S]{0,}[\"'\s] @isU","",$this->Fields['imgurls']);
$this->Fields['imgurls'] = str_ireplace("<img","<img alt=\"".$this->Fields['title']."\" title=\"".$this->Fields['title']."\"",$this->Fields['imgurls']);
}
//移除文档模型正文图片宽度和高度,适配自适应/响应式网站
$this->Fields['body'] = preg_replace("/style=\"width\:(.*)\"/","",$this->Fields['body']);
}
@@ -325,7 +327,7 @@ class ArchivesMobile
$filenames = explode("/", $filename);
$this->NameFirst = preg_replace("/\.".$this->ShortName."$/i", "", $filenames[count($filenames) - 1]);
if ($this->NameFirst == '') {
$this->NameFirst = $this->arcID;
$this->NameFirst = $this->ArcID;
}
//获得当前文档的全名
$filenameFull = GetFileUrl(
@@ -501,7 +503,7 @@ class ArchivesMobile
if ($GLOBALS['cfg_jump_once'] == 'N') {
$pageHtml = "<html>\r\n<head>\r\n<meta charset=".$GLOBALS['cfg_soft_lang']."\">\r\n<title>".$this->Fields['title']."</title>\r\n";
$pageHtml .= "<meta http-equiv=\"refresh\" content=\"3;URL=".$this->Fields['redirecturl']."\">\r\n</head>\r\n<body>\r\n";
$pageHtml .= "正在跳转文档:".$this->Fields['title']."<br><br>\r\n文档描述:".$this->Fields['description']."\r\n</body>\r\n</html>\r\n";
$pageHtml .= "正在前往文档:".$this->Fields['title']."<br><br>\r\n文档描述:".$this->Fields['description']."\r\n</body>\r\n</html>\r\n";
echo $pageHtml;
} else {
header("location:{$this->Fields['redirecturl']}");
@@ -1017,7 +1019,7 @@ function _highlightkeywords($matches)
{
return _highlight($matches[2], $GLOBALS['_dd_karr'], $GLOBALS['_dd_kaarr'], $matches[1]);
}
//高亮专用,替换多次是可能不能达到最多次
//高亮专用
function _highlight($string, $words, $result, $pre)
{
global $cfg_replace_num;


+ 280
- 55
system/archive/listview.class.php Целия файл

@@ -33,15 +33,18 @@ class ListView
var $CrossID;
var $IsReplace;
var $remoteDir;
var $mod;
var $_parms = array('tid','TotalResult','PageNo','PageSize','mod','timestamp','sign');
/**
* php5构造函数
*
* @access public
* @param int $typeid 栏目id
* @param int $uppage 上一页
* @param int $typeid 栏目id
* @param int $uppage 上一页
* @param int $mod 渲染类型 0:HTML 1:JSON
* @return string
*/
function __construct($typeid, $uppage = 1)
function __construct($typeid, $uppage = 1, $mod = 0)
{
global $dsql, $envs;
$envs['url_type'] = 1;
@@ -58,6 +61,7 @@ class ListView
$this->TypeLink = new TypeLink($typeid);
$this->upPageType = $uppage;
$this->remoteDir = '';
$this->mod = $mod;
$this->TotalResult = is_numeric($this->TotalResult) ? $this->TotalResult : "";
if (!is_array($this->TypeLink->TypeInfos)) {
$this->IsError = true;
@@ -71,13 +75,39 @@ class ListView
//添加联动单筛选
if (isset($_REQUEST['tid'])) {
foreach($_GET as $key => $value) {
if ($key!="tid" && $key!="TotalResult" && $key!="PageNo") {
if (!in_array($key,$this->_parms)) {
$this->Fields[string_filter($key)] = string_filter(urldecode($value));
}
}
}
//设置一些全局参数的值
foreach ($GLOBALS['PubFields'] as $k => $v) $this->Fields[$k] = $v;
//api相关逻辑处理
if ($this->mod == 1 && empty($this->Fields['apikey'])) {
echo json_encode(array(
"code" => -1,
"msg" => "api key is empty",
));
exit;
}
if ($this->mod == 1) {
if (empty($GLOBALS['sign'])) {
echo json_encode(array(
"code" => -1,
"msg" => "sign is empty",
));
exit;
}
//验签算法md5(typeid+timestamp+apikey+PageNo+PageSize)
$sign = md5($this->TypeID.$GLOBALS['timestamp'].$this->Fields['apikey'].$GLOBALS['PageNo'].$GLOBALS['PageSize']);
if ($sign !== $GLOBALS['sign']) {
echo json_encode(array(
"code" => -1,
"msg" => "sign check failed",
));
exit;
}
}
$this->Fields['rsslink'] = $GLOBALS['cfg_cmsurl']."/static/rss/".$this->TypeID.".xml";
//设置环境变量
SetSysEnv($this->TypeID, $this->Fields['typename'], 0, '', 'list');
@@ -104,9 +134,9 @@ class ListView
}//!error
}
//php4构造函数
function ListView($typeid, $uppage = 0)
function ListView($typeid, $uppage = 0, $mod = 0)
{
$this->__construct($typeid, $uppage);
$this->__construct($typeid, $uppage, $mod);
}
//关闭相关资源
function Close()
@@ -148,7 +178,7 @@ class ListView
}
if (isset($_REQUEST['tid'])) {
foreach ($_GET as $key => $value) {
$filtersql .= ($key!="tid" && $key!="TotalResult" && $key!="PageNo") ? " AND $addtable.".string_filter($key)." = '".string_filter(urldecode($value))."'" : '';
$filtersql .= (!in_array($key,$this->_parms)) ? " AND $addtable.".string_filter($key)." = '".string_filter(urldecode($value))."'" : '';
}
}
} else {
@@ -211,36 +241,41 @@ class ListView
$this->TotalResult = 0;
}
}
//初始化列表模板,并统计页面总数
$tempfile = $GLOBALS['cfg_basedir'].$GLOBALS['cfg_templets_dir']."/".$this->TypeLink->TypeInfos['templist'];
$tempfile = str_replace("{tid}", $this->TypeID, $tempfile);
$tempfile = str_replace("{cid}", $this->ChannelUnit->ChannelInfos['nid'], $tempfile);
if (defined('DEDEMOB')) {
$tempfile = str_replace('.htm', '_m.htm', $tempfile);
}
if (!file_exists($tempfile)) {
$tempfile = $GLOBALS['cfg_basedir'].$GLOBALS['cfg_templets_dir']."/".$GLOBALS['cfg_df_style']."/list_default.htm";
if ($this->mod === 0) {
//初始化列表模板,并统计页面总数
$tempfile = $GLOBALS['cfg_basedir'].$GLOBALS['cfg_templets_dir']."/".$this->TypeLink->TypeInfos['templist'];
$tempfile = str_replace("{tid}", $this->TypeID, $tempfile);
$tempfile = str_replace("{cid}", $this->ChannelUnit->ChannelInfos['nid'], $tempfile);
if (defined('DEDEMOB')) {
$tempfile = str_replace('.htm', '_m.htm', $tempfile);
}
}
if (!file_exists($tempfile) || !is_file($tempfile)) {
echo "主题模板文件不存在,无法发布文档";
exit();
}
$this->dtp->LoadTemplate($tempfile);
$ctag = $this->dtp->GetTag("page");
if (!is_object($ctag)) {
$ctag = $this->dtp->GetTag("list");
}
if (!is_object($ctag)) {
$this->pagesize = 30;
} else {
if ($ctag->GetAtt("pagesize") != "") {
$this->pagesize = $ctag->GetAtt("pagesize");
} else {
if (!file_exists($tempfile)) {
$tempfile = $GLOBALS['cfg_basedir'].$GLOBALS['cfg_templets_dir']."/".$GLOBALS['cfg_df_style']."/list_default.htm";
if (defined('DEDEMOB')) {
$tempfile = str_replace('.htm', '_m.htm', $tempfile);
}
}
if (!file_exists($tempfile) || !is_file($tempfile)) {
echo "主题模板文件不存在,无法发布文档";
exit();
}
$this->dtp->LoadTemplate($tempfile);
$ctag = $this->dtp->GetTag("page");
if (!is_object($ctag)) {
$ctag = $this->dtp->GetTag("list");
}
if (!is_object($ctag)) {
$this->pagesize = 30;
} else {
if ($ctag->GetAtt("pagesize") != "") {
$this->pagesize = $ctag->GetAtt("pagesize");
} else {
$this->pagesize = 30;
}
}
} else {
$this->pagesize = isset($GLOBALS['PageSize'])? intval($GLOBALS['PageSize']) : 10;
$this->pagesize = $this->pagesize > 20? 20 : $this->pagesize;
}
$this->TotalPage = ceil($this->TotalResult / $this->pagesize);
}
@@ -325,30 +360,220 @@ class ListView
*/
function Display()
{
if ($this->TypeLink->TypeInfos['ispart'] > 0) {
$this->DisplayPartTemplets();
return;
}
$this->CountRecord();
if ((empty($this->PageNo) || $this->PageNo == 1) && $this->TypeLink->TypeInfos['ispart'] == 1) {
$tmpdir = $GLOBALS['cfg_basedir'].$GLOBALS['cfg_templets_dir'];
$tempfile = str_replace("{tid}", $this->TypeID, $this->Fields['tempindex']);
$tempfile = str_replace("{cid}", $this->ChannelUnit->ChannelInfos['nid'], $tempfile);
$tempfile = $tmpdir."/".$tempfile;
if (defined('DEDEMOB')) {
$tempfile = str_replace('.htm', '_m.htm', $tempfile);
if ($this->mod === 0) {
if ($this->TypeLink->TypeInfos['ispart'] > 0) {
$this->DisplayPartTemplets();
return;
}
if (!file_exists($tempfile)) {
$tempfile = $tmpdir."/".$GLOBALS['cfg_df_style']."/index_default.htm";
$this->CountRecord();
if ((empty($this->PageNo) || $this->PageNo == 1) && $this->TypeLink->TypeInfos['ispart'] == 1) {
$tmpdir = $GLOBALS['cfg_basedir'].$GLOBALS['cfg_templets_dir'];
$tempfile = str_replace("{tid}", $this->TypeID, $this->Fields['tempindex']);
$tempfile = str_replace("{cid}", $this->ChannelUnit->ChannelInfos['nid'], $tempfile);
$tempfile = $tmpdir."/".$tempfile;
if (defined('DEDEMOB')) {
$tempfile = str_replace('.htm', '_m.htm', $tempfile);
}
if (!file_exists($tempfile)) {
$tempfile = $tmpdir."/".$GLOBALS['cfg_df_style']."/index_default.htm";
if (defined('DEDEMOB')) {
$tempfile = str_replace('.htm', '_m.htm', $tempfile);
}
}
$this->dtp->LoadTemplate($tempfile);
}
$this->ParseTempletsFirst();
$this->ParseDMFields($this->PageNo, 0);
$this->dtp->Display();
} else {
$this->CountRecord();
$result = $this->GetAPIList($this->PageNo,$this->pagesize);
if (!is_array($result)) {
echo json_encode(array(
"code" => -1,
"msg" => "none result",
));
} else {
echo json_encode(array(
"code" => 0,
"msg" => "",
"lists" => $result,
"total" => intval($this->TotalResult),
));
}
$this->dtp->LoadTemplate($tempfile);
}
$this->ParseTempletsFirst();
$this->ParseDMFields($this->PageNo, 0);
$this->dtp->Display();
}
/**
* GetAPIList
*
* @param mixed $PageNo 页码
* @param mixed $row 条数
* @param mixed $titlelen 标题字符长度
* @param mixed $infolen 描述字符长度
* @param mixed $orderby 排序
* @param mixed $orderWay 排序方式
* @return array
*/
function GetAPIList($PageNo = 1,$row = 10,$titlelen = 30,$infolen = 250,$orderby = "default",$orderWay = 'desc') {
$limitstart = ($PageNo - 1) * $row;
if ($row == '') $row = 10;
if ($limitstart == '') $limitstart = 0;
if ($titlelen == '') $titlelen = 100;
if ($infolen == '') $infolen = 250;
if ($orderWay == '') $orderWay = 'desc';
if ($orderby == '') {
$orderby = 'default';
} else {
$orderby = strtolower($orderby);
}
//排序方式
$ordersql = '';
if ($orderby == "senddate" || $orderby == "id") {
$ordersql = " ORDER BY arc.id $orderWay";
} else if ($orderby == "hot" || $orderby == "click") {
$ordersql = " ORDER BY arc.click $orderWay";
} else if ($orderby == "lastpost") {
$ordersql = " ORDER BY arc.lastpost $orderWay";
} else {
$ordersql = " ORDER BY arc.sortrank $orderWay";
}
//获得附加表的相关信息
$addtable = $this->ChannelUnit->ChannelInfos['addtable'];
$filtersql = "";
if ($addtable!="")
{
$addJoin = " LEFT JOIN `$addtable` ON arc.id = ".$addtable.'.aid ';
$addField = '';
$fields = explode(',',$this->ChannelUnit->ChannelInfos['listfields']);
foreach($fields as $k=>$v)
{
$nfields[$v] = $k;
}
if (is_array($this->ChannelUnit->ChannelFields) && !empty($this->ChannelUnit->ChannelFields)) {
foreach($this->ChannelUnit->ChannelFields as $k=>$arr)
{
if (isset($nfields[$k])) {
if (!empty($arr['rename'])) {
$addField .= ','.$addtable.'.'.$k.' as '.$arr['rename'];
}
else {
$addField .= ','.$addtable.'.'.$k;
}
}
}
}
//添加联动单筛选
if (isset($_REQUEST['tid'])) {
foreach($_GET as $key => $value)
{
$filtersql .= (!in_array($key,$this->_parms)) ? " AND $addtable.".string_filter($key)." = '".string_filter(urldecode($value))."'" : '';
}
}
} else {
$addField = '';
$addJoin = '';
}
//如果不用默认的sortrank或id排序,使用联合查询数据量大时非常缓慢
if (preg_match('/hot|click|lastpost/', $orderby)) {
$query = "SELECT arc.*,tp.typedir,tp.typename,tp.isdefault,tp.defaultname,tp.namerule,tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath,mb.uname,mb.face $addField FROM `#@__archives` arc LEFT JOIN `#@__arctype` tp ON arc.typeid=tp.id LEFT JOIN `#@__member` mb ON arc.mid=mb.mid $addJoin WHERE {$this->addSql} $filtersql $ordersql LIMIT $limitstart,$row";
}
//普通情况先从arctiny表查出id,然后按di查询速度非常快
else {
$t1 = ExecTime();
$ids = array();
$query = "SELECT id FROM `#@__arctiny` arc $addJoin WHERE {$this->addSql} $filtersql $ordersql LIMIT $limitstart,$row";
$this->dsql->SetQuery($query);
$this->dsql->Execute();
while ($arr = $this->dsql->GetArray()) {
$ids[] = $arr['id'];
}
$idstr = join(',', $ids);
if ($idstr == '') {
return '';
} else {
$query = "SELECT arc.*,tp.typedir,tp.typename,tp.corank,tp.isdefault,tp.defaultname,tp.namerule,tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath,mb.uname,mb.face $addField FROM `#@__archives` arc LEFT JOIN `#@__arctype` tp ON arc.typeid=tp.id LEFT JOIN `#@__member` mb ON arc.mid=mb.mid $addJoin WHERE arc.id in($idstr) $ordersql ";
}
$t2 = ExecTime();
}
$this->dsql->SetQuery($query);
$this->dsql->Execute('al');
$t2 = ExecTime();
$result = array();
$GLOBALS['autoindex'] = 0;
while ($row = $this->dsql->GetArray("al")) {
$GLOBALS['autoindex']++;
$ids[$row['id']] = $row['id'];
//处理一些特殊字段
$row['infos'] = cn_substr($row['description'], $infolen);
$row['id'] = $row['id'];
if ($row['corank'] > 0 && $row['arcrank'] == 0) {
$row['arcrank'] = $row['corank'];
}
$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'],
MfTypedir($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'].'/static/web/img/thumbnail.jpg';
}
/*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']."' title='".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'] = "<span style='color:".$row['color']."'>".$row['title']."</span>";
}
if (preg_match('/c/', $row['flag'])) {
$row['title'] = "".$row['title']."";
}
$row['face'] = empty($row['face'])? $GLOBALS['cfg_mainsite'].'/static/web/img/admin.png' : $row['face'];
$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'];
//编译附加表里的数据
foreach ($row as $k => $v) {
$row[strtolower($k)] = $v;
}
foreach ($this->ChannelUnit->ChannelFields as $k => $arr) {
if (isset($row[$k])) {
$row[$k] = $this->ChannelUnit->MakeField($k, $row[$k]);
}
}
$result[] = $row;
}//if hasRow
$t3 = ExecTime();
$this->dsql->FreeResult('al');
return $result;
}
/**
* 创建单独模板页面
@@ -663,7 +888,7 @@ class ListView
if (isset($_REQUEST['tid'])) {
foreach($_GET as $key => $value)
{
$filtersql .= ($key!="tid" && $key!="TotalResult" && $key!="PageNo") ? " AND $addtable.".string_filter($key)." = '".string_filter(urldecode($value))."'" : '';
$filtersql .= (!in_array($key,$this->_parms)) ? " AND $addtable.".string_filter($key)." = '".string_filter(urldecode($value))."'" : '';
}
}
} else {
@@ -905,12 +1130,12 @@ class ListView
}
$totalpage = ceil($this->TotalResult / $this->pagesize);
if ($totalpage <= 1 && $this->TotalResult > 0) {
return "<li class='d-none d-sm-block page-item disabled'><span class='page-link'>1页".$this->TotalResult."条</span></li>\r\n";
return "<li class='page-item disabled'><span class='page-link'>1页".$this->TotalResult."条</span></li>\r\n";
}
if ($this->TotalResult == 0) {
return "<li class='d-none d-sm-block page-item disabled'><span class='page-link'>0页".$this->TotalResult."条</span></li>\r\n";
return "<li class='page-item disabled'><span class='page-link'>0页".$this->TotalResult."条</span></li>\r\n";
}
$maininfo = "<li class='d-none d-sm-block page-item disabled'><span class='page-link'>{$totalpage}页".$this->TotalResult."条</span></li>\r\n";
$maininfo = "<li class='page-item disabled'><span class='page-link'>{$totalpage}页".$this->TotalResult."条</span></li>\r\n";
$purl = $this->GetCurUrl();
//如果开启为静态,则对规则进行替换
if ($cfg_rewrite == 'Y') {
@@ -924,7 +1149,7 @@ class ListView
//添加联动单筛选
$pageaddurl = "";
foreach($_GET as $key => $value) {
$pageaddurl .= ($key!="tid" && $key!="TotalResult" && $key!="PageNo") ? "&".string_filter($key)."=".string_filter($value) : '';
$pageaddurl .= ($key!="tid" && $key!="TotalResult" && $key!="PageNo" && $key!="PageSize" && $key!="mod") ? "&".string_filter($key)."=".string_filter($value) : '';
}
//获得上一页和下一页的链接
if ($this->PageNo != 1) {


+ 284
- 71
system/archive/listview.m.class.php Целия файл

@@ -1,9 +1,9 @@
<?php
if (!defined('DEDEINC')) exit ('dedebiz');
/**
* 手机端文档列表
* 文档列表
*
* @version $id:listview.m.class.php 10:46 2023年1月10日 xushubieli $
* @version $id:listview.class.php 2 15:15 2010年7月7日 tianya $
* @package DedeBIZ.Libraries
* @copyright Copyright (c) 2022 DedeBIZ.COM
* @license https://www.dedebiz.com/license
@@ -12,7 +12,7 @@ if (!defined('DEDEINC')) exit ('dedebiz');
require_once(DEDEINC.'/archive/partview.class.php');
helper('cache');
@set_time_limit(0);
class ListViewMobile
class ListView
{
var $dsql;
var $dtp;
@@ -34,15 +34,18 @@ class ListViewMobile
var $IsReplace;
var $remoteDir;
var $is_mobile;
var $mod;
var $_parms = array('tid','TotalResult','PageNo','PageSize','mod','timestamp','sign');
/**
* php5构造函数
*
* @access public
* @param int $typeid 栏目id
* @param int $uppage 上一页
* @param int $typeid 栏目id
* @param int $uppage 上一页
* @param int $mod 渲染类型 0:HTML 1:JSON
* @return string
*/
function __construct($typeid, $uppage = 1)
function __construct($typeid, $uppage = 1, $mod = 0)
{
global $dsql, $envs;
$envs['url_type'] = 1;
@@ -60,6 +63,7 @@ class ListViewMobile
$this->upPageType = $uppage;
$this->remoteDir = '';
$this->is_mobile = true;
$this->mod = $mod;
$this->TotalResult = is_numeric($this->TotalResult) ? $this->TotalResult : "";
if (!is_array($this->TypeLink->TypeInfos)) {
$this->IsError = true;
@@ -73,13 +77,39 @@ class ListViewMobile
//添加联动单筛选
if (isset($_REQUEST['tid'])) {
foreach($_GET as $key => $value) {
if ($key!="tid" && $key!="TotalResult" && $key!="PageNo") {
if (!in_array($key,$this->_parms)) {
$this->Fields[string_filter($key)] = string_filter(urldecode($value));
}
}
}
//设置一些全局参数的值
foreach ($GLOBALS['PubFields'] as $k => $v) $this->Fields[$k] = $v;
//api相关逻辑处理
if ($this->mod == 1 && empty($this->Fields['apikey'])) {
echo json_encode(array(
"code" => -1,
"msg" => "api key is empty",
));
exit;
}
if ($this->mod == 1) {
if (empty($GLOBALS['sign'])) {
echo json_encode(array(
"code" => -1,
"msg" => "sign is empty",
));
exit;
}
//验签算法md5(typeid+timestamp+apikey+PageNo+PageSize)
$sign = md5($this->TypeID.$GLOBALS['timestamp'].$this->Fields['apikey'].$GLOBALS['PageNo'].$GLOBALS['PageSize']);
if ($sign !== $GLOBALS['sign']) {
echo json_encode(array(
"code" => -1,
"msg" => "sign check failed",
));
exit;
}
}
$this->Fields['rsslink'] = $GLOBALS['cfg_cmsurl']."/static/rss/".$this->TypeID.".xml";
//设置环境变量
SetSysEnv($this->TypeID, $this->Fields['typename'], 0, '', 'list');
@@ -106,9 +136,9 @@ class ListViewMobile
}//!error
}
//php4构造函数
function ListView($typeid, $uppage = 0)
function ListView($typeid, $uppage = 0, $mod = 0)
{
$this->__construct($typeid, $uppage);
$this->__construct($typeid, $uppage, $mod);
}
//关闭相关资源
function Close()
@@ -150,7 +180,7 @@ class ListViewMobile
}
if (isset($_REQUEST['tid'])) {
foreach ($_GET as $key => $value) {
$filtersql .= ($key!="tid" && $key!="TotalResult" && $key!="PageNo") ? " AND $addtable.".string_filter($key)." = '".string_filter(urldecode($value))."'" : '';
$filtersql .= (!in_array($key,$this->_parms)) ? " AND $addtable.".string_filter($key)." = '".string_filter(urldecode($value))."'" : '';
}
}
} else {
@@ -213,36 +243,41 @@ class ListViewMobile
$this->TotalResult = 0;
}
}
//初始化列表模板,并统计页面总数
$tempfile = $GLOBALS['cfg_basedir'].$GLOBALS['cfg_templets_dir']."/".$this->TypeLink->TypeInfos['templist'];
$tempfile = str_replace("{tid}", $this->TypeID, $tempfile);
$tempfile = str_replace("{cid}", $this->ChannelUnit->ChannelInfos['nid'], $tempfile);
if ($this->is_mobile) {
$tempfile = str_replace('.htm', '_m.htm', $tempfile);
}
if (!file_exists($tempfile)) {
$tempfile = $GLOBALS['cfg_basedir'].$GLOBALS['cfg_templets_dir']."/".$GLOBALS['cfg_df_style']."/list_default.htm";
if ($this->mod === 0) {
//初始化列表模板,并统计页面总数
$tempfile = $GLOBALS['cfg_basedir'].$GLOBALS['cfg_templets_dir']."/".$this->TypeLink->TypeInfos['templist'];
$tempfile = str_replace("{tid}", $this->TypeID, $tempfile);
$tempfile = str_replace("{cid}", $this->ChannelUnit->ChannelInfos['nid'], $tempfile);
if ($this->is_mobile) {
$tempfile = str_replace('.htm', '_m.htm', $tempfile);
}
}
if (!file_exists($tempfile) || !is_file($tempfile)) {
echo "主题模板文件不存在,无法发布文档";
exit();
}
$this->dtp->LoadTemplate($tempfile);
$ctag = $this->dtp->GetTag("page");
if (!is_object($ctag)) {
$ctag = $this->dtp->GetTag("list");
}
if (!is_object($ctag)) {
$this->pagesize = 30;
} else {
if ($ctag->GetAtt("pagesize") != "") {
$this->pagesize = $ctag->GetAtt("pagesize");
} else {
if (!file_exists($tempfile)) {
$tempfile = $GLOBALS['cfg_basedir'].$GLOBALS['cfg_templets_dir']."/".$GLOBALS['cfg_df_style']."/list_default.htm";
if ($this->is_mobile) {
$tempfile = str_replace('.htm', '_m.htm', $tempfile);
}
}
if (!file_exists($tempfile) || !is_file($tempfile)) {
echo "主题模板文件不存在,无法发布文档";
exit();
}
$this->dtp->LoadTemplate($tempfile);
$ctag = $this->dtp->GetTag("page");
if (!is_object($ctag)) {
$ctag = $this->dtp->GetTag("list");
}
if (!is_object($ctag)) {
$this->pagesize = 30;
} else {
if ($ctag->GetAtt("pagesize") != "") {
$this->pagesize = $ctag->GetAtt("pagesize");
} else {
$this->pagesize = 30;
}
}
} else {
$this->pagesize = isset($GLOBALS['PageSize'])? intval($GLOBALS['PageSize']) : 10;
$this->pagesize = $this->pagesize > 20? 20 : $this->pagesize;
}
$this->TotalPage = ceil($this->TotalResult / $this->pagesize);
}
@@ -257,14 +292,13 @@ class ListViewMobile
*/
function MakeHtml($startpage = 1, $makepagesize = 0, $isremote = 0)
{
global $dedebiz_path, $dedebiz_typerule, $dedebiz_usetype;
if (empty($startpage)) {
$startpage = 1;
}
//创建封面模板文件
if ($this->TypeLink->TypeInfos['isdefault'] == -1) {
echo '这个是动态栏目';
return '../m/list.php?tid='.$this->TypeLink->TypeInfos['id'];
return '../apps/list.php?tid='.$this->TypeLink->TypeInfos['id'];
}
//单独页面
else if ($this->TypeLink->TypeInfos['ispart'] > 0) {
@@ -278,17 +312,6 @@ class ListViewMobile
if ($totalpage == 0) {
$totalpage = 1;
}
//栏目规则
$dedebiz_path = rtrim($dedebiz_path,'/') ? rtrim($dedebiz_path,'/') : '/m';
if ($dedebiz_usetype==0 && $dedebiz_typerule) {
$typedir = str_replace("{cmspath}","",$this->Fields['typedir']);
$this->Fields['typedir'] = '{cmspath}'.$dedebiz_path.$typedir;
$this->Fields['typedir'] = substr($this->Fields['typedir'],0,9).$dedebiz_path.substr($this->Fields['typedir'],9);
$this->Fields['namerule2'] = $dedebiz_typerule;
} else {
$typedir = str_replace("{cmspath}","",$this->Fields['typedir']);
$this->Fields['typedir'] = '{cmspath}'.$dedebiz_path.$typedir;
}
CreateDir(MfTypedir($this->Fields['typedir']));
$murl = '';
if ($makepagesize > 0) {
@@ -339,30 +362,220 @@ class ListViewMobile
*/
function Display()
{
if ($this->TypeLink->TypeInfos['ispart'] > 0) {
$this->DisplayPartTemplets();
return;
}
$this->CountRecord();
if ((empty($this->PageNo) || $this->PageNo == 1) && $this->TypeLink->TypeInfos['ispart'] == 1) {
$tmpdir = $GLOBALS['cfg_basedir'].$GLOBALS['cfg_templets_dir'];
$tempfile = str_replace("{tid}", $this->TypeID, $this->Fields['tempindex']);
$tempfile = str_replace("{cid}", $this->ChannelUnit->ChannelInfos['nid'], $tempfile);
$tempfile = $tmpdir."/".$tempfile;
if ($this->is_mobile) {
$tempfile = str_replace('.htm', '_m.htm', $tempfile);
if ($this->mod === 0) {
if ($this->TypeLink->TypeInfos['ispart'] > 0) {
$this->DisplayPartTemplets();
return;
}
if (!file_exists($tempfile)) {
$tempfile = $tmpdir."/".$GLOBALS['cfg_df_style']."/index_default.htm";
$this->CountRecord();
if ((empty($this->PageNo) || $this->PageNo == 1) && $this->TypeLink->TypeInfos['ispart'] == 1) {
$tmpdir = $GLOBALS['cfg_basedir'].$GLOBALS['cfg_templets_dir'];
$tempfile = str_replace("{tid}", $this->TypeID, $this->Fields['tempindex']);
$tempfile = str_replace("{cid}", $this->ChannelUnit->ChannelInfos['nid'], $tempfile);
$tempfile = $tmpdir."/".$tempfile;
if ($this->is_mobile) {
$tempfile = str_replace('.htm', '_m.htm', $tempfile);
}
if (!file_exists($tempfile)) {
$tempfile = $tmpdir."/".$GLOBALS['cfg_df_style']."/index_default.htm";
if ($this->is_mobile) {
$tempfile = str_replace('.htm', '_m.htm', $tempfile);
}
}
$this->dtp->LoadTemplate($tempfile);
}
$this->ParseTempletsFirst();
$this->ParseDMFields($this->PageNo, 0);
$this->dtp->Display();
} else {
$this->CountRecord();
$result = $this->GetAPIList($this->PageNo,$this->pagesize);
if (!is_array($result)) {
echo json_encode(array(
"code" => -1,
"msg" => "none result",
));
} else {
echo json_encode(array(
"code" => 0,
"msg" => "",
"lists" => $result,
"total" => intval($this->TotalResult),
));
}
$this->dtp->LoadTemplate($tempfile);
}
$this->ParseTempletsFirst();
$this->ParseDMFields($this->PageNo, 0);
$this->dtp->Display();
}
/**
* GetAPIList
*
* @param mixed $PageNo 页码
* @param mixed $row 条数
* @param mixed $titlelen 标题字符长度
* @param mixed $infolen 描述字符长度
* @param mixed $orderby 排序
* @param mixed $orderWay 排序方式
* @return array
*/
function GetAPIList($PageNo = 1,$row = 10,$titlelen = 30,$infolen = 250,$orderby = "default",$orderWay = 'desc') {
$limitstart = ($PageNo - 1) * $row;
if ($row == '') $row = 10;
if ($limitstart == '') $limitstart = 0;
if ($titlelen == '') $titlelen = 100;
if ($infolen == '') $infolen = 250;
if ($orderWay == '') $orderWay = 'desc';
if ($orderby == '') {
$orderby = 'default';
} else {
$orderby = strtolower($orderby);
}
//排序方式
$ordersql = '';
if ($orderby == "senddate" || $orderby == "id") {
$ordersql = " ORDER BY arc.id $orderWay";
} else if ($orderby == "hot" || $orderby == "click") {
$ordersql = " ORDER BY arc.click $orderWay";
} else if ($orderby == "lastpost") {
$ordersql = " ORDER BY arc.lastpost $orderWay";
} else {
$ordersql = " ORDER BY arc.sortrank $orderWay";
}
//获得附加表的相关信息
$addtable = $this->ChannelUnit->ChannelInfos['addtable'];
$filtersql = "";
if ($addtable!="")
{
$addJoin = " LEFT JOIN `$addtable` ON arc.id = ".$addtable.'.aid ';
$addField = '';
$fields = explode(',',$this->ChannelUnit->ChannelInfos['listfields']);
foreach($fields as $k=>$v)
{
$nfields[$v] = $k;
}
if (is_array($this->ChannelUnit->ChannelFields) && !empty($this->ChannelUnit->ChannelFields)) {
foreach($this->ChannelUnit->ChannelFields as $k=>$arr)
{
if (isset($nfields[$k])) {
if (!empty($arr['rename'])) {
$addField .= ','.$addtable.'.'.$k.' as '.$arr['rename'];
}
else {
$addField .= ','.$addtable.'.'.$k;
}
}
}
}
//添加联动单筛选
if (isset($_REQUEST['tid'])) {
foreach($_GET as $key => $value)
{
$filtersql .= (!in_array($key,$this->_parms)) ? " AND $addtable.".string_filter($key)." = '".string_filter(urldecode($value))."'" : '';
}
}
} else {
$addField = '';
$addJoin = '';
}
//如果不用默认的sortrank或id排序,使用联合查询数据量大时非常缓慢
if (preg_match('/hot|click|lastpost/', $orderby)) {
$query = "SELECT arc.*,tp.typedir,tp.typename,tp.isdefault,tp.defaultname,tp.namerule,tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath,mb.uname,mb.face $addField FROM `#@__archives` arc LEFT JOIN `#@__arctype` tp ON arc.typeid=tp.id LEFT JOIN `#@__member` mb ON arc.mid=mb.mid $addJoin WHERE {$this->addSql} $filtersql $ordersql LIMIT $limitstart,$row";
}
//普通情况先从arctiny表查出id,然后按di查询速度非常快
else {
$t1 = ExecTime();
$ids = array();
$query = "SELECT id FROM `#@__arctiny` arc $addJoin WHERE {$this->addSql} $filtersql $ordersql LIMIT $limitstart,$row";
$this->dsql->SetQuery($query);
$this->dsql->Execute();
while ($arr = $this->dsql->GetArray()) {
$ids[] = $arr['id'];
}
$idstr = join(',', $ids);
if ($idstr == '') {
return '';
} else {
$query = "SELECT arc.*,tp.typedir,tp.typename,tp.corank,tp.isdefault,tp.defaultname,tp.namerule,tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath,mb.uname,mb.face $addField FROM `#@__archives` arc LEFT JOIN `#@__arctype` tp ON arc.typeid=tp.id LEFT JOIN `#@__member` mb ON arc.mid=mb.mid $addJoin WHERE arc.id in($idstr) $ordersql ";
}
$t2 = ExecTime();
}
$this->dsql->SetQuery($query);
$this->dsql->Execute('al');
$t2 = ExecTime();
$result = array();
$GLOBALS['autoindex'] = 0;
while ($row = $this->dsql->GetArray("al")) {
$GLOBALS['autoindex']++;
$ids[$row['id']] = $row['id'];
//处理一些特殊字段
$row['infos'] = cn_substr($row['description'], $infolen);
$row['id'] = $row['id'];
if ($row['corank'] > 0 && $row['arcrank'] == 0) {
$row['arcrank'] = $row['corank'];
}
$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'],
MfTypedir($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'].'/static/web/img/thumbnail.jpg';
}
/*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']."' title='".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'] = "<span style='color:".$row['color']."'>".$row['title']."</span>";
}
if (preg_match('/c/', $row['flag'])) {
$row['title'] = "".$row['title']."";
}
$row['face'] = empty($row['face'])? $GLOBALS['cfg_mainsite'].'/static/web/img/admin.png' : $row['face'];
$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'];
//编译附加表里的数据
foreach ($row as $k => $v) {
$row[strtolower($k)] = $v;
}
foreach ($this->ChannelUnit->ChannelFields as $k => $arr) {
if (isset($row[$k])) {
$row[$k] = $this->ChannelUnit->MakeField($k, $row[$k]);
}
}
$result[] = $row;
}//if hasRow
$t3 = ExecTime();
$this->dsql->FreeResult('al');
return $result;
}
/**
* 创建单独模板页面
@@ -689,7 +902,7 @@ class ListViewMobile
if (isset($_REQUEST['tid'])) {
foreach($_GET as $key => $value)
{
$filtersql .= ($key!="tid" && $key!="TotalResult" && $key!="PageNo") ? " AND $addtable.".string_filter($key)." = '".string_filter(urldecode($value))."'" : '';
$filtersql .= (!in_array($key,$this->_parms)) ? " AND $addtable.".string_filter($key)." = '".string_filter(urldecode($value))."'" : '';
}
}
} else {
@@ -931,12 +1144,12 @@ class ListViewMobile
}
$totalpage = ceil($this->TotalResult / $this->pagesize);
if ($totalpage <= 1 && $this->TotalResult > 0) {
return "<li class='d-none d-sm-block page-item disabled'><span class='page-link'>1页".$this->TotalResult."条</span></li>\r\n";
return "<li class='page-item disabled'><span class='page-link'>1页".$this->TotalResult."条</span></li>\r\n";
}
if ($this->TotalResult == 0) {
return "<li class='d-none d-sm-block page-item disabled'><span class='page-link'>0页".$this->TotalResult."条</span></li>\r\n";
return "<li class='page-item disabled'><span class='page-link'>0页".$this->TotalResult."条</span></li>\r\n";
}
$maininfo = "<li class='d-none d-sm-block page-item disabled'><span class='page-link'>{$totalpage}页".$this->TotalResult."条</span></li>\r\n";
$maininfo = "<li class='page-item disabled'><span class='page-link'>{$totalpage}页".$this->TotalResult."条</span></li>\r\n";
$purl = $this->GetCurUrl();
//如果开启为静态,则对规则进行替换
if ($cfg_rewrite == 'Y') {
@@ -950,7 +1163,7 @@ class ListViewMobile
//添加联动单筛选
$pageaddurl = "";
foreach($_GET as $key => $value) {
$pageaddurl .= ($key!="tid" && $key!="TotalResult" && $key!="PageNo") ? "&".string_filter($key)."=".string_filter($value) : '';
$pageaddurl .= ($key!="tid" && $key!="TotalResult" && $key!="PageNo" && $key!="PageSize" && $key!="mod") ? "&".string_filter($key)."=".string_filter($value) : '';
}
//获得上一页和下一页的链接
if ($this->PageNo != 1) {


+ 1
- 1
system/archive/searchview.class.php Целия файл

@@ -531,7 +531,7 @@ class SearchView
$this->dsql->Execute("al");
$artlist = "";
if ($col > 1) {
$artlist = "<table width='$tablewidth' cellspacing='0' cellpadding='0'>\r\n";
$artlist = "<table width='$tablewidth'>\r\n";
}
$this->dtp2->LoadSource($innertext);
for ($i = 0; $i < $row; $i++) {


+ 211
- 37
system/archive/sglistview.class.php Целия файл

@@ -9,8 +9,8 @@ if (!defined('DEDEINC')) exit ('dedebiz');
* @license https://www.dedebiz.com/license
* @link https://www.dedebiz.com
*/
@set_time_limit(0);
require_once(DEDEINC."/archive/partview.class.php");
@set_time_limit(0);
class SgListView
{
var $dsql;
@@ -34,15 +34,17 @@ class SgListView
var $ListFields;
var $searchArr;
var $sAddTable;
var $mod;
/**
* php5构造函数
*
* @access public
* @param int $typeid 栏目id
* @param int $typeid 栏目id
* @param array $searchArr 检索数组
* @param int $mod 渲染类型 0:HTML 1:JSON
* @return void
*/
function __construct($typeid, $searchArr = array())
function __construct($typeid, $searchArr = array(), $mod = 0)
{
global $dsql, $envs;
$envs['url_type'] = 1;
@@ -59,6 +61,7 @@ class SgListView
$this->dtp2->SetNameSpace("field", "[", "]");
$this->TypeLink = new TypeLink($typeid);
$this->searchArr = $searchArr;
$this->mod = $mod;
if (!is_array($this->TypeLink->TypeInfos)) {
$this->IsError = true;
}
@@ -75,6 +78,32 @@ class SgListView
//设置一些全局参数的值
foreach ($GLOBALS['PubFields'] as $k => $v) $this->Fields[$k] = $v;
$this->Fields['rsslink'] = $GLOBALS['cfg_cmsurl']."/static/rss/".$this->TypeID.".xml";
//api相关逻辑处理
if ($this->mod == 1 && empty($this->Fields['apikey'])) {
echo json_encode(array(
"code" => -1,
"msg" => "api key is empty",
));
exit;
}
if ($this->mod == 1) {
if (empty($GLOBALS['sign'])) {
echo json_encode(array(
"code" => -1,
"msg" => "sign is empty",
));
exit;
}
//验签算法md5(typeid+timestamp+apikey+PageNo+PageSize)
$sign = md5($this->TypeID.$GLOBALS['timestamp'].$this->Fields['apikey'].$GLOBALS['PageNo'].$GLOBALS['PageSize']);
if ($sign !== $GLOBALS['sign']) {
echo json_encode(array(
"code" => -1,
"msg" => "sign check failed",
));
exit;
}
}
//设置环境变量
SetSysEnv($this->TypeID, $this->Fields['typename'], 0, '', 'list');
$this->Fields['typeid'] = $this->TypeID;
@@ -100,9 +129,9 @@ class SgListView
} //!error
}
//php4构造函数
function SgListView($typeid, $searchArr = array())
function SgListView($typeid, $searchArr = array(), $mod = 0)
{
$this->__construct($typeid, $searchArr);
$this->__construct($typeid, $searchArr, $mod);
}
//关闭相关资源
function Close()
@@ -171,36 +200,41 @@ class SgListView
$this->TotalResult = 0;
}
}
//初始化列表模板,并统计页面总数
$tempfile = $GLOBALS['cfg_basedir'].$GLOBALS['cfg_templets_dir']."/".$this->TypeLink->TypeInfos['templist'];
$tempfile = str_replace("{tid}", $this->TypeID, $tempfile);
$tempfile = str_replace("{cid}", $this->ChannelUnit->ChannelInfos['nid'], $tempfile);
if (defined('DEDEMOB')) {
$tempfile = str_replace('.htm', '_m.htm', $tempfile);
}
if (!file_exists($tempfile)) {
$tempfile = $GLOBALS['cfg_basedir'].$GLOBALS['cfg_templets_dir']."/".$GLOBALS['cfg_df_style']."/list_default_sg.htm";
if ($this->mod === 0) {
//初始化列表模板,并统计页面总数
$tempfile = $GLOBALS['cfg_basedir'].$GLOBALS['cfg_templets_dir']."/".$this->TypeLink->TypeInfos['templist'];
$tempfile = str_replace("{tid}", $this->TypeID, $tempfile);
$tempfile = str_replace("{cid}", $this->ChannelUnit->ChannelInfos['nid'], $tempfile);
if (defined('DEDEMOB')) {
$tempfile = str_replace('.htm', '_m.htm', $tempfile);
}
}
if (!file_exists($tempfile) || !is_file($tempfile)) {
echo "主题模板文件不存在,无法发布文档";
exit();
}
$this->dtp->LoadTemplate($tempfile);
$ctag = $this->dtp->GetTag("page");
if (!is_object($ctag)) {
$ctag = $this->dtp->GetTag("list");
}
if (!is_object($ctag)) {
$this->pagesize = 20;
} else {
if ($ctag->GetAtt('pagesize') != '') {
$this->pagesize = $ctag->GetAtt('pagesize');
} else {
if (!file_exists($tempfile)) {
$tempfile = $GLOBALS['cfg_basedir'].$GLOBALS['cfg_templets_dir']."/".$GLOBALS['cfg_df_style']."/list_default_sg.htm";
if (defined('DEDEMOB')) {
$tempfile = str_replace('.htm', '_m.htm', $tempfile);
}
}
if (!file_exists($tempfile) || !is_file($tempfile)) {
echo "主题模板文件不存在,无法发布文档";
exit();
}
$this->dtp->LoadTemplate($tempfile);
$ctag = $this->dtp->GetTag("page");
if (!is_object($ctag)) {
$ctag = $this->dtp->GetTag("list");
}
if (!is_object($ctag)) {
$this->pagesize = 20;
} else {
if ($ctag->GetAtt('pagesize') != '') {
$this->pagesize = $ctag->GetAtt('pagesize');
} else {
$this->pagesize = 20;
}
}
} else {
$this->pagesize = isset($GLOBALS['PageSize'])? intval($GLOBALS['PageSize']) : 10;
$this->pagesize = $this->pagesize > 20? 20 : $this->pagesize;
}
$this->TotalPage = ceil($this->TotalResult / $this->pagesize);
}
@@ -287,14 +321,154 @@ class SgListView
*/
function Display()
{
if ($this->TypeLink->TypeInfos['ispart'] > 0 && count($this->searchArr) == 0) {
$this->DisplayPartTemplets();
return;
if ($this->mod === 0) {
if ($this->TypeLink->TypeInfos['ispart'] > 0 && count($this->searchArr) == 0) {
$this->DisplayPartTemplets();
return;
}
$this->CountRecord();
$this->ParseTempletsFirst();
$this->ParseDMFields($this->PageNo, 0);
$this->dtp->Display();
} else {
$this->CountRecord();
$result = $this->GetAPIList($this->PageNo,$this->pagesize);
if (!is_array($result)) {
echo json_encode(array(
"code" => -1,
"msg" => "none result",
));
} else {
echo json_encode(array(
"code" => 0,
"msg" => "",
"lists" => $result,
"total" => intval($this->TotalResult),
));
}
}
$this->CountRecord();
$this->ParseTempletsFirst();
$this->ParseDMFields($this->PageNo, 0);
$this->dtp->Display();
}
/**
* GetAPIList
*
* @param mixed $PageNo 页码
* @param mixed $row 行数
* @param mixed $titlelen 标题宽度
* @param mixed $orderby 排序
* @param mixed $orderWay 排序方式
* @return void
*/
function GetAPIList($PageNo, $row = 10, $titlelen = 30, $orderby = "default", $orderWay = 'desc')
{
$limitstart = ($PageNo - 1) * $row;
if ($titlelen == '') $titlelen = 100;
if ($orderby == '') $orderby = 'id';
else $orderby = strtolower($orderby);
if ($orderWay == '') $orderWay = 'desc';
//排序方式
$ordersql = '';
if ($orderby == 'senddate' || $orderby == 'id') {
$ordersql = " ORDER BY arc.aid $orderWay";
} else if ($orderby == 'hot' || $orderby == 'click') {
$ordersql = " ORDER BY arc.click $orderWay";
} else {
$ordersql = " ORDER BY arc.aid $orderWay";
}
$addField = 'arc.'.join(',arc.', $this->ListFields);
//如果不用默认的sortrank或id排序,使用联合查询数据量大时非常缓慢
if (preg_match('/hot|click/', $orderby) || $this->sAddTable) {
$query = "SELECT tp.typedir,tp.typename,tp.isdefault,tp.defaultname,tp.namerule,tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath,arc.aid,arc.aid AS id,arc.typeid,mb.uname,mb.face,$addField FROM `{$this->AddTable}` arc LEFT JOIN `#@__arctype` tp ON arc.typeid=tp.id LEFT JOIN `#@__member` mb on arc.mid = mb.mid WHERE {$this->addSql} $ordersql LIMIT $limitstart,$row";
}
//普通情况先从arctiny表查出id,然后按id查询速度非常快
else {
$t1 = ExecTime();
$ids = array();
$nordersql = str_replace('.aid', '.id', $ordersql);
$query = "SELECT id FROM `#@__arctiny` arc WHERE {$this->addSql} $nordersql LIMIT $limitstart,$row";
$this->dsql->SetQuery($query);
$this->dsql->Execute();
while ($arr = $this->dsql->GetArray()) {
$ids[] = $arr['id'];
}
$idstr = join(',', $ids);
if ($idstr == '') {
return '';
} else {
$query = "SELECT tp.typedir,tp.typename,tp.isdefault,tp.defaultname,tp.namerule,tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath,arc.aid,arc.aid AS id,arc.typeid,mb.uname,mb.face,$addField FROM `{$this->AddTable}` arc LEFT JOIN `#@__arctype` tp ON arc.typeid=tp.id LEFT JOIN `#@__member` mb on arc.mid = mb.mid WHERE arc.aid IN($idstr) AND arc.arcrank >-1 $ordersql";
}
$t2 = ExecTime();
}
$this->dsql->SetQuery($query);
$this->dsql->Execute('al');
$t2 = ExecTime();
$GLOBALS['autoindex'] = 0;
$result = array();
while ($row = $this->dsql->GetArray("al")) {
$GLOBALS['autoindex']++;
$ids[$row['aid']] = $row['id'] = $row['aid'];
//处理一些特殊字段
$row['ismake'] = 1;
$row['money'] = 0;
$row['arcrank'] = 0;
$row['filename'] = '';
$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'],
MfTypedir($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'].'/static/web/img/thumbnail.jpg';
}
if (!preg_match("/^http:\/\//", $row['litpic']) && $GLOBALS['cfg_multi_site'] == 'Y') {
$row['litpic'] = $GLOBALS['cfg_mainsite'].$row['litpic'];
}
$row['picname'] = $row['litpic'];
$row['pubdate'] = $row['senddate'];
$row['stime'] = GetDateMK($row['pubdate']);
$row['typelink'] = "<a href='".$row['typeurl']."'>".$row['typename']."</a>";
$row['fulltitle'] = $row['title'];
$row['title'] = cn_substr($row['title'], $titlelen);
if (preg_match('/b/', $row['flag'])) {
$row['title'] = "".$row['title']."";
}
$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'];
$row['face'] = empty($row['face'])? $GLOBALS['cfg_mainsite'].'/static/web/img/admin.png' : $row['face'];
//编译附加表里的数据
foreach ($row as $k => $v) $row[strtolower($k)] = $v;
foreach ($this->ChannelUnit->ChannelFields as $k => $arr) {
if (isset($row[$k])) {
$row[$k] = $this->ChannelUnit->MakeField($k, $row[$k]);
}
}
$result[] = $row;
} //if hasRow
$t3 = ExecTime();
$this->dsql->FreeResult('al');
return $result;
}
/**
* 创建单独模板页面


Loading…
Отказ
Запис