From 99e596dbfd335cb6a2f6597794e6a532dfcb2e94 Mon Sep 17 00:00:00 2001 From: xushubieli Date: Fri, 31 Dec 2021 17:07:58 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dphp=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E6=96=87=E6=A1=A3=E5=86=85=E9=93=BE=E9=97=AE=E9=A2=98=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=A2=9E=E5=BC=BA=E6=96=87=E7=AB=A0=E4=B8=8A=E9=A1=B5?= =?UTF-8?q?=E4=B8=8B=E9=A1=B5=E5=92=8C=E5=9B=BE=E7=89=87=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/include/arc.archives.class.php | 177 ++++++++++++++++------------- 1 file changed, 95 insertions(+), 82 deletions(-) diff --git a/src/include/arc.archives.class.php b/src/include/arc.archives.class.php index a1293d6d..67d1d660 100755 --- a/src/include/arc.archives.class.php +++ b/src/include/arc.archives.class.php @@ -12,7 +12,6 @@ if (!defined('DEDEINC')) exit("Request Error!"); require_once(DEDEINC . "/typelink.class.php"); require_once(DEDEINC . "/channelunit.class.php"); require_once(DEDEINC . "/downmix.inc.php"); - @set_time_limit(0); /** * 主文档类(Archives类) @@ -42,7 +41,6 @@ class Archives var $PreNext; var $addTableRow; var $remoteDir; - /** * php5构造函数 * @@ -56,7 +54,6 @@ class Archives $this->IsError = FALSE; $this->ArcID = $aid; $this->PreNext = array(); - $this->dsql = $dsql; $query = "SELECT channel,typeid FROM `#@__arctiny` WHERE id='$aid' "; $arr = $this->dsql->GetOne($query); @@ -67,12 +64,12 @@ class Archives $this->ChannelUnit = new ChannelUnit($arr['channel'], $aid); $this->TypeLink = new TypeLink($arr['typeid']); if ($this->ChannelUnit->ChannelInfos['issystem'] != -1) { - // 如果当前文档不是系统模型,为单表模型 + // 如果当前文档不是系统模型,为单表模型 $query = "SELECT arc.*,tp.reid,tp.typedir,ch.addtable - FROM `#@__archives` arc - LEFT JOIN #@__arctype tp on tp.id=arc.typeid - LEFT JOIN #@__channeltype as ch on arc.channel = ch.id - WHERE arc.id='$aid' "; + FROM `#@__archives` arc + LEFT JOIN #@__arctype tp on tp.id=arc.typeid + LEFT JOIN #@__channeltype as ch on arc.channel = ch.id + WHERE arc.id='$aid' "; $this->Fields = $this->dsql->GetOne($query); } else { $this->Fields['title'] = ''; @@ -81,11 +78,9 @@ class Archives $this->Fields['ismake'] = 1; $this->Fields['filename'] = ''; } - if ($this->TypeLink->TypeInfos['corank'] > 0 && $this->Fields['arcrank'] == 0) { $this->Fields['arcrank'] = $this->TypeLink->TypeInfos['corank']; } - $this->Fields['tags'] = GetTags($aid); $this->dtp = new DedeTagParse(); $this->dtp->SetRefObj($this); @@ -102,24 +97,20 @@ class Archives } else { $this->NowPage = $GLOBALS['pageno']; } - //特殊的字段数据处理 $this->Fields['aid'] = $aid; $this->Fields['id'] = $aid; $this->Fields['position'] = $this->TypeLink->GetPositionLink(TRUE); $this->Fields['typeid'] = $arr['typeid']; - //设置一些全局参数的值 foreach ($GLOBALS['PubFields'] as $k => $v) { $this->Fields[$k] = $v; } - //为了减少重复查询,这里直接把附加表查询记录放在 $this->addTableRow 中,在 ParAddTable() 不再查询 if ($this->ChannelUnit->ChannelInfos['addtable'] != '') { $query = "SELECT * FROM `{$this->ChannelUnit->ChannelInfos['addtable']}` WHERE `aid` = '$aid'"; $this->addTableRow = $this->dsql->GetOne($query); } - //issystem==-1 表示单表模型,单表模型不支持redirecturl这类参数,因此限定内容普通模型才进行下面查询 if ($this->ChannelUnit->ChannelInfos['addtable'] != '' && $this->ChannelUnit->ChannelInfos['issystem'] != -1) { if (is_array($this->addTableRow)) { @@ -135,13 +126,11 @@ class Archives } } //!error } - //php4构造函数 function Archives($aid) { $this->__construct($aid); } - /** * 解析附加表的内容 * @@ -162,7 +151,6 @@ class Archives $this->Fields['money'] = 0; $this->Fields['filename'] = ''; } - if (is_array($row)) { foreach ($row as $k => $v) $row[strtolower($k)] = $v; } @@ -204,10 +192,19 @@ class Archives //设置全局环境变量 $this->Fields['typename'] = $this->TypeLink->TypeInfos['typename']; @SetSysEnv($this->Fields['typeid'], $this->Fields['typename'], $this->Fields['id'], $this->Fields['title'], 'archives'); + //文章的图片注释替换为标题 + $this->Fields['body'] = str_ireplace(array('alt=""','alt=\'\''),'',$this->Fields['body']); + $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("Fields['title']."\" title=\"".$this->Fields['title']."\" style=\"margin:20px 0;box-shadow:0 1px 2px rgba(0,0,0,.1)\"",$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("Fields['title']."\" title=\"".$this->Fields['title']."\" ",$this->Fields['imgurls']); + //去掉文章图片的宽度和高度 + $this->Fields['body'] = preg_replace("/style=\"width\:(.*)\"/","",$this->Fields['body']); } //完成附加表信息读取 unset($row); - //处理要分页显示的字段 $this->SplitTitles = array(); if ($this->SplitPageField != '' && $GLOBALS['cfg_arcsptitle'] = 'Y' @@ -235,7 +232,6 @@ class Archives $this->TotalPage = count($this->SplitFields); $this->Fields['totalpage'] = $this->TotalPage; } - //处理默认缩略图等 if (isset($this->Fields['litpic'])) { if ($this->Fields['litpic'] == '-' || $this->Fields['litpic'] == '') { @@ -245,7 +241,6 @@ class Archives $this->Fields['litpic'] = $GLOBALS['cfg_mainsite'] . $this->Fields['litpic']; } $this->Fields['picname'] = $this->Fields['litpic']; - //模板里直接使用{dede:field name='image'/}获取缩略图 $this->Fields['image'] = (!preg_match('/jpg|gif|png/i', $this->Fields['picname']) ? '' : ""); } @@ -258,7 +253,6 @@ class Archives $this->Fields['vote'] = ""; } } - if (isset($this->Fields['goodpost']) && isset($this->Fields['badpost'])) { //digg if ($this->Fields['goodpost'] + $this->Fields['badpost'] == 0) { @@ -269,7 +263,6 @@ class Archives } } } - //获得当前字段参数 function GetCurTag($fieldname) { @@ -285,7 +278,6 @@ class Archives } return ''; } - /** * 生成静态HTML * @@ -311,7 +303,6 @@ class Archives $this->Fields['ismake'] = empty($this->Fields['ismake']) ? 0 : $this->Fields['ismake']; $this->Fields['money'] = empty($this->Fields['money']) ? 0 : $this->Fields['money']; $this->Fields['filename'] = empty($this->Fields['filename']) ? '' : $this->Fields['filename']; - //分析要创建的文件名称 $filename = GetFileNewName( $this->ArcID, @@ -325,7 +316,6 @@ class Archives $this->Fields['money'], $this->Fields['filename'] ); - $filenames = explode(".", $filename); $this->ShortName = $filenames[count($filenames) - 1]; if ($this->ShortName == '') $this->ShortName = 'html'; @@ -336,7 +326,6 @@ class Archives if ($this->NameFirst == '') { $this->NameFirst = $this->arcID; } - //获得当前文档的全名 $filenameFull = GetFileUrl( $this->ArcID, @@ -354,12 +343,9 @@ class Archives $this->TypeLink->TypeInfos['sitepath'] ); $this->Fields['arcurl'] = $this->Fields['fullname'] = $filenameFull; - //对于已设置不生成HTML的文章直接返回网址 if ( - $this->Fields['ismake'] == -1 || $this->Fields['arcrank'] != 0 || $this->Fields['money'] > 0 - || ($this->Fields['typeid'] == 0 && $this->Fields['channel'] != -1) - ) { + $this->Fields['ismake'] == -1 || $this->Fields['arcrank'] != 0 || $this->Fields['money'] > 0 || ($this->Fields['typeid'] == 0 && $this->Fields['channel'] != -1)) { return $this->GetTrueUrl($filename); } //循环生成HTML文件 @@ -385,7 +371,6 @@ class Archives $this->dsql->ExecuteNoneQuery("Update `#@__archives` SET ismake=1 WHERE id='" . $this->ArcID . "'"); return $this->GetTrueUrl($filename); } - /** * 获得真实连接路径 * @@ -411,7 +396,6 @@ class Archives $this->TypeLink->TypeInfos['sitepath'] ); } - /** * 获得站点的真实根路径 * @@ -423,7 +407,6 @@ class Archives $TRUEpath = $GLOBALS["cfg_basedir"]; return $TRUEpath; } - /** * 获得指定键值的字段 * @@ -454,7 +437,6 @@ class Archives } return ''; } - /** * 获得模板文件位置 * @@ -494,7 +476,6 @@ class Archives if (!preg_match("#.htm$#", $tmpfile)) return FALSE; return $tmpfile; } - /** * 动态输出结果 * @@ -512,16 +493,14 @@ class Archives //预编译 $this->LoadTemplet(); $this->ParAddTable(); - $this->ParseTempletsFirst(); - //跳转网址 $this->Fields['flag'] = empty($this->Fields['flag']) ? "" : $this->Fields['flag']; if (preg_match("#j#", $this->Fields['flag']) && $this->Fields['redirecturl'] != '') { if ($GLOBALS['cfg_jump_once'] == 'N') { $pageHtml = "\r\n\r\n\r\n" . $this->Fields['title'] . "\r\n"; $pageHtml .= "Fields['redirecturl'] . "\">\r\n\r\n\r\n"; - $pageHtml .= "现在正在转向:" . $this->Fields['title'] . ",请稍候...

\r\n转向内容简介:" . $this->Fields['description'] . "\r\n\r\n\r\n"; + $pageHtml .= "现在正在转向:" . $this->Fields['title'] . ",请稍候...

\r\n转向内容简介:" . $this->Fields['description'] . "\r\n\r\n\r\n"; echo $pageHtml; } else { header("location:{$this->Fields['redirecturl']}"); @@ -532,7 +511,6 @@ class Archives $this->ParseDMFields($pageCount, 0); $this->dtp->display(); } - /** * 载入模板 * @@ -554,7 +532,6 @@ class Archives $this->dtp->LoadSource($this->TempSource); } } - /** * 解析模板,对固定的标记进行初始给值 * @@ -566,36 +543,25 @@ class Archives if (empty($this->Fields['keywords'])) { $this->Fields['keywords'] = ''; } - if (empty($this->Fields['reid'])) { $this->Fields['reid'] = 0; } - $GLOBALS['envs']['tags'] = $this->Fields['tags']; if (isset($this->TypeLink->TypeInfos['reid'])) { $GLOBALS['envs']['reid'] = $this->TypeLink->TypeInfos['reid']; } - $GLOBALS['envs']['keyword'] = $this->Fields['keywords']; - $GLOBALS['envs']['typeid'] = $this->Fields['typeid']; - $GLOBALS['envs']['topid'] = GetTopid($this->Fields['typeid']); - $GLOBALS['envs']['aid'] = $GLOBALS['envs']['id'] = $this->Fields['id']; - $GLOBALS['envs']['adminid'] = $GLOBALS['envs']['mid'] = isset($this->Fields['mid']) ? $this->Fields['mid'] : 1; - $GLOBALS['envs']['channelid'] = $this->TypeLink->TypeInfos['channeltype']; - if ($this->Fields['reid'] > 0) { $GLOBALS['envs']['typeid'] = $this->Fields['reid']; } - MakeOneTag($this->dtp, $this, 'N'); } - /** * 解析模板,对内容里的变动进行赋值 * @@ -612,7 +578,6 @@ class Archives $this->Fields[$this->SplitPageField] = $this->SplitFields[$pageNo - 1]; if ($pageNo > 1) $this->Fields['description'] = trim(preg_replace("/[\r\n\t]/", ' ', cn_substr(html2text($this->Fields[$this->SplitPageField]), 200))); } - //解析模板 if (is_array($this->dtp->CTags)) { foreach ($this->dtp->CTags as $i => $ctag) { @@ -632,7 +597,34 @@ class Archives } } else if ($ctag->GetName() == 'prenext') { $this->dtp->Assign($i, $this->GetPreNext($ctag->GetAtt('get'))); - } else if ($ctag->GetName() == 'fieldlist') { + } + //二次开发上一篇下一篇{dede:prenextdiy get='pre'}{/dede:prenextdiy}{dede:prenextdiy get='next'}{/dede:prenextdiy} + else if($ctag->GetName()=='prenextdiy') + { + $innertext = trim($ctag->GetInnerText()); + if($innertext) + { + $get = $ctag->GetAtt('get'); + $diys['diy'] = $this->GetPreNext('diy'); + $revalue = ''; + $dtp2 = new DedeTagParse(); + $dtp2->SetNameSpace('field','[',']'); + $dtp2->LoadSource($innertext); + foreach($diys as $row) + { + foreach($dtp2->CTags as $tid=>$ctag2) + { + if(isset($row[$get][$ctag2->GetName()])) + { + $dtp2->Assign($tid,$row[$get][$ctag2->GetName()]); + } + } + $revalue .= $dtp2->GetResult(); + } + if($row[$get]['id']) $this->dtp->Assign($i,$revalue); + } + } + else if ($ctag->GetName() == 'fieldlist') { $innertext = trim($ctag->GetInnerText()); if ($innertext == '') $innertext = GetSysTemplets('tag_fieldlist.htm'); $dtp2 = new DedeTagParse(); @@ -666,12 +658,10 @@ class Archives } $this->dtp->Assign($i, $res); } //end case - } //结束模板循环 } } - /** * 关闭所占用的资源 * @@ -683,7 +673,6 @@ class Archives $this->FixedValues = ''; $this->Fields = ''; } - /** * 获取上一篇,下一篇链接 * @@ -702,8 +691,8 @@ class Archives $next = (is_array($nextR) ? " where arc.id={$nextR['id']} " : ' where 1>2 '); $pre = (is_array($preR) ? " where arc.id={$preR['id']} " : ' where 1>2 '); $query = "Select arc.id,arc.title,arc.shorttitle,arc.typeid,arc.ismake,arc.senddate,arc.arcrank,arc.money,arc.filename,arc.litpic, - t.typedir,t.typename,t.namerule,t.namerule2,t.ispart,t.moresite,t.siteurl,t.sitepath - from `#@__archives` arc left join #@__arctype t on arc.typeid=t.id "; + t.typedir,t.typename,t.namerule,t.namerule2,t.ispart,t.moresite,t.siteurl,t.sitepath + from `#@__archives` arc left join #@__arctype t on arc.typeid=t.id "; $nextRow = $this->dsql->GetOne($query . $next); $preRow = $this->dsql->GetOne($query . $pre); if (is_array($preRow)) { @@ -726,7 +715,13 @@ class Archives $preRow['sitepath'] ); } - + //二次开发上一篇属性 + $preRow['litpic'] = (empty($preRow['litpic'])) ? $GLOBALS['cfg_cmspath'].'/images/defaultpic.jpg' : $preRow['litpic']; + $this->PreNext['diy']['pre']['id'] = $preRow['id']; + $this->PreNext['diy']['pre']['arcurl'] = $mlink; + $this->PreNext['diy']['pre']['title'] = $preRow['title']; + $this->PreNext['diy']['pre']['litpic'] = $preRow['litpic']; + $this->PreNext['diy']['pre']['pubdate'] = $preRow['senddate']; $this->PreNext['pre'] = "上一篇:{$preRow['title']} "; $this->PreNext['preimg'] = "\"{$preRow['title']}\"/ "; } else { @@ -753,7 +748,13 @@ class Archives $nextRow['sitepath'] ); } - + //二次开发下一篇属性 + $nextRow['litpic'] = (empty($nextRow['litpic'])) ? $GLOBALS['cfg_cmspath'].'/images/defaultpic.jpg' : $nextRow['litpic']; + $this->PreNext['diy']['next']['id'] = $nextRow['id']; + $this->PreNext['diy']['next']['arcurl'] = $mlink; + $this->PreNext['diy']['next']['title'] = $nextRow['title']; + $this->PreNext['diy']['next']['litpic'] = $nextRow['litpic']; + $this->PreNext['diy']['next']['pubdate'] = $nextRow['senddate']; $this->PreNext['next'] = "下一篇:{$nextRow['title']} "; $this->PreNext['nextimg'] = "\"{$nextRow['title']}\"/ "; } else { @@ -761,22 +762,25 @@ class Archives $this->PreNext['nextimg'] = "\"对不起,没有下一图集了!\"/"; } } - if ($gtype == 'pre') { + //二次开发上一篇下一篇 + if($gtype=='diy') + { + return $this->PreNext['diy']; + } + if($gtype=='pre') + { $rs = $this->PreNext['pre']; } else if ($gtype == 'preimg') { - $rs = $this->PreNext['preimg']; } else if ($gtype == 'next') { $rs = $this->PreNext['next']; } else if ($gtype == 'nextimg') { - $rs = $this->PreNext['nextimg']; } else { $rs = $this->PreNext['pre'] . "   " . $this->PreNext['next']; } return $rs; } - /** * 获得动态页面分页列表 * @@ -845,7 +849,6 @@ class Archives } return $PageList; } - /** * 获得静态页面分页列表 * @@ -895,7 +898,6 @@ class Archives } return $PageList; } - /** * 获得动态页面小标题 * @@ -946,7 +948,6 @@ class Archives } return $revalue; } - /** * 获得静态页面小标题 * @@ -996,7 +997,6 @@ class Archives } return $revalue; } - /** * 高亮问题修正, 排除alt title 直接的字符替换 * @@ -1011,10 +1011,8 @@ class Archives $kws = explode(",", trim($kw)); //以分好为间隔符 $i = 0; $karr = $kaarr = $GLOBALS['replaced'] = array(); - //暂时屏蔽超链接 $body = preg_replace("#()(.*)(<)(\/a>)#isU", '\\1-]-\\4-[-\\6', $body); - /* foreach($kws as $k) { @@ -1045,30 +1043,45 @@ class Archives $karr[] = $key; $kaarr[] = "$key"; } - $GLOBALS['_dd_karr'] = $karr; $GLOBALS['_dd_kaarr'] = $kaarr; - // 这里可能会有错误 - if (version_compare(PHP_VERSION, '8.0.0', '>=')) { - $body = @preg_replace_callback("#(^|>)([^<]+)(?=<|$)#sU", "_highlight8", $body); - } else if (version_compare(PHP_VERSION, '5.5.0', '>=')) { - - $body = @preg_replace_callback("#(^|>)([^<]+)(?=<|$)#sU", "_highlight('\\2', \$karr, \$kaarr, '\\1')", $body); + if (version_compare(PHP_VERSION, '5.5.0', '>=')) + { + //$body = @preg_replace_callback("#(^|>)([^<]+)(?=<|$)#sU", "_highlight('\\2', \$karr, \$kaarr, '\\1')", $body); + if($cfg_replace_num > 0) + { + $query = "SELECT * FROM #@__keywords WHERE rpurl<>'' ORDER BY rank DESC"; + $this->dsql->SetQuery($query); + $this->dsql->Execute(); + while($row = $this->dsql->GetArray()) + { + $key = trim($row['keyword']); + $key_url=trim($row['rpurl']); + $body = str_replace_limit($key, "$key", $body, $cfg_replace_num); + } + } else { + $query = "SELECT * FROM #@__keywords WHERE rpurl<>'' ORDER BY rank DESC"; + $this->dsql->SetQuery($query); + $this->dsql->Execute(); + while($row = $this->dsql->GetArray()) + { + $key = trim($row['keyword']); + $key_url=trim($row['rpurl']); + $body = str_replace($key, "$key", $body); + } + } } else { $body = @preg_replace("#(^|>)([^<]+)(?=<|$)#sUe", "_highlight('\\2', \$karr, \$kaarr, '\\1')", $body); } - //恢复超链接 $body = preg_replace("#()#isU", '\\1>\\3<\\4', $body); return $body; } -} //End Archives - +}//End Archives function _highlight8($matches){ return _highlight($matches[2], $GLOBALS['_dd_karr'], $GLOBALS['_dd_kaarr'], $matches[1]); } - //高亮专用, 替换多次是可能不能达到最多次 function _highlight($string, $words, $result, $pre) { @@ -1092,4 +1105,4 @@ function _highlight($string, $words, $result, $pre) $string = str_replace($words, $result, $string); } return $pre . $string; -} +} \ No newline at end of file