| @@ -1,3 +1,60 @@ | |||
| # DedeV6Mobile | |||
| DedeV6移动版 | |||
| 压缩包解压后覆盖前备份:栏目列表分页样式、标签列表分页样式、搜索列表分页样式等文件后自行处理列表样式。 | |||
| /admin/inc/inc_archives_functions.php | |||
| /admin/inc/inc_menu.php | |||
| /system/archive/archives.class.php | |||
| /system/archive/listview.class.php | |||
| 手机端模板启用静态链接,如列表“[field:typeurl/]”标签,文档“[field:arcurl/]”标签。那么手机端模模板中css和js等,建议用绝对路径引用,以免手机端更新后页面错误。缩略图标签前加电脑端链接为http://xxx.com[field:picname/],文档正文标签为{dede:field.body function='str_replace("/static/allimg/","http:xxx.com/static/allimg/",@me)'/},后台-系统设置-系统配置变量-是否支持多站点选择否,最后更新目录中有静态文件,则更新成功。 | |||
| 手机端模板启用动态链接,如列表list.php?tid=[field:id/]形式,文档view.php?aid=[field:id/]形式,手机端伪静态规则参考电脑端。 | |||
| ## 手机端静态识别设备跳转代码 | |||
| 以下代码放到电脑端前端模板的js里,或者创建一个js文件引用即可,域名换成您要跳转域名。 | |||
| //电脑跳转移动 | |||
| var nowurl = window.location.href; | |||
| nowurl = nowurl.replace("www.dedebiz", "m.baidu"); | |||
| if (/AppleWebKit.*Mobile/i.test(navigator.userAgent) || (/MIDP|SymbianOS|NOKIA|SAMSUNG|LG|NEC|TCL|Alcatel|BIRD|DBTEL|Dopod|PHILIPS|HAIER|LENOVO|MOT-|Nokia|SonyEricsson|SIE-|Amoi|ZTE/.test(navigator.userAgent))) { | |||
| if (window.location.href.indexOf("?agent=m") < 0) { | |||
| try { | |||
| if (/Android|webOS|iPhone|iPod|iPad|BlackBerry/i.test(navigator.userAgent)) { | |||
| window.location.href = nowurl | |||
| } else if (/iPad/i.test(navigator.userAgent)) {} else { | |||
| window.location.href = nowurl | |||
| } | |||
| } catch(e) {} | |||
| } | |||
| } | |||
| //移动跳转电脑 | |||
| var sUserAgent = navigator.userAgent.toLowerCase(); | |||
| var bIsIpad = sUserAgent.match(/ipad/i) == "ipad"; | |||
| var bIsIphoneOs = sUserAgent.match(/iphone os/i) == "iphone os"; | |||
| var bIsMidp = sUserAgent.match(/midp/i) == "midp"; | |||
| var bIsUc7 = sUserAgent.match(/rv:1.2.3.4/i) == "rv:1.2.3.4"; | |||
| var bIsUc = sUserAgent.match(/ucweb/i) == "ucweb"; | |||
| var bIsAndroid = sUserAgent.match(/android/i) == "android"; | |||
| var bIsCE = sUserAgent.match(/windows ce/i) == "windows ce"; | |||
| var bIsWM = sUserAgent.match(/windows mobile/i) == "windows mobile"; | |||
| if (! (bIsIpad || bIsIphoneOs || bIsMidp || bIsUc7 || bIsUc || bIsAndroid || bIsCE || bIsWM)) { | |||
| url = window.location.href; | |||
| url = url.replace("m.baidu", "www.dedebiz"); | |||
| window.location.href = url | |||
| } | |||
| ## 手机端动态识别设备跳转代码 | |||
| 首页 | |||
| <script>if ((navigator.userAgent.match(/(iPhone|iPod|Android|Backerry|WebOS|Symbian|Windows Phone|Phone)/i))) {location.replace("{dede:global.cfg_cmsurl/}/m/");} else {}</script> | |||
| 列表页 | |||
| <script>if ((navigator.userAgent.match(/(iPhone|iPod|Android|Backerry|WebOS|Symbian|Windows Phone|Phone)/i))) {location.replace("{dede:global.cfg_cmsurl/}/m/list.php?tid={dede:field.typeid/}");} else {}</script> | |||
| 文档页 | |||
| <script>if ((navigator.userAgent.match(/(iPhone|iPod|Android|Backerry|WebOS|Symbian|Windows Phone|Phone)/i))) {location.replace("{dede:global.cfg_cmsurl/}/m/view.php?aid={dede:field.id/}");} else {}</script> | |||
| @@ -0,0 +1,768 @@ | |||
| <?php | |||
| /** | |||
| * 文档操作相关函数 | |||
| * | |||
| * @version $id:inc_archives_functions.php 9:56 2010年7月21日 tianya $ | |||
| * @package DedeBIZ.Administrator | |||
| * @copyright Copyright (c) 2022 DedeBIZ.COM | |||
| * @license https://www.dedebiz.com/license | |||
| * @link https://www.dedebiz.com | |||
| */ | |||
| require_once(DEDEINC.'/libraries/dedehttpdown.class.php'); | |||
| require_once(DEDEINC.'/image.func.php'); | |||
| require_once(DEDEINC.'/archive/partview.class.php'); | |||
| $backurl = !empty($_COOKIE['ENV_GOBACK_URL']) ? $_COOKIE['ENV_GOBACK_URL'] : ''; | |||
| $backurl = preg_match("#content_#", $backurl) ? "<a href='$backurl' class='btn btn-success btn-sm'>记忆的列表页</a>" : ''; | |||
| if (!isset($_NOT_ARCHIVES)) { | |||
| require_once(DEDEINC.'/customfields.func.php'); | |||
| } | |||
| /** | |||
| * 获得网页里的外部资源,针对图片 | |||
| * | |||
| * @access public | |||
| * @param string $body 文档 | |||
| * @param string $rfurl 来源地址 | |||
| * @param string $firstdd 开始标记 | |||
| * @return string | |||
| */ | |||
| function GetCurContentAlbum($body, $rfurl, &$firstdd) | |||
| { | |||
| global $dsql, $cfg_multi_site, $cfg_basehost, $cfg_ddimg_width, $cfg_basedir, $pagestyle, $cuserLogin, $cfg_addon_savetype; | |||
| require_once(DEDEINC.'/dedecollection.func.php'); | |||
| if (empty($cfg_ddimg_width)) $cfg_ddimg_width = 320; | |||
| $rsimg = ''; | |||
| $cfg_uploaddir = $GLOBALS['cfg_image_dir']; | |||
| $cfg_basedir = $GLOBALS['cfg_basedir']; | |||
| $basehost = IsSSL()? "https://".$_SERVER["HTTP_HOST"] : "http://".$_SERVER["HTTP_HOST"]; | |||
| $img_array = array(); | |||
| preg_match_all("/(src)=[\"|'| ]{0,}(http:\/\/([^>]*)\.(gif|jpg|png))/isU", $body, $img_array); | |||
| $img_array = array_unique($img_array[2]); | |||
| $imgUrl = $cfg_uploaddir.'/'.MyDate($cfg_addon_savetype, time()); | |||
| $imgPath = $cfg_basedir.$imgUrl; | |||
| if (!is_dir($imgPath.'/')) { | |||
| MkdirAll($imgPath, $GLOBALS['cfg_dir_purview']); | |||
| CloseFtp(); | |||
| } | |||
| $milliSecond = 'co'.dd2char(MyDate('ymdHis', time())); | |||
| foreach ($img_array as $key => $value) { | |||
| $value = trim($value); | |||
| if ( | |||
| preg_match("#".$basehost."#i", $value) || !preg_match("#^http:\/\/#i", $value) | |||
| || ($cfg_basehost != $basehost && preg_match("#".$cfg_basehost."#i", $value)) | |||
| ) { | |||
| continue; | |||
| } | |||
| $itype = substr($value, -4, 4); | |||
| if (!preg_match("#\.(gif|jpg|png)#", $itype)) $itype = ".jpg"; | |||
| $rndFileName = $imgPath.'/'.$milliSecond.'-'.$key.$itype; | |||
| $iurl = $imgUrl.'/'.$milliSecond.'-'.$key.$itype; | |||
| //下载并保存文件 | |||
| $rs = DownImageKeep($value, $rfurl, $rndFileName, '', 0, 30); | |||
| if ($rs) { | |||
| $info = ''; | |||
| $imginfos = GetImageSize($rndFileName, $info); | |||
| $fsize = filesize($rndFileName); | |||
| $filename = $milliSecond.'-'.$key.$itype; | |||
| //保存图片附件信息 | |||
| $inquery = "INSERT INTO `#@__uploads` (arcid,title,url,mediatype,width,height,playtime,filesize,uptime,mid) VALUES ('0','$filename','$iurl','1','{$imginfos[0]}','$imginfos[1]','0','$fsize','".time()."','".$cuserLogin->getUserID()."'); "; | |||
| $dsql->ExecuteNoneQuery($inquery); | |||
| $fid = $dsql->GetLastID(); | |||
| AddMyAddon($fid, $iurl); | |||
| if ($pagestyle > 2) { | |||
| $litpicname = GetImageMapDD($iurl, $cfg_ddimg_width); | |||
| } else { | |||
| $litpicname = $iurl; | |||
| } | |||
| if (empty($firstdd) && !empty($litpicname)) { | |||
| $firstdd = $litpicname; | |||
| if (!file_exists($cfg_basedir.$firstdd)) { | |||
| $firstdd = $iurl; | |||
| } | |||
| } | |||
| @WaterImg($rndFileName, 'down'); | |||
| $rsimg .= "{dede:img ddimg='$litpicname' text='' width='".$imginfos[0]."' height='".$imginfos[1]."'} $iurl {/dede:img}\r\n"; | |||
| } | |||
| } | |||
| return $rsimg; | |||
| } | |||
| /** | |||
| * 获得文档body里的外部资源 | |||
| * | |||
| * @access public | |||
| * @param string $body 文档 | |||
| * @return string | |||
| */ | |||
| function GetCurContent($body) | |||
| { | |||
| global $cfg_multi_site, $cfg_basehost, $cfg_basedir, $cfg_image_dir, $arcID, $cuserLogin, $dsql; | |||
| $cfg_uploaddir = $cfg_image_dir; | |||
| $htd = new DedeHttpDown(); | |||
| $basehost = IsSSL()? "https://".$_SERVER["HTTP_HOST"] : "http://".$_SERVER["HTTP_HOST"]; | |||
| $img_array = array(); | |||
| $body = str_replace("data-src=","src=", $body); | |||
| preg_match_all("/src=[\"|'|\s]([^\"|^\'|^\s]*?)/isU", $body, $img_array); | |||
| $img_array = array_unique($img_array[1]); | |||
| $imgUrl = $cfg_uploaddir.'/'.MyDate("ymd", time()); | |||
| $imgPath = $cfg_basedir.$imgUrl; | |||
| if (!is_dir($imgPath.'/')) { | |||
| MkdirAll($imgPath, $GLOBALS['cfg_dir_purview']); | |||
| CloseFtp(); | |||
| } | |||
| $milliSecond = MyDate('His', time()); | |||
| foreach ($img_array as $key => $value) { | |||
| if (preg_match("#".$basehost."#i", $value)) { | |||
| continue; | |||
| } | |||
| if ($cfg_basehost != $basehost && preg_match("#".$cfg_basehost."#i", $value)) { | |||
| continue; | |||
| } | |||
| if (!preg_match("#^(http|https):\/\/#i", $value)) { | |||
| continue; | |||
| } | |||
| $v = str_replace('&','&',$value); | |||
| $htd->OpenUrl($v); | |||
| $itype = $htd->GetHead("content-type"); | |||
| $isImage = true; | |||
| if ($itype == 'image/gif') { | |||
| $itype = ".gif"; | |||
| } else if ($itype == 'image/png') { | |||
| $itype = ".png"; | |||
| } else if ($itype == 'audio/mpeg'){ | |||
| $itype = ".mp3"; | |||
| $isImage = false; | |||
| } else if ($itype == 'image/jpeg') { | |||
| $itype = '.jpg'; | |||
| } else if ($itype == 'image/bmp') { | |||
| $itype = '.bmp'; | |||
| } else if ($itype == 'image/svg+xml') { | |||
| $itype = '.svg'; | |||
| $isImage = false; | |||
| } else { | |||
| continue; | |||
| } | |||
| $milliSecondN = dd2char($milliSecond.mt_rand(1000, 8000)); | |||
| $value = trim($value); | |||
| $rndFileName = $imgPath.'/'.$milliSecondN.'-'.$key.$itype; | |||
| $fileurl = $imgUrl.'/'.$milliSecondN.'-'.$key.$itype; | |||
| $rs = $htd->SaveToBin($rndFileName); | |||
| if ($rs) { | |||
| $info = ''; | |||
| $imginfos = array(0,0); | |||
| if ($isImage) { | |||
| $imginfos = GetImageSize($rndFileName, $info); | |||
| } | |||
| $fsize = filesize($rndFileName); | |||
| //保存图片附件信息 | |||
| $inquery = "INSERT INTO `#@__uploads` (arcid,title,url,mediatype,width,height,playtime,filesize,uptime,mid) VALUES ('{$arcID}','$rndFileName','$fileurl','1','{$imginfos[0]}','$imginfos[1]','0','$fsize','".time()."','".$cuserLogin->getUserID()."'); "; | |||
| $dsql->ExecuteNoneQuery($inquery); | |||
| $fid = $dsql->GetLastID(); | |||
| AddMyAddon($fid, $fileurl); | |||
| if ($cfg_multi_site == 'Y') { | |||
| $fileurl = $cfg_basehost.$fileurl; | |||
| } | |||
| $body = str_replace($value, $fileurl, $body); | |||
| if ($isImage) { | |||
| @WaterImg($rndFileName, 'down'); | |||
| } | |||
| } | |||
| } | |||
| $htd->Close(); | |||
| return $body; | |||
| } | |||
| /** | |||
| * 获取一个远程图片 | |||
| * | |||
| * @access public | |||
| * @param string $url 地址 | |||
| * @param int $uid 用户id | |||
| * @return array | |||
| */ | |||
| function GetRemoteImage($url, $uid = 0) | |||
| { | |||
| global $cfg_basedir, $cfg_image_dir, $cfg_addon_savetype; | |||
| $cfg_uploaddir = $cfg_image_dir; | |||
| $revalues = array(); | |||
| $ok = false; | |||
| $htd = new DedeHttpDown(); | |||
| $htd->OpenUrl($url); | |||
| $sparr = array("image/pjpeg", "image/jpeg", "image/gif", "image/png", "image/xpng", "image/wbmp"); | |||
| if (!in_array($htd->GetHead("content-type"), $sparr)) { | |||
| return ''; | |||
| } else { | |||
| $imgUrl = $cfg_uploaddir.'/'.MyDate($cfg_addon_savetype, time()); | |||
| $imgPath = $cfg_basedir.$imgUrl; | |||
| CreateDir($imgUrl); | |||
| $itype = $htd->GetHead("content-type"); | |||
| if ($itype == "image/gif") { | |||
| $itype = '.gif'; | |||
| } else if ($itype == "image/png") { | |||
| $itype = '.png'; | |||
| } else if ($itype == "image/wbmp") { | |||
| $itype = '.bmp'; | |||
| } else { | |||
| $itype = '.jpg'; | |||
| } | |||
| $rndname = dd2char($uid.'_'.MyDate('mdHis', time()).mt_rand(1000, 9999)); | |||
| $rndtrueName = $imgPath.'/'.$rndname.$itype; | |||
| $fileurl = $imgUrl.'/'.$rndname.$itype; | |||
| $ok = $htd->SaveToBin($rndtrueName); | |||
| @WaterImg($rndtrueName, 'down'); | |||
| if ($ok) { | |||
| $data = GetImageSize($rndtrueName); | |||
| $revalues[0] = $fileurl; | |||
| $revalues[1] = $data[0]; | |||
| $revalues[2] = $data[1]; | |||
| } | |||
| } | |||
| $htd->Close(); | |||
| return ($ok ? $revalues : ''); | |||
| } | |||
| /** | |||
| * 检测栏目id | |||
| * | |||
| * @access public | |||
| * @param int $typeid 栏目id | |||
| * @param int $channelid 栏目id | |||
| * @return bool | |||
| */ | |||
| function CheckChannel($typeid, $channelid) | |||
| { | |||
| global $dsql; | |||
| if ($typeid == 0) return TRUE; | |||
| $row = $dsql->GetOne("SELECT ispart,channeltype FROM `#@__arctype` WHERE id='$typeid' "); | |||
| if ($row['ispart'] != 0 || $row['channeltype'] != $channelid) return FALSE; | |||
| else return TRUE; | |||
| } | |||
| /** | |||
| * 检测文档权限 | |||
| * | |||
| * @access public | |||
| * @param int $aid 文档aid | |||
| * @param int $adminid 管理员id | |||
| * @return bool | |||
| */ | |||
| function CheckArcAdmin($aid, $adminid) | |||
| { | |||
| global $dsql; | |||
| $row = $dsql->GetOne("SELECT mid FROM `#@__archives` WHERE id='$aid' "); | |||
| if ($row['mid'] != $adminid) return FALSE; | |||
| else return TRUE; | |||
| } | |||
| /** | |||
| * 文档自动分页 | |||
| * | |||
| * @access public | |||
| * @param string $mybody 文档 | |||
| * @param string $spsize 分页大小 | |||
| * @param string $sptag 分页标记 | |||
| * @return string | |||
| */ | |||
| function SpLongBody($mybody, $spsize, $sptag) | |||
| { | |||
| if (strlen($mybody) < $spsize) { | |||
| return $mybody; | |||
| } | |||
| $mybody = stripslashes($mybody); | |||
| $bds = explode('<', $mybody); | |||
| $npageBody = ''; | |||
| $istable = 0; | |||
| $mybody = ''; | |||
| foreach ($bds as $i => $k) { | |||
| if ($i == 0) { | |||
| $npageBody .= $bds[$i]; | |||
| continue; | |||
| } | |||
| $bds[$i] = "<".$bds[$i]; | |||
| if (strlen($bds[$i]) > 6) { | |||
| $tname = substr($bds[$i], 1, 5); | |||
| if (strtolower($tname) == 'table') { | |||
| $istable++; | |||
| } else if (strtolower($tname) == '/tabl') { | |||
| $istable--; | |||
| } | |||
| if ($istable > 0) { | |||
| $npageBody .= $bds[$i]; | |||
| continue; | |||
| } else { | |||
| $npageBody .= $bds[$i]; | |||
| } | |||
| } else { | |||
| $npageBody .= $bds[$i]; | |||
| } | |||
| if (strlen($npageBody) > $spsize) { | |||
| $mybody .= $npageBody.$sptag; | |||
| $npageBody = ''; | |||
| } | |||
| } | |||
| if ($npageBody != '') { | |||
| $mybody .= $npageBody; | |||
| } | |||
| return addslashes($mybody); | |||
| } | |||
| /** | |||
| * 创建指定id的文档 | |||
| * | |||
| * @access public | |||
| * @param string $aid 文档id | |||
| * @param string $ismakesign 生成标志 | |||
| * @param int $isremote 是否远程 | |||
| * @return string | |||
| */ | |||
| function MakeArt($aid, $mkindex = FALSE, $ismakesign = FALSE, $isremote = 0) | |||
| { | |||
| global $envs, $typeid; | |||
| require_once(DEDEINC.'/archive/archives.class.php'); | |||
| if ($ismakesign) $envs['makesign'] = 'yes'; | |||
| $arc = new Archives($aid); | |||
| $reurl = $arc->MakeHtml($isremote); | |||
| $arc->MakeHtml($isremote,1);//发布文档同步手机端 | |||
| return $reurl; | |||
| } | |||
| /** | |||
| * 取第一个图片为缩略图 | |||
| * | |||
| * @access public | |||
| * @param string $body 文档 | |||
| * @return string | |||
| */ | |||
| function GetDDImgFromBody(&$body) | |||
| { | |||
| $litpic = ''; | |||
| preg_match_all("/(src)=[\"|'| ]{0,}([^>]*\.(gif|jpg|bmp|png))/isU", $body, $img_array); | |||
| $img_array = array_unique($img_array[2]); | |||
| if (count($img_array) > 0) { | |||
| $picname = preg_replace("/[\"|'| ]{1,}/", '', $img_array[0]); | |||
| if (preg_match("#_lit\.#", $picname)) $litpic = $picname; | |||
| else $litpic = GetDDImage('ddfirst', $picname, 1); | |||
| } | |||
| return $litpic; | |||
| } | |||
| /** | |||
| * 获得缩略图 | |||
| * | |||
| * @access public | |||
| * @param string $litpic 缩略图 | |||
| * @param string $picname 图片名称 | |||
| * @param string $isremote 是否远程 | |||
| * @return string | |||
| */ | |||
| function GetDDImage($litpic, $picname, $isremote) | |||
| { | |||
| global $cuserLogin, $cfg_ddimg_width, $cfg_ddimg_height, $cfg_basedir, $cfg_image_dir, $cfg_addon_savetype; | |||
| $ntime = time(); | |||
| if (($litpic != 'none' || $litpic != 'ddfirst') && !empty($_FILES[$litpic]['tmp_name']) && is_uploaded_file($_FILES[$litpic]['tmp_name']) | |||
| ) { | |||
| //如果用户自行上传缩略图 | |||
| $istype = 0; | |||
| $sparr = array("image/pjpeg", "image/jpeg", "image/gif", "image/png"); | |||
| $_FILES[$litpic]['type'] = strtolower(trim($_FILES[$litpic]['type'])); | |||
| if (!in_array($_FILES[$litpic]['type'], $sparr)) { | |||
| ShowMsg("上传的图片格式错误,请使用JPEG、GIF、PNG格式的其中一种", "-1"); | |||
| exit(); | |||
| } | |||
| $savepath = $cfg_image_dir.'/'.MyDate($cfg_addon_savetype, $ntime); | |||
| CreateDir($savepath); | |||
| $fullUrl = $savepath.'/'.dd2char(MyDate('mdHis', $ntime).$cuserLogin->getUserID().mt_rand(1000, 9999)); | |||
| if (strtolower($_FILES[$litpic]['type']) == "image/gif") { | |||
| $fullUrl = $fullUrl.".gif"; | |||
| } else if (strtolower($_FILES[$litpic]['type']) == "image/png") { | |||
| $fullUrl = $fullUrl.".png"; | |||
| } else { | |||
| $fullUrl = $fullUrl.".jpg"; | |||
| } | |||
| $mime = get_mime_type($_FILES[$litpic]['tmp_name']); | |||
| if (preg_match("#^unknow#", $mime)) { | |||
| ShowMsg("系统不支持fileinfo组件,建议php.ini中开启", -1); | |||
| exit; | |||
| } | |||
| if (!preg_match("#^(image|video|audio|application)#i", $mime)) { | |||
| ShowMsg("仅支持媒体文件及应用程序上传", -1); | |||
| exit; | |||
| } | |||
| @move_uploaded_file($_FILES[$litpic]['tmp_name'], $cfg_basedir.$fullUrl); | |||
| $litpic = $fullUrl; | |||
| if ($GLOBALS['cfg_ddimg_full'] == 'Y') @ImageResizeNew($cfg_basedir.$fullUrl, $cfg_ddimg_width, $cfg_ddimg_height); | |||
| else @ImageResize($cfg_basedir.$fullUrl, $cfg_ddimg_width, $cfg_ddimg_height); | |||
| $img = $cfg_basedir.$litpic; | |||
| } else { | |||
| $picname = trim($picname); | |||
| if ($isremote == 1 && preg_match("#^http:\/\/#i", $picname)) { | |||
| $litpic = $picname; | |||
| $ddinfos = GetRemoteImage($litpic, $cuserLogin->getUserID()); | |||
| if (!is_array($ddinfos)) { | |||
| $litpic = ''; | |||
| } else { | |||
| $litpic = $ddinfos[0]; | |||
| if ($ddinfos[1] > $cfg_ddimg_width || $ddinfos[2] > $cfg_ddimg_height) { | |||
| if ($GLOBALS['cfg_ddimg_full'] == 'Y') @ImageResizeNew($cfg_basedir.$litpic, $cfg_ddimg_width, $cfg_ddimg_height); | |||
| else @ImageResize($cfg_basedir.$litpic, $cfg_ddimg_width, $cfg_ddimg_height); | |||
| } | |||
| } | |||
| } else { | |||
| if ($litpic == 'ddfirst' && !preg_match("#^http:\/\/#i", $picname)) { | |||
| $oldpic = $cfg_basedir.$picname; | |||
| $litpic = str_replace('.', '-ty.', $picname); | |||
| if ($GLOBALS['cfg_ddimg_full'] == 'Y') @ImageResizeNew($oldpic, $cfg_ddimg_width, $cfg_ddimg_height, $cfg_basedir.$litpic); | |||
| else @ImageResize($oldpic, $cfg_ddimg_width, $cfg_ddimg_height, $cfg_basedir.$litpic); | |||
| if (!is_file($cfg_basedir.$litpic)) $litpic = ''; | |||
| } else { | |||
| $litpic = $picname; | |||
| return $litpic; | |||
| } | |||
| } | |||
| } | |||
| if ($litpic == 'litpic' || $litpic == 'ddfirst') $litpic = ''; | |||
| return $litpic; | |||
| } | |||
| /** | |||
| * 获得一个附加表单 | |||
| * | |||
| * @access public | |||
| * @param object $ctag ctag | |||
| * @return string | |||
| */ | |||
| function GetFormItemA($ctag) | |||
| { | |||
| return GetFormItem($ctag, 'admin'); | |||
| } | |||
| /** | |||
| * 处理不同类型的数据 | |||
| * | |||
| * @access public | |||
| * @param string $dvalue | |||
| * @param string $dtype | |||
| * @param int $aid | |||
| * @param string $job | |||
| * @param string $addvar | |||
| * @return string | |||
| */ | |||
| function GetFieldValueA($dvalue, $dtype, $aid = 0, $job = 'add', $addvar = '') | |||
| { | |||
| return GetFieldValue($dvalue, $dtype, $aid, $job, $addvar, 'admin'); | |||
| } | |||
| /** | |||
| * 获得带值的表单修改时用 | |||
| * | |||
| * @access public | |||
| * @param object $ctag ctag | |||
| * @param string $fvalue fvalue | |||
| * @return string | |||
| */ | |||
| function GetFormItemValueA($ctag, $fvalue) | |||
| { | |||
| return GetFormItemValue($ctag, $fvalue, 'admin'); | |||
| } | |||
| /** | |||
| * 载入自定义表单用于发布 | |||
| * | |||
| * @access public | |||
| * @param string $fieldset 字段列表 | |||
| * @param string $loadtype 载入类型 | |||
| * @return string | |||
| */ | |||
| function PrintAutoFieldsAdd($fieldset, $loadtype = 'all') | |||
| { | |||
| $dtp = new DedeTagParse(); | |||
| $dtp->SetNameSpace('field', '<', '>'); | |||
| $dtp->LoadSource($fieldset); | |||
| $dede_addonfields = ''; | |||
| if (is_array($dtp->CTags)) { | |||
| foreach ($dtp->CTags as $tid => $ctag) { | |||
| if ( | |||
| $loadtype != 'autofield' || ($loadtype == 'autofield' && $ctag->GetAtt('autofield') == 1) | |||
| ) { | |||
| $dede_addonfields .= ($dede_addonfields == "" ? $ctag->GetName().",".$ctag->GetAtt('type') : ";".$ctag->GetName().",".$ctag->GetAtt('type')); | |||
| echo GetFormItemA($ctag); | |||
| } | |||
| } | |||
| } | |||
| echo "<input type='hidden' name='dede_addonfields' value=\"".$dede_addonfields."\">\r\n"; | |||
| } | |||
| /** | |||
| * 载入自定义表单用于修改 | |||
| * | |||
| * @access public | |||
| * @param string $fieldset 字段列表 | |||
| * @param string $fieldValues 字段值 | |||
| * @param string $loadtype 载入类型 | |||
| * @return string | |||
| */ | |||
| function PrintAutoFieldsEdit(&$fieldset, &$fieldValues, $loadtype = 'all') | |||
| { | |||
| $dtp = new DedeTagParse(); | |||
| $dtp->SetNameSpace("field", "<", ">"); | |||
| $dtp->LoadSource($fieldset); | |||
| $dede_addonfields = ""; | |||
| if (is_array($dtp->CTags)) { | |||
| foreach ($dtp->CTags as $tid => $ctag) { | |||
| if ( | |||
| $loadtype != 'autofield' || ($loadtype == 'autofield' && $ctag->GetAtt('autofield') == 1) | |||
| ) { | |||
| $dede_addonfields .= ($dede_addonfields == '' ? $ctag->GetName().",".$ctag->GetAtt('type') : ";".$ctag->GetName().",".$ctag->GetAtt('type')); | |||
| echo GetFormItemValueA($ctag, $fieldValues[$ctag->GetName()]); | |||
| } | |||
| } | |||
| } | |||
| echo "<input type='hidden' name='dede_addonfields' value=\"".$dede_addonfields."\">\r\n"; | |||
| } | |||
| /** | |||
| * 处理网页文本,删除非站外链接,自动摘要,自动获取缩略图 | |||
| * | |||
| * @access public | |||
| * @param string $body 文档 | |||
| * @param string $description 描述 | |||
| * @param string $litpic 缩略图 | |||
| * @param string $keywords 关键词 | |||
| * @param string $dtype 类型 | |||
| * @return string | |||
| */ | |||
| function AnalyseHtmlBody($body, &$description, &$litpic, &$keywords, $dtype = '') | |||
| { | |||
| global $autolitpic, $remote, $dellink, $autokey, $cfg_basehost, $cfg_auot_description, $id, $title, $cfg_soft_lang, $cfg_bizcore_appid, $cfg_bizcore_key, $cfg_bizcore_hostname, $cfg_bizcore_port; | |||
| $autolitpic = (empty($autolitpic) ? '' : $autolitpic); | |||
| $body = stripslashes($body); | |||
| //远程图片本地化 | |||
| if ($remote == 1) { | |||
| $body = GetCurContent($body); | |||
| } | |||
| //删除非站内链接 | |||
| if ($dellink == 1) { | |||
| $allow_urls = array($_SERVER['HTTP_HOST']); | |||
| //读取允许的超链接设置 | |||
| if (file_exists(DEDEDATA."/admin/allowurl.txt")) { | |||
| $allow_urls = array_merge($allow_urls, file(DEDEDATA."/admin/allowurl.txt")); | |||
| } | |||
| $body = Replace_Links($body, $allow_urls); | |||
| } | |||
| //自动摘要 | |||
| if ($description == '' && $cfg_auot_description > 0) { | |||
| $description = cn_substr(html2text($body), $cfg_auot_description); | |||
| $description = trim(preg_replace('/#p#|#e#/', '', $description)); | |||
| $description = addslashes($description); | |||
| } | |||
| //自动获取缩略图 | |||
| if ($autolitpic == 1 && $litpic == '') { | |||
| $litpic = GetDDImgFromBody($body); | |||
| } | |||
| //自动获取关键词 | |||
| if ($autokey == 2 && $keywords == '') { | |||
| $subject = $title; | |||
| $message = $body; | |||
| //采用DedeBIZ Core分词组件分词 | |||
| if (!empty($cfg_bizcore_appid) && !empty($cfg_bizcore_key)) { | |||
| $keywords = ''; | |||
| $client = new DedeBizClient(); | |||
| $data = $client->Spliteword($subject.Html2Text($message)); | |||
| $keywords = $data->data; | |||
| $client->Close(); | |||
| } else { | |||
| include_once(DEDEINC.'/libraries/splitword.class.php'); | |||
| $keywords = ''; | |||
| $sp = new SplitWord($cfg_soft_lang, $cfg_soft_lang); | |||
| $sp->SetSource($subject, $cfg_soft_lang, $cfg_soft_lang); | |||
| $sp->StartAnalysis(); | |||
| $titleindexs = preg_replace("/#p#|#e#/", '', $sp->GetFinallyIndex()); | |||
| $sp->SetSource(Html2Text($message), $cfg_soft_lang, $cfg_soft_lang); | |||
| $sp->StartAnalysis(); | |||
| $allindexs = preg_replace("/#p#|#e#/", '', $sp->GetFinallyIndex()); | |||
| if (is_array($allindexs) && is_array($titleindexs)) { | |||
| foreach ($titleindexs as $k => $v) { | |||
| if (strlen($keywords.$k) >= 60) { | |||
| break; | |||
| } else { | |||
| if (strlen($k) <= 2) continue; | |||
| $keywords .= $k.','; | |||
| } | |||
| } | |||
| foreach ($allindexs as $k => $v) { | |||
| if (strlen($keywords.$k) >= 60) { | |||
| break; | |||
| } else if (!in_array($k, $titleindexs)) { | |||
| if (strlen($k) <= 2) continue; | |||
| $keywords .= $k.','; | |||
| } | |||
| } | |||
| } | |||
| $sp = null; | |||
| } | |||
| } | |||
| $body = GetFieldValueA($body, $dtype, $id); | |||
| $body = addslashes($body); | |||
| return $body; | |||
| } | |||
| /** | |||
| * 删除非站内链接 | |||
| * | |||
| * @access public | |||
| * @param string $body 文档 | |||
| * @param array $allow_urls 允许的超链接 | |||
| * @return string | |||
| */ | |||
| function Replace_Links(&$body, $allow_urls = array()) | |||
| { | |||
| $host_rule = join('|', $allow_urls); | |||
| $host_rule = preg_replace("#[\n\r]#", '', $host_rule); | |||
| $host_rule = str_replace('.', "\\.", $host_rule); | |||
| $host_rule = str_replace('/', "\\/", $host_rule); | |||
| $arr = array(); | |||
| preg_match_all("#<a([^>]*)>(.*)<\/a>#iU", $body, $arr); | |||
| if (is_array($arr[0])) { | |||
| $rparr = array(); | |||
| $tgarr = array(); | |||
| foreach ($arr[0] as $i => $v) { | |||
| if ($host_rule != '' && preg_match('#'.$host_rule.'#i', $arr[1][$i])) { | |||
| continue; | |||
| } else { | |||
| $rparr[] = $v; | |||
| $tgarr[] = $arr[2][$i]; | |||
| } | |||
| } | |||
| if (!empty($rparr)) { | |||
| $body = str_replace($rparr, $tgarr, $body); | |||
| } | |||
| } | |||
| $arr = $rparr = $tgarr = ''; | |||
| return $body; | |||
| } | |||
| /** | |||
| * 图片里大图的小图 | |||
| * | |||
| * @access public | |||
| * @param string $filename 图片名称 | |||
| * @param string $maxwidth 最大宽度 | |||
| * @return string | |||
| */ | |||
| function GetImageMapDD($filename, $maxwidth) | |||
| { | |||
| global $cuserLogin, $dsql, $cfg_ddimg_height, $cfg_ddimg_full; | |||
| $ddn = substr($filename, -3); | |||
| $ddpicok = preg_replace("#\.".$ddn."$#", "-ty.".$ddn, $filename); | |||
| $toFile = $GLOBALS['cfg_basedir'].$ddpicok; | |||
| if ($cfg_ddimg_full == 'Y') ImageResizeNew($GLOBALS['cfg_basedir'].$filename, $maxwidth, $cfg_ddimg_height, $toFile); | |||
| else ImageResize($GLOBALS['cfg_basedir'].$filename, $maxwidth, $cfg_ddimg_height, $toFile); | |||
| //保存图片附件信息 | |||
| $fsize = filesize($toFile); | |||
| $ddpicoks = explode('/', $ddpicok); | |||
| $filename = $ddpicoks[count($ddpicoks) - 1]; | |||
| $inquery = "INSERT INTO `#@__uploads` (arcid,title,url,mediatype,width,height,playtime,filesize,uptime,mid) VALUES ('0','$filename','$ddpicok','1','0','0','0','$fsize','".time()."','".$cuserLogin->getUserID()."'); "; | |||
| $dsql->ExecuteNoneQuery($inquery); | |||
| $fid = $dsql->GetLastID(); | |||
| AddMyAddon($fid, $ddpicok); | |||
| return $ddpicok; | |||
| } | |||
| /** | |||
| * 上传一个未经处理的图片 | |||
| * | |||
| * @access public | |||
| * @param string $upname 上传框名称 | |||
| * @param string $handurl 手工填写的网址 | |||
| * @param string $ddisremote 是否下载远程图片0不下,1下载 | |||
| * @param string $ntitle 注解文字,如果表单有title字段可不管 | |||
| * @return mixed | |||
| */ | |||
| function UploadOneImage($upname, $handurl = '', $isremote = 1, $ntitle = '') | |||
| { | |||
| global $cuserLogin, $cfg_basedir, $cfg_image_dir, $title, $dsql; | |||
| if ($ntitle != '') { | |||
| $title = $ntitle; | |||
| } | |||
| $ntime = time(); | |||
| $filename = ''; | |||
| $isrm_up = FALSE; | |||
| $handurl = trim($handurl); | |||
| //如果用户自行上传了图片 | |||
| if (!empty($_FILES[$upname]['tmp_name']) && is_uploaded_file($_FILES[$upname]['tmp_name'])) { | |||
| $istype = 0; | |||
| $sparr = array("image/pjpeg", "image/jpeg", "image/gif", "image/png"); | |||
| $_FILES[$upname]['type'] = strtolower(trim($_FILES[$upname]['type'])); | |||
| if (!in_array($_FILES[$upname]['type'], $sparr)) { | |||
| ShowMsg("上传的图片格式错误,请使用JPEG、GIF、PNG格式的其中一种", "-1"); | |||
| exit(); | |||
| } | |||
| if (!empty($handurl) && !preg_match("#^http:\/\/#i", $handurl) && file_exists($cfg_basedir.$handurl)) { | |||
| if (!is_object($dsql)) { | |||
| $dsql = new DedeSqli(); | |||
| } | |||
| $dsql->ExecuteNoneQuery("DELETE FROM `#@__uploads` WHERE url LIKE '$handurl' "); | |||
| $fullUrl = preg_replace("#\.([a-z]*)$#i", "", $handurl); | |||
| } else { | |||
| $savepath = $cfg_image_dir.'/'.date("%Y-%m", $ntime); | |||
| CreateDir($savepath); | |||
| $fullUrl = $savepath.'/'.date("%d", $ntime).dd2char(date("%H%M%S", $ntime).'0'.$cuserLogin->getUserID().'0'.mt_rand(1000, 9999)); | |||
| } | |||
| if (strtolower($_FILES[$upname]['type']) == "image/gif") { | |||
| $fullUrl = $fullUrl.".gif"; | |||
| } else if (strtolower($_FILES[$upname]['type']) == "image/png") { | |||
| $fullUrl = $fullUrl.".png"; | |||
| } else { | |||
| $fullUrl = $fullUrl.".jpg"; | |||
| } | |||
| $mime = get_mime_type($_FILES[$upname]['tmp_name']); | |||
| if (preg_match("#^unknow#", $mime)) { | |||
| ShowMsg("系统不支持fileinfo组件,建议php.ini中开启", -1); | |||
| exit; | |||
| } | |||
| if (!preg_match("#^(image|video|audio|application)#i", $mime)) { | |||
| ShowMsg("仅支持媒体文件及应用程序上传", -1); | |||
| exit; | |||
| } | |||
| //保存 | |||
| @move_uploaded_file($_FILES[$upname]['tmp_name'], $cfg_basedir.$fullUrl); | |||
| $filename = $fullUrl; | |||
| //水印 | |||
| @WaterImg($cfg_basedir.$fullUrl, 'up'); | |||
| $isrm_up = TRUE; | |||
| } else { | |||
| //远程或选择本地图片 | |||
| if ($handurl == '') { | |||
| return ''; | |||
| } | |||
| //远程图片并要求本地化 | |||
| if ($isremote == 1 && preg_match("#^http[s]?:\/\/#i", $handurl)) { | |||
| $ddinfos = GetRemoteImage($handurl, $cuserLogin->getUserID()); | |||
| if (!is_array($ddinfos)) { | |||
| $litpic = ""; | |||
| } else { | |||
| $filename = $ddinfos[0]; | |||
| } | |||
| $isrm_up = TRUE; | |||
| } else { | |||
| //本地图片或远程不要求本地化 | |||
| $filename = $handurl; | |||
| } | |||
| } | |||
| $imgfile = $cfg_basedir.$filename; | |||
| if (is_file($imgfile) && $isrm_up && $filename != '') { | |||
| $info = ""; | |||
| $imginfos = GetImageSize($imgfile, $info); | |||
| //把新上传的图片信息保存到媒体文档管理文档中 | |||
| $inquery = "INSERT INTO `#@__uploads` (title,url,mediatype,width,height,playtime,filesize,uptime,mid) VALUES ('$title','$filename','1','".$imginfos[0]."','".$imginfos[1]."','0','".filesize($imgfile)."','".time()."','".$cuserLogin->getUserID()."');"; | |||
| $dsql->ExecuteNoneQuery($inquery); | |||
| } | |||
| return $filename; | |||
| } | |||
| /** | |||
| * 获取更新测试信息 | |||
| * | |||
| * @access public | |||
| * @return string | |||
| */ | |||
| function GetUpdateTest() | |||
| { | |||
| global $arcID, $typeid, $cfg_make_andcat, $cfg_makeindex, $cfg_make_prenext; | |||
| $revalue = $dolist = ''; | |||
| if ($cfg_makeindex == 'Y' || $cfg_make_andcat == 'Y' || $cfg_make_prenext == 'Y') { | |||
| if ($cfg_make_prenext == 'Y' && !empty($typeid)) $dolist = 'makeprenext'; | |||
| if ($cfg_makeindex == 'Y') $dolist .= empty($dolist) ? 'makeindex' : ',makeindex'; | |||
| if ($cfg_make_andcat == 'Y') $dolist .= empty($dolist) ? 'makeparenttype' : ',makeparenttype'; | |||
| $dolists = explode(',', $dolist); | |||
| $jumpUrl = "task_do.php?typeid={$typeid}&aid={$arcID}&dopost={$dolists[0]}&nextdo=".preg_replace("#".$dolists[0]."[,]{0,1}#", '', $dolist); | |||
| $revalue = "<table id='tgtable' class='maintable my-3'><tr><td bgcolor='#f8f8f8'>正在进行相关文档更新,请完成前不要进行其它操作:\r\n</td></tr>\r\n"; | |||
| $revalue .= "<tr><td>\r\n<iframe name='stafrm' id='stafrm' frameborder='0' width='100%' height='200px' src='$jumpUrl'></iframe>\r\n</td></tr>\r\n"; | |||
| $revalue .= "</table>"; | |||
| } else { | |||
| $revalue = ''; | |||
| } | |||
| return $revalue; | |||
| } | |||
| ?> | |||
| @@ -0,0 +1,129 @@ | |||
| <?php | |||
| /** | |||
| * 后台管理菜单项 | |||
| * | |||
| * @version $id:inc_menu.php 10:32 2010年7月21日 tianya $ | |||
| * @package DedeBIZ.Administrator | |||
| * @copyright Copyright (c) 2022 DedeBIZ.COM | |||
| * @license https://www.dedebiz.com/license | |||
| * @link https://www.dedebiz.com | |||
| */ | |||
| require_once(dirname(__FILE__)."/../config.php"); | |||
| require_once(dirname(__FILE__)."/inc_menu_module.php"); | |||
| //载入可发布栏目 | |||
| $addset = ''; | |||
| //检测可用的文档模型 | |||
| if ($cfg_admin_channel = 'array' && count($admin_catalogs) > 0) { | |||
| $admin_catalog = join(',', $admin_catalogs); | |||
| $dsql->SetQuery("SELECT channeltype FROM `#@__arctype` WHERE id IN({$admin_catalog}) GROUP BY channeltype "); | |||
| } else { | |||
| $dsql->SetQuery("SELECT channeltype FROM `#@__arctype` GROUP BY channeltype "); | |||
| } | |||
| $dsql->Execute('mc'); | |||
| $candoChannel = ''; | |||
| while ($row = $dsql->GetObject('mc')) { | |||
| $candoChannel .= ($candoChannel == '' ? $row->channeltype : ','.$row->channeltype); | |||
| } | |||
| if (empty($candoChannel)) $candoChannel = 1; | |||
| $dsql->SetQuery("SELECT id,typename,addcon,mancon FROM `#@__channeltype` WHERE id IN({$candoChannel}) AND id<>-1 AND isshow=1 ORDER BY id ASC"); | |||
| $dsql->Execute('im'); | |||
| while ($row = $dsql->GetObject('im')) { | |||
| $addset .= "<m:item name='{$row->typename}' ischannel='1' link='{$row->mancon}?channelid={$row->id}' linkadd='{$row->addcon}?channelid={$row->id}' channelid='{$row->id}' rank='' target='main' />"; | |||
| } | |||
| $helpUrl = DEDEBIZURL."/help"; | |||
| $gitUrl = DEDEBIZURL."/git"; | |||
| $dedebizUrl = DEDEBIZURL; | |||
| $adminMenu1 = $adminMenu2 = ''; | |||
| if ($cuserLogin->getUserType() >= 10) { | |||
| $adminMenu1 = (DEDEBIZ_SAFE_MODE? "" : "<m:top item='11_' name='模板管理' rank='temp_One,temp_Other,temp_MyTag,temp_test,temp_All' icon='fa-cube'> | |||
| <m:item name='默认模板管理' link='templets_main.php' rank='temp_All' target='main' /> | |||
| <m:item name='标签源码管理' link='templets_tagsource.php' rank='temp_All' target='main' /> | |||
| <m:item name='智能标记向导' link='mytag_tag_guide.php' rank='temp_Other' target='main' /> | |||
| <m:item name='全局标记测试' link='tag_test.php' rank='temp_Test' target='main' /> | |||
| </m:top>")." | |||
| <m:top item='4_' name='文档模型' rank='t_List,t_AccList,c_List,temp_One' icon='fa-area-chart'> | |||
| <m:item name='文档模型管理' link='mychannel_main.php' rank='c_List' target='main' /> | |||
| <m:item name='文档单页管理' link='templets_one.php' rank='temp_One' target='main' /> | |||
| <m:item name='联动类别管理' link='stepselect_main.php' rank='c_Stepseclect' target='main' /> | |||
| <m:item name='自由列表管理' link='freelist_main.php' rank='c_List' target='main' /> | |||
| <m:item name='自定义宏标记' link='mytag_main.php' rank='temp_MyTag' target='main' /> | |||
| <m:item name='自定义文档属性' link='content_att.php' rank='sys_Att' target='main' /> | |||
| <m:item name='自定义表单管理' link='diy_main.php' rank='c_List' target='main' /> | |||
| </m:top>"; | |||
| $adminMenu2 = "<m:top item='10_' name='支付工具' rank='sys_Data' icon='fa-credit-card'> | |||
| <m:item name='积分产品管理' link='cards_manage.php' rank='sys_Data' target='main' /> | |||
| <m:item name='积分产品分类' link='cards_type.php' rank='sys_Data' target='main' /> | |||
| <m:item name='会员消费记录' link='member_operations.php' rank='sys_Data' target='main' /> | |||
| <m:item name='会员等级分类' link='member_type.php' rank='sys_Data' target='main' /> | |||
| <m:item name='支付接口设置' link='sys_payment.php' .php' rank='sys_Data' target='main' /> | |||
| </m:top> | |||
| <m:top item='12_' name='系统设置' rank='sys_User,sys_Group,sys_Edit,sys_Log,sys_Data' icon='fa-cog'> | |||
| <m:item name='系统配置变量' link='sys_info.php' rank='sys_Edit' target='main' /> | |||
| <m:item name='系统日志管理' link='log_list.php' rank='sys_Log' target='main' /> | |||
| <m:item name='系统会员管理' link='sys_admin_user.php' rank='sys_User' target='main' /> | |||
| <m:item name='系统会员组管理' link='sys_group.php' rank='sys_Group' target='main' /> | |||
| <m:item name='图片水印设置' link='sys_info_mark.php' rank='sys_Edit' target='main' /> | |||
| <m:item name='软件下载设置' link='soft_config.php' rank='sys_SoftConfig' target='main' /> | |||
| <m:item name='防采集小工具' link='article_string_mix.php' rank='sys_StringMix' target='main' /> | |||
| ".(DEDEBIZ_SAFE_MODE? "" : "<m:item name='数据备份还原' link='sys_data.php' rank='sys_Data' target='main' />")." | |||
| ".(DEDEBIZ_SAFE_MODE? "" : "<m:item name='SQL命令工具' link='sys_sql_query.php' rank='sys_Data' target='main' />")." | |||
| <m:item name='文件扫描工具' link='sys_safetest.php' rank='sys_verify' target='main' /> | |||
| <m:item name='系统修复工具' link='sys_repair.php' rank='sys_verify' target='main' /> | |||
| </m:top>"; | |||
| } | |||
| $menusMain = "<m:top item='1_' name='常用操作' icon='fa-desktop'> | |||
| <m:item name='网站栏目管理' link='catalog_main.php' ischannel='1' addalt='创建栏目' linkadd='catalog_add.php?listtype=all' rank='t_List,t_AccList' target='main' /> | |||
| <m:item name='所有文档列表' link='content_list.php' rank='a_List,a_AccList' target='main' /> | |||
| <m:item name='待审核的文档' link='content_list.php?arcrank=-1' rank='a_Check,a_AccCheck' target='main' /> | |||
| <m:item name='我发布的文档' link='content_list.php?mid=".$cuserLogin->getUserID()."' rank='a_List,a_AccList,a_MyList' target='main' /> | |||
| <m:item name='标签管理' link='tags_main.php' rank='sys_Keyword' target='main' /> | |||
| <m:item name='评论管理' link='feedback_main.php' rank='sys_Feedback' target='main' /> | |||
| <m:item name='专题管理' ischannel='1' link='content_s_list.php' linkadd='spec_add.php' channelid='-1' rank='spec_New' target='main' /> | |||
| <m:item name='文档回收站' link='recycling.php' ischannel='1' addalt='清空文档' addico='fa-minus-circle' linkadd='archives_do.php?dopost=clear&aid=no&recycle=1' rank='a_List,a_AccList,a_MyList' target='main' /> | |||
| </m:top> | |||
| <m:top item='2_' name='文档管理' icon='fa-file-text'> | |||
| $addset | |||
| </m:top> | |||
| <m:top item='3_' name='附件管理' rank='sys_Upload,sys_MyUpload,plus_文件管理器' icon='fa-folder'> | |||
| <m:item name='上传新文件' link='media_add.php' rank='' target='main' /> | |||
| <m:item name='附件管理' link='media_main.php' rank='sys_Upload,sys_MyUpload' target='main' /> | |||
| <m:item name='文件管理器' link='media_main.php?dopost=filemanager' rank='plus_文件管理器' target='main' /> | |||
| </m:top> | |||
| $adminMenu1 | |||
| <m:top item='5_' name='批量维护' icon='fa-circle-o-notch'> | |||
| <m:item name='文档批量维护' link='content_batch_up.php' rank='sys_ArcBatch' target='main' /> | |||
| <m:item name='文档重复检测' link='article_test_same.php' rank='sys_ArcBatch' target='main' /> | |||
| <m:item name='文档关键词维护' link='article_keywords_main.php' rank='sys_Keyword' target='main' /> | |||
| <m:item name='搜索关键词维护' link='search_keywords_main.php' rank='sys_Keyword' target='main' /> | |||
| <m:item name='自动摘要分页' link='article_description_main.php' rank='sys_Keyword' target='main' /> | |||
| ".(DEDEBIZ_SAFE_MODE? "" : "<m:item name='数据库字段替换' link='sys_data_replace.php' rank='sys_ArcBatch' target='main' />")." | |||
| </m:top> | |||
| {$GLOBALS['menusMoudle']} | |||
| <m:top item='8_' name='更新电脑端' rank='sys_MakeHtml' icon='fa-repeat'> | |||
| <m:item name='更新整站' link='makehtml_all.php' rank='sys_MakeHtml' target='main' /> | |||
| <m:item name='更新首页' link='makehtml_homepage.php' rank='sys_MakeHtml' target='main' /> | |||
| <m:item name='更新栏目' link='makehtml_list.php' rank='sys_MakeHtml' target='main' /> | |||
| <m:item name='更新文档' link='makehtml_archives.php' rank='sys_MakeHtml' target='main' /> | |||
| <m:item name='更新标签' link='makehtml_taglist.php' rank='sys_MakeHtml' target='main' /> | |||
| <m:item name='更新专题' link='makehtml_spec.php' rank='sys_MakeHtml' target='main' /> | |||
| <m:item name='更新缓存' link='sys_cache_up.php' rank='sys_ArcBatch' target='main' /> | |||
| </m:top> | |||
| <m:top item='8_' name='更新手机端' rank='sys_m_MakeHtml' icon='fa-spinner'> | |||
| <m:item name='手机端配置' link='makehtml_m_config.php' rank='sys_m_MakeHtml' target='main' /> | |||
| <m:item name='更新整站' link='makehtml_m_all.php' rank='sys_m_MakeHtml' target='main' /> | |||
| <m:item name='更新首页' link='makehtml_m_homepage.php' rank='sys_m_MakeHtml' target='main' /> | |||
| <m:item name='更新栏目' link='makehtml_m_list.php' rank='sys_m_MakeHtml' target='main' /> | |||
| <m:item name='更新文档' link='makehtml_m_archives.php' rank='sys_m_MakeHtml' target='main' /> | |||
| </m:top> | |||
| <m:top item='9_' name='会员管理' rank='member_List,member_Type' icon='fa-user-circle'> | |||
| <m:item name='所有会员列表' link='member_main.php' rank='member_List' target='main' /> | |||
| <m:item name='会员短信管理' link='member_pm.php' rank='member_Type' target='main' /> | |||
| <m:item name='会员级别设置' link='member_rank.php' rank='member_Type' target='main' /> | |||
| <m:item name='积分头衔设置' link='member_scores.php' rank='member_Type' target='main' /> | |||
| </m:top> | |||
| $adminMenu2 | |||
| <m:top item='12_' name='系统帮助' icon='fa-info-circle'> | |||
| <m:item name='系统概况' link='$cfg_biz_helpUrl' rank='' target='_blank' /> | |||
| <m:item name='代码托管' link='$cfg_biz_gitUrl' rank='' target='_blank' /> | |||
| </m:top>"; | |||
| ?> | |||
| @@ -0,0 +1,136 @@ | |||
| <?php | |||
| /** | |||
| * 更新手机端所有页面 | |||
| * | |||
| * @version $id:makehtml_m_all.php 10:46 2023年1月10日 xushubieli $ | |||
| * @package DedeBIZ.Administrator | |||
| * @copyright Copyright (c) 2022 DedeBIZ.COM | |||
| * @license https://www.dedebiz.com/license | |||
| * @link https://www.dedebiz.com | |||
| */ | |||
| require_once(dirname(__FILE__)."/config.php"); | |||
| require_once(DEDEINC."/channelunit.func.php"); | |||
| $action = (empty($action) ? '' : $action); | |||
| if ($action == '') { | |||
| require_once(DEDEADMIN."/templets/makehtml_m_all.htm"); | |||
| exit(); | |||
| } else if ($action == 'make') { | |||
| //step = 1更新首页,step = 2更新文档,step = 3更新栏目 | |||
| if (empty($step)) $step = 1; | |||
| //更新文档前优化数据 | |||
| if ($step == 1) { | |||
| $starttime = GetMkTime($starttime); | |||
| $mkvalue = ($uptype == 'time' ? $starttime : $startid); | |||
| OptimizeData($dsql); | |||
| ShowMsg("完成数据优化,开始更新文档", "makehtml_m_all.php?action=make&step=2&uptype=$uptype&mkvalue=$mkvalue"); | |||
| exit(); | |||
| } | |||
| //更新文档 | |||
| else if ($step == 2) { | |||
| include_once(DEDEADMIN."/makehtml_m_archives_action.php"); | |||
| exit(); | |||
| } | |||
| //更新首页 | |||
| if ($step == 3) { | |||
| include_once(DEDEINC."/archive/partview.class.php"); | |||
| $pv = new PartView(); | |||
| $row = $pv->dsql->GetOne("SELECT * FROM `#@__homepageset`"); | |||
| $templet = str_replace("{style}", $cfg_df_style, $row['templet']); | |||
| $homeFile = DEDEADMIN.'/'.$row['position']; | |||
| $homeFile = str_replace("\\", '/', $homeFile); | |||
| $homeFile = preg_replace("#\/{1,}#", '/', $homeFile); | |||
| if ($row['showmod'] == 1) { | |||
| $pv->SetTemplet($cfg_basedir.$cfg_templets_dir.'/'.$templet); | |||
| $pv->SaveToHtml($homeFile); | |||
| $pv->Close(); | |||
| } else { | |||
| if (file_exists($homeFile)) echo "启用静态更新,建议删除"+$homeFile; | |||
| } | |||
| ShowMsg("完成所有文档更新,开始更新栏目", "makehtml_m_all.php?action=make&step=4&uptype=$uptype&mkvalue=$mkvalue"); | |||
| exit(); | |||
| } | |||
| //更新栏目 | |||
| else if ($step == 4) { | |||
| $mkvalue = intval($mkvalue); | |||
| $typeidsok = $typeids = array(); | |||
| $adminID = $cuserLogin->getUserID(); | |||
| $mkcachefile = DEDEDATA."/mkall_cache_{$adminID}.php"; | |||
| if ($uptype == 'all' || empty($mkvalue)) { | |||
| ShowMsg("不需要进行初处理,开始更新所有栏目", "makehtml_m_list_action.php?gotype=mkallct"); | |||
| exit(); | |||
| } else { | |||
| if ($uptype == 'time') { | |||
| $query = "SELECT DISTINCT typeid FROM `#@__arctiny` WHERE senddate >=".GetMkTime($mkvalue)." AND arcrank>-1"; | |||
| } else { | |||
| $query = "SELECT DISTINCT typeid FROM `#@__arctiny` WHERE id>=$mkvalue AND arcrank>-1"; | |||
| } | |||
| $dsql->SetQuery($query); | |||
| $dsql->Execute(); | |||
| while ($row = $dsql->GetArray()) { | |||
| $typeids[$row['typeid']] = 1; | |||
| } | |||
| foreach ($typeids as $k => $v) { | |||
| $vs = array(); | |||
| $vs = GetParentIds($k); | |||
| if (!isset($typeidsok[$k])) { | |||
| $typeidsok[$k] = 1; | |||
| } | |||
| foreach ($vs as $k => $v) { | |||
| if (!isset($typeidsok[$v])) { | |||
| $typeidsok[$v] = 1; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| $fp = fopen($mkcachefile, 'w') or die("无法写入缓存文件<span class='text-primary'>{$mkcachefile}</span>所以无法更新栏目"); | |||
| if (count($typeidsok) > 0) { | |||
| fwrite($fp, "<"."?php\r\n"); | |||
| $i = -1; | |||
| foreach ($typeidsok as $k => $t) { | |||
| if ($k != '') { | |||
| $i++; | |||
| fwrite($fp, "\$idArray[$i]={$k};\r\n"); | |||
| } | |||
| } | |||
| fwrite($fp, "?".">"); | |||
| fclose($fp); | |||
| ShowMsg("完成栏目缓存处理,开始更新栏目", "makehtml_m_list_action.php?gotype=mkall"); | |||
| exit(); | |||
| } else { | |||
| fclose($fp); | |||
| ShowMsg("没有可更新的栏目,最后数据优化", "makehtml_m_all.php?action=make&step=10"); | |||
| exit(); | |||
| } | |||
| } | |||
| //成功状态 | |||
| else if ($step == 10) { | |||
| $adminID = $cuserLogin->getUserID(); | |||
| $mkcachefile = DEDEDATA."/mkall_cache_{$adminID}.php"; | |||
| @unlink($mkcachefile); | |||
| OptimizeData($dsql); | |||
| ShowMsg("完成所有栏目文档更新", "javascript:;"); | |||
| exit(); | |||
| }//make step | |||
| }//action=='make' | |||
| /** | |||
| * 优化数据 | |||
| * | |||
| * @access public | |||
| * @param object $dsql 数据库对象 | |||
| * @return void | |||
| */ | |||
| function OptimizeData($dsql) | |||
| { | |||
| global $cfg_dbprefix; | |||
| $tptables = array("{$cfg_dbprefix}archives", "{$cfg_dbprefix}arctiny"); | |||
| $dsql->SetQuery("SELECT maintable,addtable FROM `#@__channeltype`"); | |||
| $dsql->Execute(); | |||
| while ($row = $dsql->GetObject()) { | |||
| $addtable = str_replace('#@__', $cfg_dbprefix, $row->addtable); | |||
| if ($addtable != '' && !in_array($addtable, $tptables)) $tptables[] = $addtable; | |||
| } | |||
| $tptable = ''; | |||
| foreach ($tptables as $t) $tptable .= ($tptable == '' ? "`{$t}`" : ",`{$t}`"); | |||
| $dsql->ExecuteNoneQuery(" OPTIMIZE TABLE $tptable; "); | |||
| } | |||
| ?> | |||
| @@ -0,0 +1,14 @@ | |||
| <?php | |||
| /** | |||
| * 更新手机端文档 | |||
| * | |||
| * @version $id:makehtml_m_archives.php 10:46 2023年1月10日 xushubieli $ | |||
| * @package DedeBIZ.Administrator | |||
| * @copyright Copyright (c) 2022 DedeBIZ.COM | |||
| * @license https://www.dedebiz.com/license | |||
| * @link https://www.dedebiz.com | |||
| */ | |||
| require_once(dirname(__FILE__)."/config.php"); | |||
| require_once(DEDEINC."/typelink/typelink.class.php"); | |||
| include DedeInclude('templets/makehtml_m_archives.htm'); | |||
| ?> | |||
| @@ -0,0 +1,113 @@ | |||
| <?php | |||
| /** | |||
| * 更新手机端文档操作 | |||
| * | |||
| * @version $id:makehtml_m_archives_action.php 10:46 2023年1月10日 xushubieli $ | |||
| * @package DedeBIZ.Administrator | |||
| * @copyright Copyright (c) 2022 DedeBIZ.COM | |||
| * @license https://www.dedebiz.com/license | |||
| * @link https://www.dedebiz.com | |||
| */ | |||
| require_once(dirname(__FILE__)."/config.php"); | |||
| CheckPurview('sys_m_MakeHtml'); | |||
| require_once(DEDEINC."/archive/archives.m.class.php"); | |||
| $est1 = ExecTime(); | |||
| $startid = (empty($startid) ? -1 : $startid); | |||
| $endid = (empty($endid) ? 0 : $endid); | |||
| $startdd = (empty($startdd) ? 0 : $startdd); | |||
| $pagesize = (empty($pagesize) ? 30 : $pagesize); | |||
| $totalnum = (empty($totalnum) ? 0 : $totalnum); | |||
| $typeid = (empty($typeid) ? 0 : $typeid); | |||
| $seltime = (empty($seltime) ? 0 : $seltime); | |||
| $stime = (empty($stime) ? '' : $stime); | |||
| $etime = (empty($etime) ? '' : $etime); | |||
| $sstime = (empty($sstime) ? 0 : $sstime); | |||
| $mkvalue = (empty($mkvalue) ? 0 : $mkvalue); | |||
| $isremote = (empty($isremote)? 0 : $isremote); | |||
| $serviterm = empty($serviterm)? "" : $serviterm; | |||
| //一键更新传递的参数 | |||
| if (!empty($uptype)) { | |||
| if ($uptype != 'time') $startid = $mkvalue; | |||
| else $t1 = $mkvalue; | |||
| } else { | |||
| $uptype = ''; | |||
| } | |||
| //获取条件 | |||
| $idsql = ''; | |||
| $gwhere = ($startid == -1 ? " WHERE arcrank=0 " : " WHERE id>=$startid AND arcrank=0 "); | |||
| if ($endid > $startid && $startid > 0) $gwhere .= " AND id <= $endid "; | |||
| if ($typeid != 0) { | |||
| $ids = GetSonIds($typeid); | |||
| $gwhere .= " AND typeid in($ids) "; | |||
| } | |||
| if ($idsql == '') $idsql = $gwhere; | |||
| if ($seltime == 1) { | |||
| $t1 = GetMkTime($stime); | |||
| $t2 = GetMkTime($etime); | |||
| $idsql .= " And (senddate >= $t1 And senddate <= $t2) "; | |||
| } else if (isset($t1) && is_numeric($t1)) { | |||
| $idsql .= " And senddate >= $t1 "; | |||
| } | |||
| //统计记录总数 | |||
| if ($totalnum == 0) { | |||
| $row = $dsql->GetOne("SELECT COUNT(*) AS dd FROM `#@__arctiny` $idsql"); | |||
| $totalnum = $row['dd']; | |||
| //清空缓存 | |||
| $dsql->ExecuteNoneQuery("DELETE FROM `#@__arccache`"); | |||
| } | |||
| //获取记录,并更新网页 | |||
| if ($totalnum > $startdd + $pagesize) { | |||
| $limitSql = " LIMIT $startdd,$pagesize"; | |||
| } else { | |||
| $limitSql = " LIMIT $startdd,".($totalnum - $startdd); | |||
| } | |||
| $tjnum = $startdd; | |||
| if (empty($sstime)) $sstime = time(); | |||
| //如果更新数量大于500,并且没选栏目,按栏目排序更新 | |||
| if ($totalnum > 500 && empty($typeid)) { | |||
| $dsql->Execute('out', "SELECT id FROM `#@__arctiny` $idsql ORDER BY typeid ASC $limitSql"); | |||
| } else { | |||
| $dsql->Execute('out', "SELECT id FROM `#@__arctiny` $idsql $limitSql"); | |||
| } | |||
| if ($cfg_remote_site=='Y' && $isremote=="1") { | |||
| if ($serviterm!="") { | |||
| list($servurl, $servuser, $servpwd) = explode(',', $serviterm); | |||
| $config = array( 'hostname' => $servurl, 'username' => $servuser, 'password' => $servpwd,'debug' => 'TRUE'); | |||
| } else { | |||
| $config=array(); | |||
| } | |||
| if(!$ftp->connect($config)) exit('Error:None FTP Connection!'); | |||
| } | |||
| while ($row = $dsql->GetObject('out')) { | |||
| $tjnum++; | |||
| $id = $row->id; | |||
| $ac = new ArchivesMobile($id); | |||
| $rurl = $ac->MakeHtml($isremote); | |||
| } | |||
| $t2 = ExecTime(); | |||
| $t2 = ($t2 - $est1); | |||
| $ttime = time() - $sstime; | |||
| $ttime = number_format(($ttime / 60), 2); | |||
| //返回提示信息 | |||
| $tjlen = $totalnum > 0 ? ceil(($tjnum / $totalnum) * 100) : 100; | |||
| $tjsta = "<div style='margin:0 auto 20px;width:360px;height:16px;text-align:left;border:1px solid #1eb867;border-radius:.2rem'><div style='max-width:360px;width:$tjlen%;height:16px;background:#1eb867'></div></div>"; | |||
| $tjsta .= "到达位置<span class='text-primary'>".($startdd + $pagesize)."</span>,用时<span class='text-primary'>{$ttime}</span>分钟,完成更新文档总数<span class='text-primary'>$tjlen</span>%"; | |||
| //速度测试 | |||
| if ($tjnum < $totalnum) { | |||
| $nurl = "makehtml_m_archives_action.php?endid=$endid&startid=$startid&typeid=$typeid"; | |||
| $nurl .= "&totalnum=$totalnum&startdd=".($startdd + $pagesize)."&pagesize=$pagesize"; | |||
| $nurl .= "&seltime=$seltime&sstime=$sstime&stime=".urlencode($stime)."&etime=".urlencode($etime)."&uptype=$uptype&mkvalue=$mkvalue"; | |||
| ShowMsg($tjsta, $nurl, 0, 100); | |||
| exit(); | |||
| } else { | |||
| if ($typeid != '') { | |||
| ShowMsg("更新文档<span class='text-primary'>$totalnum</span>,用时<span class='text-primary'>{$ttime}</span>分钟,开始更新栏目", "makehtml_m_list_action.php?typeid=$typeid&uptype=all&maxpagesize=50&upnext=1"); | |||
| } else { | |||
| if ($uptype == '') { | |||
| ShowMsg("更新文档<span class='text-primary'>$totalnum</span>,用时<span class='text-primary'>{$ttime}</span>分钟,完成所有文档更新", "javascript:;"); | |||
| } else { | |||
| ShowMsg("完成所有文档更新,开始更新首页", "makehtml_m_all.php?action=make&step=3&uptype=$uptype&mkvalue=$mkvalue"); | |||
| } | |||
| } | |||
| } | |||
| ?> | |||
| @@ -0,0 +1,98 @@ | |||
| <?php | |||
| /** | |||
| * 手机端配置 | |||
| * | |||
| * @version $id:makehtml_m_config.php 10:46 2023年1月10日 xushubieli $ | |||
| * @package DedeBIZ.Libraries | |||
| * @copyright Copyright (c) 2022, DedeBIZ.COM | |||
| * @license https://www.dedebiz.com/license | |||
| * @link https://www.dedebiz.com | |||
| */ | |||
| require_once(dirname(__FILE__)."/config.php"); | |||
| if (empty($dopost)) $dopost = ""; | |||
| $configfile = DEDEDATA.'/config.cache.inc.php'; | |||
| //更新配置函数 | |||
| function ReWriteConfig() | |||
| { | |||
| global $dsql, $configfile; | |||
| if (!is_writeable($configfile)) { | |||
| echo "配置文件<span class='text-primary'>{$configfile}</span>不支持写入,修改手机端更新配置失败"; | |||
| exit(); | |||
| } | |||
| $fp = fopen($configfile,'w'); | |||
| flock ($fp,3); | |||
| fwrite ($fp,"<"."?php\r\n"); | |||
| $dsql->SetQuery("SELECT `varname`,`type`,`value`,`groupid` FROM `#@__sysconfig` ORDER BY aid ASC"); | |||
| $dsql->Execute(); | |||
| while($row = $dsql->GetArray()) | |||
| { | |||
| if ($row['type']=='number') { | |||
| if ($row['value']=='') $row['value'] = 0; | |||
| fwrite($fp,"\${$row['varname']} = ".$row['value'].";\r\n"); | |||
| } else { | |||
| fwrite($fp,"\${$row['varname']} = '".str_replace("'",'',$row['value'])."';\r\n"); | |||
| } | |||
| } | |||
| fwrite($fp,"?".">"); | |||
| fclose($fp); | |||
| } | |||
| function checkMobileTemplate() | |||
| { | |||
| global $dsql, $cfg_basedir, $cfg_templets_dir, $dedebiz_path; | |||
| if (!$dedebiz_path) $dedebiz_path = '/m/'; | |||
| $row = $dsql->GetOne("SELECT * FROM `#@__homepageset`"); | |||
| $row['templet'] = MfTemplet($row['templet']); | |||
| $row['templet'] =str_replace('.htm','_m.htm',$row['templet']); | |||
| $index_path = $cfg_basedir.$cfg_templets_dir."/".$row['templet']; | |||
| $content = file_get_contents($index_path); | |||
| } | |||
| function getRandString() | |||
| { | |||
| $str = strtoupper(md5(uniqid(md5(microtime(true)),true))); | |||
| return substr($str,0,8).'-'.substr($str,8,4).'-'.substr($str,12,4).'-'.substr($str,16,4).'-'.substr($str,20); | |||
| } | |||
| //保存配置的改动 | |||
| if ($dopost=="save") { | |||
| $info = $_POST['info']; | |||
| $data = $_POST['data']; | |||
| foreach($data as $k=>$v) | |||
| { | |||
| $row = $dsql->GetOne("SELECT varname FROM `#@__sysconfig` WHERE varname LIKE '$k'"); | |||
| if (is_array($row)) { | |||
| //存在就更新 | |||
| $dsql->ExecuteNoneQuery("UPDATE `#@__sysconfig` SET `value`='$v' WHERE varname='$k'"); | |||
| } else { | |||
| $row = $dsql->GetOne("SELECT aid FROM `#@__sysconfig` ORDER BY aid DESC"); | |||
| $aid = $row['aid'] + 1; | |||
| $inquery = "INSERT INTO `#@__sysconfig`(`aid`,`varname`,`info`,`value`,`type`,`groupid`) VALUES ('$aid','$k','{$info[$k]}','$v','string','8')"; | |||
| $rs = $dsql->ExecuteNoneQuery($inquery); | |||
| if (!$rs) { | |||
| ShowMsg("存在非法字符"); | |||
| exit(); | |||
| } | |||
| if (!is_writeable($configfile)) { | |||
| ShowMsg("由于<span class='text-primary'>$configfile</span>无法写入,修改手机端更新配置失败"); | |||
| exit(); | |||
| } | |||
| } | |||
| } | |||
| ReWriteConfig(); | |||
| ShowMsg("成功修改手机端更新配置", "makehtml_m_config.php"); | |||
| exit(); | |||
| } | |||
| $dsql->SetQuery("SELECT * FROM `#@__sysconfig` WHERE groupid='8' ORDER BY aid ASC"); | |||
| $dsql->Execute(); | |||
| $i = 1; | |||
| $data = array(); | |||
| while ($row = $dsql->GetArray()) { | |||
| $data[$row['varname']] = $row['value']; | |||
| $i++; | |||
| } | |||
| if (!isset($data['dedebiz_usetype']) && !isset($data['dedebiz_usetype'])){ | |||
| $data['dedebiz_usetype'] = 1; | |||
| $data['dedebiz_usearc'] = 1; | |||
| } | |||
| //检查手机端模板路径 | |||
| $msg = checkMobileTemplate(); | |||
| include DedeInclude('templets/makehtml_m_config.htm'); | |||
| ?> | |||
| @@ -0,0 +1,27 @@ | |||
| <?php | |||
| /** | |||
| * 更新手机端首页 | |||
| * | |||
| * @version $id:makehtml_m_homepage.php 15:15 2022年3月10日 xushubieli $ | |||
| * @package DedeBIZ.Libraries | |||
| * @copyright Copyright (c) 2022, DedeBIZ.COM | |||
| * @license https://www.dedebiz.com/license | |||
| * @link https://www.dedebiz.com | |||
| */ | |||
| require_once (dirname(__FILE__)."/../system/common.inc.php"); | |||
| require_once DEDEINC."/archive/partview.class.php"; | |||
| $GLOBALS['_arclistEnv'] = 'index'; | |||
| $row = $dsql->GetOne("SELECT * FROM `#@__homepageset`"); | |||
| $row['templet'] = MfTemplet($row['templet']); | |||
| $pv = new PartView(); | |||
| $row['templet'] =str_replace('.htm','_m.htm',$row['templet']); | |||
| if (!file_exists($cfg_basedir.$cfg_templets_dir."/".$row['templet'])) { | |||
| echo "主题模板文件不存在,无法显示网页"; | |||
| exit(); | |||
| } | |||
| $pv->SetTemplet($cfg_basedir.$cfg_templets_dir."/".$row['templet']); | |||
| $row['showmod'] = isset($row['showmod'])? $row['showmod'] : 0; | |||
| $GLOBALS['dedebiz_path'] = isset($GLOBALS['dedebiz_path']) ? $GLOBALS['dedebiz_path'] : '/m'; | |||
| $pv->SaveToHtml(DEDEROOT.$GLOBALS['dedebiz_path'].'/index.html'); | |||
| ShowMsg("更新手机端首页成功,<a href='{$GLOBALS['dedebiz_path']}/index.html' target='_blank' class='txt-success'>浏览首页</a>","javascript:;"); | |||
| ?> | |||
| @@ -0,0 +1,14 @@ | |||
| <?php | |||
| /** | |||
| * 更新手机端列表栏目 | |||
| * | |||
| * @version $id:makehtml_m_list.php 10:46 2023年1月10日 xushubieli $ | |||
| * @package DedeBIZ.Administrator | |||
| * @copyright Copyright (c) 2022 DedeBIZ.COM | |||
| * @license https://www.dedebiz.com/license | |||
| * @link https://www.dedebiz.com | |||
| */ | |||
| require_once(dirname(__FILE__)."/config.php"); | |||
| require_once(DEDEINC."/typelink/typelink.class.php"); | |||
| include DedeInclude('templets/makehtml_m_list.htm'); | |||
| ?> | |||
| @@ -0,0 +1,125 @@ | |||
| <?php | |||
| /** | |||
| * 更新手机端列表栏目操作 | |||
| * | |||
| * @version $id:makehtml_m_list_action.php 10:46 2023年1月10日 xushubieli $ | |||
| * @package DedeBIZ.Administrator | |||
| * @copyright Copyright (c) 2022 DedeBIZ.COM | |||
| * @license https://www.dedebiz.com/license | |||
| * @link https://www.dedebiz.com | |||
| */ | |||
| require_once(dirname(__FILE__)."/config.php"); | |||
| CheckPurview('sys_m_MakeHtml'); | |||
| require_once(DEDEDATA."/cache/inc_catalog_base.inc"); | |||
| require_once(DEDEINC."/channelunit.func.php"); | |||
| if (!isset($upnext)) $upnext = 1; | |||
| if (empty($gotype)) $gotype = ''; | |||
| if (empty($pageno)) $pageno = 0; | |||
| if (empty($mkpage)) $mkpage = 1; | |||
| if (empty($typeid)) $typeid = 0; | |||
| if (!isset($uppage)) $uppage = 0; | |||
| if (empty($maxpagesize)) $maxpagesize = 30; | |||
| $adminID = $cuserLogin->getUserID(); | |||
| $isremote = (empty($isremote) ? 0 : $isremote); | |||
| $serviterm = empty($serviterm)? "" : $serviterm; | |||
| //检测获取所有栏目id,普通更新或一键更新时更新所有栏目 | |||
| if ($gotype == '' || $gotype == 'mkallct') { | |||
| if ($upnext == 1 || $typeid == 0) { | |||
| if ($typeid > 0) { | |||
| $tidss = GetSonIds($typeid, 0); | |||
| $idArray = explode(',', $tidss); | |||
| } else { | |||
| foreach ($cfg_Cs as $k => $v) $idArray[] = $k; | |||
| } | |||
| } else { | |||
| $idArray = array(); | |||
| $idArray[] = $typeid; | |||
| } | |||
| } | |||
| //一键更新带缓存的情况 | |||
| else if ($gotype == 'mkall') { | |||
| $uppage = 1; | |||
| $mkcachefile = DEDEDATA."/mkall_cache_{$adminID}.php"; | |||
| $idArray = array(); | |||
| if (file_exists($mkcachefile)) require_once($mkcachefile); | |||
| } | |||
| //当前更新栏目id | |||
| $totalpage = count($idArray); | |||
| if (isset($idArray[$pageno])) { | |||
| $tid = $idArray[$pageno]; | |||
| } else { | |||
| if ($gotype == '') { | |||
| ShowMsg("完成所有栏目更新", "javascript:;"); | |||
| exit(); | |||
| } else if ($gotype == 'mkall' || $gotype == 'mkallct') { | |||
| ShowMsg("完成所有栏目更新,最后数据优化", "makehtml_m_all.php?action=make&step=10"); | |||
| exit(); | |||
| } | |||
| } | |||
| if ($pageno == 0 && $mkpage == 1) //清空缓存 | |||
| { | |||
| $dsql->ExecuteNoneQuery("DELETE FROM `#@__arccache`"); | |||
| } | |||
| $reurl = ''; | |||
| //更新数组所记录栏目 | |||
| if (!empty($tid)) { | |||
| if (!isset($cfg_Cs[$tid])) { | |||
| ShowMsg('没有该栏目数据,可能缓存文件没有更新,请检查是否有写入权限', 'javascript:;'); | |||
| exit(); | |||
| } | |||
| if ($cfg_Cs[$tid][1] > 0) { | |||
| require_once(DEDEINC."/archive/listview.m.class.php"); | |||
| $lv = new ListViewMobile($tid); | |||
| $position = MfTypedir($lv->Fields['typedir']); | |||
| } else { | |||
| require_once(DEDEINC."/archive/sglistview.class.php"); | |||
| $lv = new SgListView($tid); | |||
| } | |||
| //这里统一统计 | |||
| $lv->CountRecord(); | |||
| if ($lv->TypeLink->TypeInfos['ispart'] == 0 && $lv->TypeLink->TypeInfos['isdefault'] != -1) $ntotalpage = $lv->TotalPage; | |||
| else $ntotalpage = 1; | |||
| if ($cfg_remote_site=='Y' && $isremote=="1") { | |||
| if ($serviterm!="") { | |||
| list($servurl, $servuser, $servpwd) = explode(',',$serviterm); | |||
| $config = array('hostname' => $servurl, 'username' => $servuser, 'password' => $servpwd,'debug' => 'TRUE'); | |||
| } else { | |||
| $config=array(); | |||
| } | |||
| if (!$ftp->connect($config)) exit('Error:None FTP Connection!'); | |||
| } | |||
| //如果栏目的文档太多,分多批次更新 | |||
| if ($ntotalpage <= $maxpagesize || $lv->TypeLink->TypeInfos['ispart'] != 0 || $lv->TypeLink->TypeInfos['isdefault'] == -1) { | |||
| $reurl = $lv->MakeHtml('', '', $isremote); | |||
| $finishType = TRUE; | |||
| } else { | |||
| $reurl = $lv->MakeHtml($mkpage, $maxpagesize, $isremote); | |||
| $finishType = FALSE; | |||
| $mkpage = $mkpage + $maxpagesize; | |||
| if ($mkpage >= ($ntotalpage + 1)) $finishType = TRUE; | |||
| } | |||
| } | |||
| $nextpage = $pageno + 1; | |||
| if ($nextpage >= $totalpage && $finishType) { | |||
| if ($gotype == '') { | |||
| if (empty($reurl)) { | |||
| $reurl = '../m/list.php?tid='.$tid; | |||
| } | |||
| ShowMsg("完成所有栏目更新,<a href='$reurl' target='_blank'>浏览栏目</a>", "javascript:;"); | |||
| exit(); | |||
| } else if ($gotype == 'mkall' || $gotype == 'mkallct') { | |||
| ShowMsg("完成所有栏目更新,最后数据优化", "makehtml_m_all.php?action=make&step=10"); | |||
| exit(); | |||
| } | |||
| } else { | |||
| if ($finishType) { | |||
| $gourl = "makehtml_m_list_action.php?gotype={$gotype}&uppage=$uppage&maxpagesize=$maxpagesize&typeid=$typeid&pageno=$nextpage"; | |||
| ShowMsg("更新栏目<span class='text-primary'>".$tid."</span>,继续执行任务", $gourl, 0, 100); | |||
| exit(); | |||
| } else { | |||
| $gourl = "makehtml_m_list_action.php?gotype={$gotype}&uppage=$uppage&mkpage=$mkpage&maxpagesize=$maxpagesize&typeid=$typeid&pageno=$pageno"; | |||
| ShowMsg("更新栏目<span class='text-primary'>".$tid."</span>,继续执行任务", $gourl, 0, 100); | |||
| exit(); | |||
| } | |||
| } | |||
| ?> | |||
| @@ -0,0 +1,100 @@ | |||
| <!DOCTYPE html> | |||
| <html> | |||
| <head> | |||
| <meta charset="utf-8"> | |||
| <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"> | |||
| <title>更新整站</title> | |||
| <link rel="stylesheet" href="../static/web/font/css/font-awesome.min.css"> | |||
| <link rel="stylesheet" href="../static/web/css/bootstrap.min.css"> | |||
| <link rel="stylesheet" href="../static/web/css/admin.css"> | |||
| <link rel="stylesheet" href="../static/web/css/daterangepicker.css"> | |||
| <script src="../static/web/js/jquery.min.js"></script> | |||
| <script src="../static/web/js/moment.min.js"></script> | |||
| <script src="../static/web/js/daterangepicker.js"></script> | |||
| <script> | |||
| $(document).ready(function() { | |||
| $('.datepicker').daterangepicker({ | |||
| "singleDatePicker": true, | |||
| "autoApply": true, | |||
| "showDropdowns": true, | |||
| "linkedCalendars": false, | |||
| "timePicker": true, | |||
| "timePicker24Hour": true, | |||
| "showCustomRangeLabel": false, | |||
| ranges: { | |||
| '今日': [moment(), moment()], | |||
| '昨日': [moment().subtract(1, 'days'), moment().subtract(1, 'days')], | |||
| '本月': [moment().startOf('month'), moment().startOf('month')], | |||
| '上月': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month') | |||
| .startOf('month') | |||
| ] | |||
| }, | |||
| "locale": { | |||
| format: 'YYYY-MM-DD HH:mm', | |||
| applyLabel: '确定', | |||
| cancelLabel: '取消', | |||
| daysOfWeek: ['日', '一', '二', '三', '四', '五', '六'], | |||
| monthNames: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'], | |||
| firstDay: 1 | |||
| } | |||
| }, function(start) { | |||
| $(this).val(start.format("YYYY-MM-DD HH:mm")); | |||
| }); | |||
| }) | |||
| </script> | |||
| <script> | |||
| function SelUp() { | |||
| var ob1 = document.getElementById("uptype1"); | |||
| var ob2 = document.getElementById("uptype2"); | |||
| var ob3 = document.getElementById("uptype3"); | |||
| if (ob1.checked) { | |||
| document.getElementById("seltime").style.display = ""; | |||
| document.getElementById("selid").style.display = "none"; | |||
| } else if (ob2.checked) { | |||
| document.getElementById("seltime").style.display = "none"; | |||
| document.getElementById("selid").style.display = ""; | |||
| } else { | |||
| document.getElementById("seltime").style.display = "none"; | |||
| document.getElementById("selid").style.display = "none"; | |||
| } | |||
| } | |||
| </script> | |||
| </head> | |||
| <body> | |||
| <table cellpadding="3" cellspacing="1" align="center" class="table maintable my-3"> | |||
| <form name="form1" action="makehtml_m_all.php" target="stafrm" method="post"> | |||
| <input type="hidden" name="action" value="make"> | |||
| <tr> | |||
| <td bgcolor="#f5f5f5" colspan="2">更新整站</td> | |||
| </tr> | |||
| <tr> | |||
| <td width="260">更新选项:</td> | |||
| <td> | |||
| <label><input type="radio" name="uptype" id="uptype1" onClick="SelUp()" value="time" checked="checked"> 指定时间的所有更新</label> | |||
| <label><input type="radio" name="uptype" id="uptype2" onClick="SelUp()" value="id"> 指定文档的所有更新</label> | |||
| <label><input type="radio" name="uptype" id="uptype3" onClick="SelUp()" value="mkall"> 更新所有</label> | |||
| </td> | |||
| </tr> | |||
| <tr id="seltime"> | |||
| <td>起始时间:</td> | |||
| <td><input type="text" name="starttime" id="starttime" value="<?php echo GetDateMk(time());?>" class="datepicker" class="admin-input-sm"></td> | |||
| </tr> | |||
| <tr id="selid" style="display:none"> | |||
| <td>起始id:</td> | |||
| <td><input type="text" name="startid" id="startid" value="0" class="admin-input-sm"></td> | |||
| </tr> | |||
| <tr> | |||
| <td bgcolor="#e9ecef" colspan="2" align="center"><button type="submit" class="btn btn-success btn-sm">开始更新</button></td> | |||
| </tr> | |||
| </form> | |||
| <tr> | |||
| <td colspan="2">结果:</td> | |||
| </tr> | |||
| <tr> | |||
| <td colspan="2" id="mtd"> | |||
| <div id="mdv" class="admin-win-iframe"><iframe name="stafrm" frameborder="0" id="stafrm" width="100%" height="360px"></iframe></div> | |||
| </td> | |||
| </tr> | |||
| </table> | |||
| </body> | |||
| </html> | |||
| @@ -0,0 +1,57 @@ | |||
| <!DOCTYPE html> | |||
| <html> | |||
| <head> | |||
| <meta charset="utf-8"> | |||
| <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"> | |||
| <title>更新文档</title> | |||
| <link rel="stylesheet" href="../static/web/font/css/font-awesome.min.css"> | |||
| <link rel="stylesheet" href="../static/web/css/bootstrap.min.css"> | |||
| <link rel="stylesheet" href="../static/web/css/admin.css"> | |||
| </head> | |||
| <body> | |||
| <table cellpadding="3" cellspacing="1" align="center" class="table maintable my-3"> | |||
| <form name="form1" action="makehtml_m_archives_action.php" method="get" target="stafrm"> | |||
| <tr> | |||
| <td bgcolor="#f5f5f5" colspan="2">更新文档</td> | |||
| </tr> | |||
| <tr> | |||
| <td width="260">选择栏目:</td> | |||
| <td> | |||
| <?php | |||
| if (empty($cid)) $cid="0"; | |||
| $tl = new TypeLink($cid); | |||
| $typeOptions = $tl->GetOptionArray($cid,$admin_catalogs,0); | |||
| echo "<select name='typeid' class='admin-input-sm'>"; | |||
| if ($cid=="0") echo "<option value='0' selected>更新所有文档</option>"; | |||
| echo $typeOptions; | |||
| echo "</select>"; | |||
| ?> | |||
| </td> | |||
| </tr> | |||
| <tr> | |||
| <td>起始id:</td> | |||
| <td><input type="text" name="startid" id="startid" class="admin-input-sm">(空或0表示从头开始)</td> | |||
| </tr> | |||
| <tr> | |||
| <td>结束id:</td> | |||
| <td><input type="text" name="endid" id="endid" class="admin-input-sm">(空或0表示直到结束id)</td> | |||
| </tr> | |||
| <tr> | |||
| <td>每页生成:</td> | |||
| <td> <input type="text" name="pagesize" id="pagesize" value="20" class="admin-input-sm"> 个文件</td> | |||
| </tr> | |||
| <tr> | |||
| <td bgcolor="#e9ecef" colspan="2" align="center"><button type="submit" name="b112" class="btn btn-success btn-sm">开始更新</button></td> | |||
| </tr> | |||
| </form> | |||
| <tr> | |||
| <td colspan="2">结果:</td> | |||
| </tr> | |||
| <tr> | |||
| <td colspan="2" id="mtd"> | |||
| <div id="mdv" class="admin-win-iframe"><iframe name="stafrm" frameborder="0" id="stafrm" width="100%" height="100%"></iframe></div> | |||
| </td> | |||
| </tr> | |||
| </table> | |||
| </body> | |||
| </html> | |||
| @@ -0,0 +1,81 @@ | |||
| <!DOCTYPE html> | |||
| <html> | |||
| <head> | |||
| <meta charset="utf-8"> | |||
| <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"> | |||
| <title>手机端配置</title> | |||
| <script src="../static/web/js/jquery.min.js"></script> | |||
| <link rel="stylesheet" href="../static/web/font/css/font-awesome.min.css"> | |||
| <link rel="stylesheet" href="../static/web/css/bootstrap.min.css"> | |||
| <link rel="stylesheet" href="../static/web/css/admin.css"> | |||
| </head> | |||
| <body> | |||
| <table cellpadding="3" cellspacing="1" align="center" class="table maintable my-3"> | |||
| <form action="makehtml_m_config.php" method="post" name="form1" _lpchecked="1"> | |||
| <input type="hidden" name="dopost" value="save"> | |||
| <tr> | |||
| <td bgcolor="#f5f5f5" colspan="3">手机端配置</td> | |||
| </tr> | |||
| <tr> | |||
| <td colspan="3"> | |||
| <div class="alert alert-info mb-0"> | |||
| <ul> | |||
| <li>1、手机端模板启用静态链接,如列表“[field:typeurl/]”标签,文档“[field:arcurl/]”标签。那么手机端模模板中css和js等,建议用绝对路径引用,以免手机端更新后页面错误。缩略图标签前加电脑端链接为http://xxx.com[field:picname/],文档正文标签为{dede:field.body function='str_replace("/static/allimg/","http:xxx.com/static/allimg/",@me)'/},后台-系统设置-系统配置变量-是否支持多站点选择否,最后更新目录中有静态文件,则更新成功。</li> | |||
| <li>2、手机端模板启用动态链接,如列表list.php?tid=[field:id/]形式,文档view.php?aid=[field:id/]形式,手机端伪静态规则参考电脑端。</li> | |||
| <li>3、手机端自定义文档更新规则,如规则/html/{aid}.html形式,把view.php?aid=[field:id/]改为/m/html/[field:id/].html</li> | |||
| </ul> | |||
| </div> | |||
| </td> | |||
| </tr> | |||
| <tr> | |||
| <td width="260">手机端更新目录:</td> | |||
| <td> | |||
| <input type="text" name="data[dedebiz_path]" id="dedebiz_path" class="w-75" value="<?php echo $data['dedebiz_path']?$data['dedebiz_path']:'/m'?>"> | |||
| <input type="hidden" name="info[dedebiz_path]" id="path_info" class="w-75" value="手机端更新目录默认为m文件夹"> | |||
| </td> | |||
| <td>手机端更新目录默认为m文件夹</td> | |||
| </tr> | |||
| <tr> | |||
| <td>电脑端栏目链接规则:</td> | |||
| <td> | |||
| <label><input type="radio" name="data[dedebiz_usetype]" value="1" <?php echo $data['dedebiz_usetype']==1?'checked':''?>> 启用</label> | |||
| <label><input type="radio" name="data[dedebiz_usetype]" value="0" <?php echo $data['dedebiz_usetype']==0?'checked':''?>> 禁用</label> | |||
| <input type="hidden" name="info[dedebiz_usetype]" id="usetype_info" class="w-75" value="是否启用电脑端栏目链接规则更新"> | |||
| </td> | |||
| <td>是否启用电脑端栏目链接规则更新</td> | |||
| </tr> | |||
| <tr> | |||
| <td>电脑端文档链接规则:</td> | |||
| <td> | |||
| <label><input type="radio" name="data[dedebiz_usearc]" value="1" <?php echo $data['dedebiz_usearc']==1?'checked':''?>> 启用</label> | |||
| <label><input type="radio" name="data[dedebiz_usearc]" value="0" <?php echo $data['dedebiz_usearc']==0?'checked':''?>> 禁用</label> | |||
| <input type="hidden" name="info[dedebiz_usearc]" id="usearc_info" class="w-75" value="是否启用电脑端文档链接规则更新"> | |||
| </td> | |||
| <td>是否启用电脑端文档链接规则更新</td> | |||
| </tr> | |||
| <tr> | |||
| <td>手机端栏目链接规则:</td> | |||
| <td> | |||
| <input type="text" name="data[dedebiz_typerule]" id="dedebiz_typerule" class="w-75" value="<?php echo $data['dedebiz_typerule']?$data['dedebiz_typerule']:'{typedir}/{tid}-{page}.html'?>"> | |||
| <input type="hidden" name="info[dedebiz_typerule]" id="typerule_info" class="w-75" value="禁用电脑端栏目链接规则时生效"> | |||
| </td> | |||
| <td>禁用电脑端栏目链接规则时生效</td> | |||
| </tr> | |||
| <tr> | |||
| <td>手机端文档链接规则:</td> | |||
| <td> | |||
| <input type="text" name="data[dedebiz_arcrule]" id="dedebiz_arcrule" class="w-75" value="<?php echo $data['dedebiz_arcrule']?$data['dedebiz_arcrule']:'{typedir}/{aid}.html'?>"> | |||
| <input type="hidden" name="info[dedebiz_arcrule]" id="arcrule_info" class="w-75" value="禁用电脑端文档链接规则时生效"> | |||
| </td> | |||
| <td>禁用电脑端文档链接规则时生效</td> | |||
| </tr> | |||
| <tr> | |||
| <td bgcolor="#f5f5f5" colspan="3" align="center"> | |||
| <button type="submit" class="btn btn-success btn-sm">保存</button> | |||
| <button type="button" class="btn btn-outline-success btn-sm" onclick="document.form1.reset()">重置</button> | |||
| </td> | |||
| </tr> | |||
| </form> | |||
| </table> | |||
| </body> | |||
| </html> | |||
| @@ -0,0 +1,56 @@ | |||
| <!DOCTYPE html> | |||
| <html> | |||
| <head> | |||
| <meta charset="utf-8"> | |||
| <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"> | |||
| <title>更新栏目</title> | |||
| <link rel="stylesheet" href="../static/web/font/css/font-awesome.min.css"> | |||
| <link rel="stylesheet" href="../static/web/css/bootstrap.min.css"> | |||
| <link rel="stylesheet" href="../static/web/css/admin.css"> | |||
| </head> | |||
| <body> | |||
| <table cellpadding="3" cellspacing="1" align="center" class="table maintable my-3"> | |||
| <form name="form1" action="makehtml_m_list_action.php" method="get" target="stafrm"> | |||
| <tr> | |||
| <td bgcolor="#f5f5f5" colspan="2">更新栏目</td> | |||
| </tr> | |||
| <tr> | |||
| <td width="260">选择栏目:</td> | |||
| <td> | |||
| <?php | |||
| if (empty($cid)) $cid=0; | |||
| $tl = new TypeLink($cid); | |||
| $typeOptions = $tl->GetOptionArray($cid,$admin_catalogs,0,1); | |||
| echo "<select name='typeid' class='admin-input-sm'>"; | |||
| if ($cid=='0') echo "<option value='0' selected='1'>更新所有栏目</option>"; | |||
| echo $typeOptions; | |||
| echo "</select>"; | |||
| ?> | |||
| </td> | |||
| </tr> | |||
| <tr> | |||
| <td>每次最大创建页数:</td> | |||
| <td><input name="maxpagesize" type="text" id="maxpagesize" value="50" class="admin-input-sm"> 个文件</td> | |||
| </tr> | |||
| <tr> | |||
| <td>是否更新子栏目:</td> | |||
| <td> | |||
| <label><input type="radio" name="upnext" value="1" checked="1"> 更新子级栏目</label> | |||
| <label><input type="radio" name="upnext" value="0"> 仅更新所选栏目</label> | |||
| </td> | |||
| </tr> | |||
| <tr> | |||
| <td bgcolor="#e9ecef" colspan="2" align="center"><button type="submit" name="b112" class="btn btn-success btn-sm">开始更新</button></td> | |||
| </tr> | |||
| </form> | |||
| <tr> | |||
| <td colspan="2">结果:</td> | |||
| </tr> | |||
| <tr> | |||
| <td colspan="2" id="mtd"> | |||
| <div id="mdv" class="admin-win-iframe"><iframe name="stafrm" frameborder="0" id="stafrm" width="100%" height="100%"></iframe></div> | |||
| </td> | |||
| </tr> | |||
| </table> | |||
| </body> | |||
| </html> | |||
| @@ -0,0 +1,40 @@ | |||
| <?php | |||
| /** | |||
| * 手机端首页 | |||
| * | |||
| * @version $id:index.php 10:46 2023年1月10日 xushubieli $ | |||
| * @package DedeBIZ.Libraries | |||
| * @copyright Copyright (c) 2022, DedeBIZ.COM | |||
| * @license https://www.dedebiz.com/license | |||
| * @link https://www.dedebiz.com | |||
| */ | |||
| if (!file_exists(dirname(__FILE__).'/../data/common.inc.php')) { | |||
| header('Location:install/index.php'); | |||
| exit(); | |||
| } | |||
| if (preg_match("#PHP (.*) Development Server#",$_SERVER['SERVER_SOFTWARE'])) { | |||
| if ($_SERVER['REQUEST_URI'] == dirname($_SERVER['SCRIPT_NAME']) ) { | |||
| header('HTTP/1.1 301 Moved Permanently'); | |||
| header('Location:'.$_SERVER['REQUEST_URI'].'/'); | |||
| } | |||
| } | |||
| if (isset($_GET['upcache']) || !file_exists('index.html')) { | |||
| require_once (dirname(__FILE__)."/../system/common.inc.php"); | |||
| require_once DEDEINC."/archive/partview.class.php"; | |||
| $GLOBALS['_arclistEnv'] = 'index'; | |||
| $row = $dsql->GetOne("Select * From `#@__homepageset`"); | |||
| $row['templet'] = MfTemplet($row['templet']); | |||
| $pv = new PartView(); | |||
| $row['templet'] =str_replace('.htm','_m.htm',$row['templet']); | |||
| if (!file_exists($cfg_basedir.$cfg_templets_dir."/".$row['templet'])) { | |||
| echo "主题模板文件不存在,无法显示网页"; | |||
| exit(); | |||
| } | |||
| $pv->SetTemplet($cfg_basedir.$cfg_templets_dir."/".$row['templet']); | |||
| $pv->Display(); | |||
| exit(); | |||
| } else { | |||
| header('HTTP/1.1 301 Moved Permanently'); | |||
| header('Location:index.html'); | |||
| } | |||
| ?> | |||
| @@ -0,0 +1,59 @@ | |||
| <?php | |||
| /** | |||
| * 手机端栏目页 | |||
| * | |||
| * @version $id:list.php 10:46 2023年1月10日 xushubieli $ | |||
| * @package DedeBIZ.Libraries | |||
| * @copyright Copyright (c) 2022, DedeBIZ.COM | |||
| * @license https://www.dedebiz.com/license | |||
| * @link https://www.dedebiz.com | |||
| */ | |||
| define('DEDEMOB', 'Y'); | |||
| require_once(dirname(__FILE__)."/../system/common.inc.php"); | |||
| $tid = (isset($tid) && is_numeric($tid) ? $tid : 0); | |||
| $channelid = (isset($channelid) && is_numeric($channelid) ? $channelid : 0); | |||
| if ($tid==0 && $channelid==0) die("Request Error!"); | |||
| if (isset($TotalResult)) $TotalResult = intval(preg_replace("/[^\d]/", '', $TotalResult)); | |||
| //如果指定了内容模型ID但没有指定栏目id,那么自动获得为这个内容模型的第一个顶级栏目作为频道默认栏目 | |||
| if (!empty($channelid) && empty($tid)) { | |||
| $tinfos = $dsql->GetOne("SELECT tp.id,ch.issystem FROM `#@__arctype` tp LEFT JOIN `#@__channeltype` ch ON ch.id=tp.channeltype WHERE tp.channeltype='$channelid' And tp.reid=0 order by sortrank asc"); | |||
| if (!is_array($tinfos)) die(" No catalogs in the channel! "); | |||
| $tid = $tinfos['id']; | |||
| } else { | |||
| $tinfos = $dsql->GetOne("SELECT ch.issystem FROM `#@__arctype` tp LEFT JOIN `#@__channeltype` ch ON ch.id=tp.channeltype WHERE tp.id='$tid'"); | |||
| } | |||
| if ($tinfos['issystem']==-1) { | |||
| $nativeplace = ((empty($nativeplace) || !is_numeric($nativeplace)) ? 0 : $nativeplace ); | |||
| $infotype = ((empty($infotype) || !is_numeric($infotype)) ? 0 : $infotype ); | |||
| if (!empty($keyword)) $keyword = FilterSearch($keyword); | |||
| $cArr = array(); | |||
| if (!empty($nativeplace)) $cArr['nativeplace'] = $nativeplace; | |||
| if (!empty($infotype)) $cArr['infotype'] = $infotype; | |||
| if (!empty($keyword)) $cArr['keyword'] = $keyword; | |||
| include(DEDEINC."/archive/sglistview.class.php"); | |||
| $lv = new SgListView($tid,$cArr); | |||
| } else { | |||
| include(DEDEINC."/archive/listview.class.php"); | |||
| $lv = new ListView($tid); | |||
| //对设置了会员级别的栏目进行处理 | |||
| if (isset($lv->Fields['corank']) && $lv->Fields['corank'] > 0) | |||
| { | |||
| require_once(DEDEINC.'/memberlogin.class.php'); | |||
| $cfg_ml = new MemberLogin(); | |||
| if ( $cfg_ml->M_Rank < $lv->Fields['corank'] ) { | |||
| $dsql->Execute('me' , "SELECT * FROM `#@__arcrank` "); | |||
| while($row = $dsql->GetObject('me')) | |||
| { | |||
| $memberTypes[$row->rank] = $row->membername; | |||
| } | |||
| $memberTypes[0] = "游客或没权限会员"; | |||
| $msgtitle = "您没有权限浏览栏目:{$lv->Fields['typename']}"; | |||
| $moremsg = "该栏目需要<span class='text-primary'>".$memberTypes[$lv->Fields['corank']]."</span>才能浏览,您目前等级是<span class='text-primary'>".$memberTypes[$cfg_ml->M_Rank]."</span>"; | |||
| include_once(DEDETEMPLATE.'/plus/view_msg_catalog.htm'); | |||
| exit(); | |||
| } | |||
| } | |||
| } | |||
| if ($lv->IsError) ParamError(); | |||
| $lv->Display(); | |||
| ?> | |||
| @@ -0,0 +1,94 @@ | |||
| <?php | |||
| /** | |||
| * 手机端搜索页 | |||
| * | |||
| * @version $id:search.php 10:46 2023年1月10日 xushubieli $ | |||
| * @package DedeBIZ.Libraries | |||
| * @copyright Copyright (c) 2022, DedeBIZ.COM | |||
| * @license https://www.dedebiz.com/license | |||
| * @link https://www.dedebiz.com | |||
| */ | |||
| define('DEDEMOB', 'Y'); | |||
| require_once(dirname(__FILE__)."/../system/common.inc.php"); | |||
| require_once(DEDEINC."/archive/searchview.class.php"); | |||
| $pagesize = (isset($pagesize) && is_numeric($pagesize)) ? $pagesize : 10; | |||
| $typeid = (isset($typeid) && is_numeric($typeid)) ? $typeid : 0; | |||
| $channeltype = (isset($channeltype) && is_numeric($channeltype)) ? $channeltype : 0; | |||
| $kwtype = (isset($kwtype) && is_numeric($kwtype)) ? $kwtype : 0; | |||
| $mid = (isset($mid) && is_numeric($mid)) ? $mid : 0; | |||
| unset($typeArr); | |||
| if (!isset($orderby)) $orderby = ''; | |||
| else $orderby = preg_replace("#[^a-z]#i", '', $orderby); | |||
| if (!isset($searchtype)) $searchtype = 'titlekeyword'; | |||
| else $searchtype = preg_replace("#[^a-z]#i", '', $searchtype); | |||
| if (!isset($keyword)) { | |||
| if (!isset($q)) $q = ''; | |||
| $keyword = $q; | |||
| } | |||
| $oldkeyword = $keyword = FilterSearch(stripslashes($keyword)); | |||
| //查找栏目信息 | |||
| if (empty($typeid)) { | |||
| $typenameCacheFile = DEDEDATA.'/cache/typename.inc'; | |||
| if (!file_exists($typenameCacheFile) || filemtime($typenameCacheFile) < time() - (3600 * 24)) { | |||
| $fp = fopen(DEDEDATA.'/cache/typename.inc', 'w'); | |||
| fwrite($fp, "<"."?php\r\n"); | |||
| $dsql->SetQuery("SELECT id,typename,channeltype FROM `#@__arctype`"); | |||
| $dsql->Execute(); | |||
| while ($row = $dsql->GetArray()) { | |||
| fwrite($fp, "\$typeArr[{$row['id']}] = '{$row['typename']}';\r\n"); | |||
| } | |||
| fwrite($fp, '?'.'>'); | |||
| fclose($fp); | |||
| } | |||
| //引入栏目缓存并看关键词是否有相关栏目文档 | |||
| require_once($typenameCacheFile); | |||
| if (isset($typeArr) && is_array($typeArr)) { | |||
| foreach ($typeArr as $id => $typename) { | |||
| //$keywordn = str_replace($typename, ' ', $keyword); | |||
| $keywordn = $keyword; | |||
| if ($keyword != $keywordn) { | |||
| $keyword = HtmlReplace($keywordn); | |||
| $typeid = intval($id); | |||
| break; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| $typeid = intval($typeid); | |||
| $keyword = addslashes(cn_substr($keyword,30)); | |||
| $typeid = intval($typeid); | |||
| if ($cfg_notallowstr != '' && preg_match("#".$cfg_notallowstr."#i", $keyword)) { | |||
| ShowMsg("您的搜索关键词中存在非法文档,被系统禁止", "-1"); | |||
| exit(); | |||
| } | |||
| if (($keyword == '' || strlen($keyword) < 2) && empty($typeid)) { | |||
| ShowMsg('关键词不能小于2个字节', '-1'); | |||
| exit(); | |||
| } | |||
| //检查搜索间隔时间 | |||
| $ip = GetIP(); | |||
| $now = time(); | |||
| $row = $dsql->GetOne("SELECT * FROM `#@__search_limits` WHERE ip='{$ip}'"); | |||
| if (is_array($row)) { | |||
| if (($now - $row['searchtime']) < $cfg_search_time) { | |||
| ShowMsg('管理员设定搜索时间间隔为'.$cfg_search_time.'秒,请稍后再试', '-1'); | |||
| exit; | |||
| } | |||
| $dsql->ExecuteNoneQuery("UPDATE `#@__search_limits` SET `searchtime`='{$now}' WHERE `ip`='{$ip}';"); | |||
| } else { | |||
| $dsql->ExecuteNoneQuery("INSERT INTO `#@__search_limits` (`ip`, `searchtime`) VALUES ('{$ip}', '{$now}');"); | |||
| } | |||
| //开始时间 | |||
| if (empty($starttime)) $starttime = -1; | |||
| else { | |||
| $starttime = (is_numeric($starttime) ? $starttime : -1); | |||
| if ($starttime > 0) { | |||
| $dayst = GetMkTime("2008-1-2 0:0:0") - GetMkTime("2008-1-1 0:0:0"); | |||
| $starttime = time() - ($starttime * $dayst); | |||
| } | |||
| } | |||
| $t1 = ExecTime(); | |||
| $sp = new SearchView($typeid, $keyword, $orderby, $channeltype, $searchtype, $starttime, $pagesize, $kwtype, $mid); | |||
| $keyword = $oldkeyword; | |||
| $sp->Display(); | |||
| ?> | |||
| @@ -0,0 +1,28 @@ | |||
| <?php | |||
| /** | |||
| * 手机端标签页 | |||
| * | |||
| * @version $id:tags.php 10:46 2023年1月10日 xushubieli $ | |||
| * @package DedeBIZ.Libraries | |||
| * @copyright Copyright (c) 2022, DedeBIZ.COM | |||
| * @license https://www.dedebiz.com/license | |||
| * @link https://www.dedebiz.com | |||
| */ | |||
| require_once(dirname(__FILE__)."/../system/common.inc.php"); | |||
| require_once(DEDEINC."/archive/taglist.class.php"); | |||
| $PageNo = 1; | |||
| if (isset($_SERVER['QUERY_STRING'])) { | |||
| $tag = trim($_SERVER['QUERY_STRING']); | |||
| $tags = explode('/', $tag); | |||
| if (isset($tags[1])) $tag = $tags[1]; | |||
| if (isset($tags[2])) $PageNo = intval($tags[2]); | |||
| } else { | |||
| $tag = ''; | |||
| } | |||
| $tag = FilterSearch(urldecode($tag)); | |||
| if ($tag != addslashes($tag)) $tag = ''; | |||
| if ($tag == '') $dlist = new TagList($tag, 'tag_m.htm'); | |||
| else $dlist = new TagList($tag, 'taglist_m.htm'); | |||
| $dlist->Display(); | |||
| exit(); | |||
| ?> | |||
| @@ -0,0 +1,96 @@ | |||
| <?php | |||
| /** | |||
| * 手机端文档页 | |||
| * | |||
| * @version $id:view.php 10:46 2023年1月10日 xushubieli $ | |||
| * @package DedeBIZ.Libraries | |||
| * @copyright Copyright (c) 2022, DedeBIZ.COM | |||
| * @license https://www.dedebiz.com/license | |||
| * @link https://www.dedebiz.com | |||
| */ | |||
| define('DEDEMOB', 'Y'); | |||
| require_once(dirname(__FILE__)."/../system/common.inc.php"); | |||
| require_once(DEDEINC.'/archive/archives.class.php'); | |||
| $t1 = ExecTime(); | |||
| if (empty($okview)) $okview = ''; | |||
| if (isset($arcID)) $aid = $arcID; | |||
| if (!isset($dopost)) $dopost = ''; | |||
| $app = (isset($app) && is_numeric($app) ? $app : 0); | |||
| $arcID = $aid = (isset($aid) && is_numeric($aid)) ? $aid : 0; | |||
| if ($aid==0) die(" Request Error! "); | |||
| $arc = new Archives($aid); | |||
| if ($arc->IsError) ParamError(); | |||
| //检查阅读权限 | |||
| $needMoney = $arc->Fields['money']; | |||
| $needRank = $arc->Fields['arcrank']; | |||
| require_once(DEDEINC.'/memberlogin.class.php'); | |||
| $cfg_ml = new MemberLogin(); | |||
| if ($needRank < 0 && $arc->Fields['mid'] != $cfg_ml->M_ID) { | |||
| ShowMsg('文档未审核,暂时无法浏览', 'javascript:;'); | |||
| exit(); | |||
| } | |||
| //设置了权限限制的文章 | |||
| //arctitle msgtitle moremsg | |||
| if ($needMoney>0 || $needRank>1) { | |||
| $arctitle = $arc->Fields['title']; | |||
| $arclink = $cfg_phpurl.'/view.php?aid='.$arc->ArcID; | |||
| $arcLinktitle = "<a href=\"{$arclink}\">".$arctitle."</a>"; | |||
| $description = $arc->Fields["description"]; | |||
| $pubdate = GetDateTimeMk($arc->Fields["pubdate"]); | |||
| //会员级别不足 | |||
| if (($needRank>1 && $cfg_ml->M_Rank < $needRank && $arc->Fields['mid']!=$cfg_ml->M_ID)) { | |||
| $dsql->Execute('me' , "SELECT * FROM `#@__arcrank` "); | |||
| while($row = $dsql->GetObject('me')) | |||
| { | |||
| $memberTypes[$row->rank] = $row->membername; | |||
| } | |||
| $memberTypes[0] = "游客或没权限会员"; | |||
| $msgtitle = "您没有权限浏览文档:{$arctitle}"; | |||
| $moremsg = "该文档需要<span class='text-primary'>".$memberTypes[$needRank]."</span>金币才能浏览,您目前金币".$memberTypes[$cfg_ml->M_Rank]."</span>"; | |||
| include_once(DEDETEMPLATE.'/plus/view_msg.htm'); | |||
| exit(); | |||
| } | |||
| //需要金币的情况 | |||
| if ($needMoney > 0 && $arc->Fields['mid'] != $cfg_ml->M_ID) { | |||
| $sql = "SELECT aid,money FROM `#@__member_operation` WHERE buyid='ARCHIVE".$aid."' AND mid='".$cfg_ml->M_ID."'"; | |||
| $row = $dsql->GetOne($sql); | |||
| //未购买过此文章 | |||
| if (!is_array($row)) { | |||
| if ($cfg_ml->M_Money=='' || $needMoney > $cfg_ml->M_Money) { | |||
| $msgtitle = "您没有权限浏览文档:{$arctitle}"; | |||
| $moremsg = "该文档需要<span class='text-primary'>".$needMoney."</span>金币才能浏览,您目前金币".$cfg_ml->M_Money."</span>"; | |||
| include_once(DEDETEMPLATE.'/plus/view_msg.htm'); | |||
| $arc->Close(); | |||
| exit(); | |||
| } else { | |||
| if ($dopost=='buy') { | |||
| $inquery = "INSERT INTO `#@__member_operation`(mid,oldinfo,money,mtime,buyid,product,pname) VALUES ('".$cfg_ml->M_ID."','$arctitle','$needMoney','".time()."', 'ARCHIVE".$aid."', 'archive',''); "; | |||
| if ($dsql->ExecuteNoneQuery($inquery)) { | |||
| $inquery = "UPDATE `#@__member` SET money=money-$needMoney WHERE mid='".$cfg_ml->M_ID."'"; | |||
| if (!$dsql->ExecuteNoneQuery($inquery)) { | |||
| showmsg('购买失败,请返回', -1); | |||
| exit; | |||
| } | |||
| if (defined('UC_APPID')) { | |||
| include_once DEDEROOT.'/api/uc.func.php'; | |||
| $row = $dsql->GetOne("SELECT `scores`,`userid` FROM `#@__member` WHERE `mid`='".$cfg_ml->M_ID."'"); | |||
| uc_credit_note($row['userid'],-$needMoney,'money'); | |||
| } | |||
| showmsg('购买成功,购买扣点不会重扣金币', '/apps/view.php?aid='.$aid); | |||
| exit; | |||
| } else { | |||
| showmsg('购买失败,请返回', -1); | |||
| exit; | |||
| } | |||
| } | |||
| $msgtitle = "扣金币购买阅读"; | |||
| $moremsg = "该文档需要付费<span class='text-primary'>".$needMoney."</span>金币,您目前金币<span class='text-primary'>".$cfg_ml->M_Money."<br><a href='/apps/view.php?aid=".$aid."&dopost=buy' target='_blank'>确认付点阅读</a>" ; | |||
| include_once($cfg_basedir.$cfg_templets_dir."/plus/view_msg.htm"); | |||
| $arc->Close(); | |||
| exit(); | |||
| } | |||
| } | |||
| }//金币处理付处理 | |||
| } | |||
| $arc->Display(); | |||
| ?> | |||
| @@ -0,0 +1,729 @@ | |||
| <?php | |||
| if (!defined('DEDEINC')) exit('dedebiz'); | |||
| /** | |||
| * 搜索视图类 | |||
| * | |||
| * @version $id:searchview.class.php 15:26 2010年7月7日 tianya $ | |||
| * @package DedeBIZ.Libraries | |||
| * @copyright Copyright (c) 2022 DedeBIZ.COM | |||
| * @license https://www.dedebiz.com/license | |||
| * @link https://www.dedebiz.com | |||
| */ | |||
| require_once(DEDEINC."/typelink/typelink.class.php"); | |||
| require_once(DEDEINC."/dedetag.class.php"); | |||
| require_once(DEDEINC."/libraries/splitword.class.php"); | |||
| require_once(DEDEINC."/taglib/hotwords.lib.php"); | |||
| require_once(DEDEINC."/taglib/channel.lib.php"); | |||
| @set_time_limit(0); | |||
| @ini_set('memory_limit', '512M'); | |||
| class SearchView | |||
| { | |||
| var $dsql; | |||
| var $dtp; | |||
| var $dtp2; | |||
| var $TypeID; | |||
| var $TypeLink; | |||
| var $PageNo; | |||
| var $TotalPage; | |||
| var $TotalResult; | |||
| var $pagesize; | |||
| var $ChannelType; | |||
| var $TempInfos; | |||
| var $Fields; | |||
| var $PartView; | |||
| var $StartTime; | |||
| var $Keywords; | |||
| var $OrderBy; | |||
| var $SearchType; | |||
| var $mid; | |||
| var $KType; | |||
| var $Keyword; | |||
| var $SearchMax; | |||
| var $SearchMaxRc; | |||
| var $SearchTime; | |||
| var $AddSql; | |||
| var $RsFields; | |||
| /** | |||
| * php5构造函数 | |||
| * | |||
| * @access public | |||
| * @param int $typeid 栏目id | |||
| * @param string $keyword 关键词 | |||
| * @param string $orderby 排序 | |||
| * @param string $achanneltype 栏目类型 | |||
| * @param string $searchtype 搜索类型 | |||
| * @param string $starttime 开始时间 | |||
| * @param string $upagesize 页数 | |||
| * @param string $kwtype 关键词类型 | |||
| * @param string $mid 会员id | |||
| * @return string | |||
| */ | |||
| function __construct( | |||
| $typeid, | |||
| $keyword, | |||
| $orderby, | |||
| $achanneltype = "all", | |||
| $searchtype = '', | |||
| $starttime = 0, | |||
| $upagesize = 20, | |||
| $kwtype = 1, | |||
| $mid = 0 | |||
| ) { | |||
| global $cfg_search_max, $cfg_search_maxrc, $cfg_search_time,$envs; | |||
| if (empty($upagesize)) { | |||
| $upagesize = 10; | |||
| } | |||
| $this->TypeID = $typeid; | |||
| $this->Keyword = $keyword; | |||
| $this->OrderBy = $orderby; | |||
| $this->KType = $kwtype; | |||
| $this->pagesize = (int)$upagesize; | |||
| $this->StartTime = $starttime; | |||
| $this->ChannelType = $achanneltype; | |||
| $this->SearchMax = $cfg_search_max; | |||
| $this->SearchMaxRc = $cfg_search_maxrc; | |||
| $this->SearchTime = $cfg_search_time; | |||
| $this->mid = $mid; | |||
| $this->RsFields = ''; | |||
| $this->SearchType = $searchtype == '' ? 'titlekeyword' : $searchtype; | |||
| $this->dsql = $GLOBALS['dsql']; | |||
| $this->dtp = new DedeTagParse(); | |||
| $this->dtp->SetRefObj($this); | |||
| $this->dtp->SetNameSpace("dede", "{", "}"); | |||
| $this->dtp2 = new DedeTagParse(); | |||
| $this->dtp2->SetNameSpace("field", "[", "]"); | |||
| $this->TypeLink = new TypeLink($typeid); | |||
| //通过分词获取关键词 | |||
| $this->Keywords = $this->GetKeywords($keyword); | |||
| //设置一些全局参数的值 | |||
| if ($this->TypeID == "0") { | |||
| $this->ChannelTypeid = 1; | |||
| } else { | |||
| $row = $this->dsql->GetOne("SELECT channeltype FROM `#@__arctype` WHERE id={$this->TypeID}"); | |||
| $this->ChannelTypeid = $row['channeltype']; | |||
| } | |||
| foreach ($GLOBALS['PubFields'] as $k => $v) { | |||
| $this->Fields[$k] = $v; | |||
| } | |||
| $this->CountRecord(); | |||
| $tempfile = $GLOBALS['cfg_basedir'].$GLOBALS['cfg_templets_dir']."/".$GLOBALS['cfg_df_style']."/search.htm"; | |||
| if (defined('DEDEMOB')) { | |||
| $tempfile = str_replace('.htm', '_m.htm', $tempfile); | |||
| } | |||
| if (!file_exists($tempfile) || !is_file($tempfile)) { | |||
| echo "模板文件不存在,无法解析"; | |||
| exit(); | |||
| } | |||
| $this->dtp->LoadTemplate($tempfile); | |||
| $this->TempInfos['tags'] = $this->dtp->CTags; | |||
| $this->TempInfos['source'] = $this->dtp->SourceString; | |||
| if ($this->pagesize == "") { | |||
| $this->pagesize = 30; | |||
| } | |||
| $this->TotalPage = ceil($this->TotalResult / $this->pagesize); | |||
| if ($this->PageNo == 1) { | |||
| $this->dsql->ExecuteNoneQuery("UPDATE `#@__search_keywords` SET result='".$this->TotalResult."' WHERE keyword='".addslashes($keyword)."';"); | |||
| } | |||
| $envs['url_type'] = 3; | |||
| $envs['value'] = $keyword; | |||
| } | |||
| //php4构造函数 | |||
| function SearchView( | |||
| $typeid, | |||
| $keyword, | |||
| $orderby, | |||
| $achanneltype = "all", | |||
| $searchtype = "", | |||
| $starttime = 0, | |||
| $upagesize = 20, | |||
| $kwtype = 1, | |||
| $mid = 0 | |||
| ) { | |||
| $this->__construct($typeid, $keyword, $orderby, $achanneltype, $searchtype, $starttime, $upagesize, $kwtype, $mid); | |||
| } | |||
| //关闭相关资源 | |||
| function Close() | |||
| { | |||
| } | |||
| /** | |||
| * 获得关键词的分词结果,并保存到数据库 | |||
| * | |||
| * @access public | |||
| * @param string $keyword 关键词 | |||
| * @return string | |||
| */ | |||
| function GetKeywords($keyword) | |||
| { | |||
| global $cfg_soft_lang, $cfg_bizcore_appid, $cfg_bizcore_key; | |||
| $keyword = cn_substr($keyword, 50); | |||
| $row = $this->dsql->GetOne("SELECT spwords FROM `#@__search_keywords` WHERE keyword='".addslashes($keyword)."';"); | |||
| if (!is_array($row)) { | |||
| if (strlen($keyword) > 7) { | |||
| if (!empty($cfg_bizcore_appid) && !empty($cfg_bizcore_key)) { | |||
| $client = new DedeBizClient(); | |||
| $data = $client->Spliteword($keyword); | |||
| $kvs = explode(",", $data->data); | |||
| $keywords = $keyword." "; | |||
| foreach ($kvs as $key => $value) { | |||
| $keywords .= ' '.$value; | |||
| } | |||
| $keywords = preg_replace("/[ ]{1,}/", " ", $keywords); | |||
| $client->Close(); | |||
| } else { | |||
| $sp = new SplitWord($cfg_soft_lang, $cfg_soft_lang); | |||
| $sp->SetSource($keyword, $cfg_soft_lang, $cfg_soft_lang); | |||
| $sp->SetResultType(2); | |||
| $sp->StartAnalysis(TRUE); | |||
| $keywords = $sp->GetFinallyResult(); | |||
| $idx_keywords = $sp->GetFinallyIndex(); | |||
| ksort($idx_keywords); | |||
| $keywords = $keyword.' '; | |||
| foreach ($idx_keywords as $key => $value) { | |||
| if (strlen($key) <= 3) { | |||
| continue; | |||
| } | |||
| $keywords .= ' '.$key; | |||
| } | |||
| $keywords = preg_replace("/[ ]{1,}/", " ", $keywords); | |||
| unset($sp); | |||
| } | |||
| } else { | |||
| $keywords = $keyword; | |||
| } | |||
| $inquery = "INSERT INTO `#@__search_keywords` (`keyword`,`spwords`,`count`,`result`,`lasttime`) VALUES ('".addslashes($keyword)."', '".addslashes($keywords)."', '1', '0', '".time()."'); "; | |||
| $this->dsql->ExecuteNoneQuery($inquery); | |||
| } else { | |||
| $this->dsql->ExecuteNoneQuery("UPDATE `#@__search_keywords` SET count=count+1,lasttime='".time()."' WHERE keyword='".addslashes($keyword)."';"); | |||
| $keywords = $row['spwords']; | |||
| } | |||
| return $keywords; | |||
| } | |||
| /** | |||
| * 获得关键词SQL | |||
| * | |||
| * @access private | |||
| * @return string | |||
| */ | |||
| function GetKeywordSql() | |||
| { | |||
| $ks = explode(' ', $this->Keywords); | |||
| $kwsql = ''; | |||
| $kwsqls = array(); | |||
| foreach ($ks as $k) { | |||
| $k = trim($k); | |||
| if (strlen($k) < 1) { | |||
| continue; | |||
| } | |||
| if (ord($k[0]) > 0x80 && strlen($k) < 2) { | |||
| continue; | |||
| } | |||
| $k = addslashes($k); | |||
| if ($this->ChannelType < 0 || $this->ChannelTypeid < 0) { | |||
| $kwsqls[] = " arc.title LIKE '%$k%' "; | |||
| } else { | |||
| if ($this->SearchType == "title") { | |||
| $kwsqls[] = " arc.title LIKE '%$k%' "; | |||
| } else { | |||
| $kwsqls[] = " CONCAT(arc.title,' ',arc.writer,' ',arc.keywords) LIKE '%$k%' "; | |||
| } | |||
| } | |||
| } | |||
| if (!isset($kwsqls[0])) { | |||
| return ''; | |||
| } else { | |||
| if ($this->KType == 1) { | |||
| $kwsql = join(' OR ', $kwsqls); | |||
| } else { | |||
| $kwsql = join(' And ', $kwsqls); | |||
| } | |||
| return $kwsql; | |||
| } | |||
| } | |||
| /** | |||
| * 获得相关的关键词 | |||
| * | |||
| * @access public | |||
| * @param string $num 关键词数目 | |||
| * @return string | |||
| */ | |||
| function GetLikeWords($num = 8) | |||
| { | |||
| $ks = explode(' ', $this->Keywords); | |||
| $lsql = ''; | |||
| foreach ($ks as $k) { | |||
| $k = trim($k); | |||
| if (strlen($k) < 2) { | |||
| continue; | |||
| } | |||
| if (ord($k[0]) > 0x80 && strlen($k) < 2) { | |||
| continue; | |||
| } | |||
| $k = addslashes($k); | |||
| if ($lsql == '') { | |||
| $lsql = $lsql." CONCAT(spwords,' ') LIKE '%$k %' "; | |||
| } else { | |||
| $lsql = $lsql." OR CONCAT(spwords,' ') LIKE '%$k %' "; | |||
| } | |||
| } | |||
| if ($lsql == '') { | |||
| return ''; | |||
| } else { | |||
| $likeword = ''; | |||
| $lsql = "(".$lsql.") AND NOT(keyword like '".addslashes($this->Keyword)."') "; | |||
| $this->dsql->SetQuery("SELECT keyword,count FROM `#@__search_keywords` WHERE $lsql ORDER BY lasttime DESC LIMIT 0,$num;"); | |||
| $this->dsql->Execute('l'); | |||
| while ($row = $this->dsql->GetArray('l')) { | |||
| if ($row['count'] > 1000) { | |||
| $fstyle = " style='font-size:11pt;color:red'"; | |||
| } else if ($row['count'] > 300) { | |||
| $fstyle = " style='font-size:10pt;color:green'"; | |||
| } else { | |||
| $style = ""; | |||
| } | |||
| $likeword .= " <a href='search.php?keyword=".urlencode($row['keyword'])."&searchtype=titlekeyword'".$style.">".$row['keyword']."</a> "; | |||
| } | |||
| return $likeword; | |||
| } | |||
| } | |||
| /** | |||
| * 加粗关键词 | |||
| * | |||
| * @access private | |||
| * @param string $fstr 关键词字符 | |||
| * @return string | |||
| */ | |||
| function GetRedKeyWord($fstr) | |||
| { | |||
| $ks = explode(' ', $this->Keywords); | |||
| foreach ($ks as $k) { | |||
| $k = trim($k); | |||
| if ($k == '') { | |||
| continue; | |||
| } | |||
| if (ord($k[0]) > 0x80 && strlen($k) < 2) { | |||
| continue; | |||
| } | |||
| //这里不区分大小写进行关键词替换 | |||
| $fstr = str_ireplace($k, "<span class='text-primary'>$k</span>", $fstr); | |||
| //速度更快,效率更高$fstr = str_replace($k, "<span class='text-primary'>$k</span>", $fstr); | |||
| } | |||
| return $fstr; | |||
| } | |||
| /** | |||
| * 统计列表里的记录 | |||
| * | |||
| * @access public | |||
| * @return string | |||
| */ | |||
| function CountRecord() | |||
| { | |||
| $this->TotalResult = -1; | |||
| if (isset($GLOBALS['TotalResult'])) { | |||
| $this->TotalResult = $GLOBALS['TotalResult']; | |||
| $this->TotalResult = is_numeric($this->TotalResult) ? $this->TotalResult : ""; | |||
| } | |||
| if (isset($GLOBALS['PageNo'])) { | |||
| $this->PageNo = intval($GLOBALS['PageNo']); | |||
| } else { | |||
| $this->PageNo = 1; | |||
| } | |||
| $ksql = $this->GetKeywordSql(); | |||
| $ksqls = array(); | |||
| if ($this->StartTime > 0) { | |||
| $ksqls[] = " arc.senddate>'".$this->StartTime."' "; | |||
| } | |||
| if ($this->TypeID > 0) { | |||
| $ksqls[] = " typeid IN (".GetSonIds($this->TypeID).") "; | |||
| } | |||
| if ($this->ChannelType > 0) { | |||
| $ksqls[] = " arc.channel='".$this->ChannelType."'"; | |||
| } | |||
| if ($this->mid > 0) { | |||
| $ksqls[] = " arc.mid = '".$this->mid."'"; | |||
| } | |||
| $ksqls[] = " arc.arcrank > -1 "; | |||
| $this->AddSql = ($ksql == '' ? join(' AND ', $ksqls) : join(' AND ', $ksqls)." AND ($ksql)"); | |||
| if ($this->ChannelType < 0 || $this->ChannelTypeid < 0) { | |||
| if ($this->ChannelType == "0") $id = $this->ChannelTypeid; | |||
| else $id = $this->ChannelType; | |||
| $row = $this->dsql->GetOne("SELECT addtable FROM `#@__channeltype` WHERE id=$id"); | |||
| $addtable = trim($row['addtable']); | |||
| $this->AddTable = $addtable; | |||
| } else { | |||
| $this->AddTable = "#@__archives"; | |||
| } | |||
| $cquery = "SELECT * FROM `{$this->AddTable}` arc WHERE ".$this->AddSql; | |||
| //var_dump($cquery); | |||
| $hascode = md5($cquery); | |||
| $row = $this->dsql->GetOne("SELECT * FROM `#@__arccache` WHERE `md5hash`='".$hascode."' "); | |||
| $uptime = time(); | |||
| if (is_array($row) && time() - $row['uptime'] < 3600 * 24) { | |||
| $aids = explode(',', $row['cachedata']); | |||
| $this->TotalResult = count($aids) - 1; | |||
| $this->RsFields = $row['cachedata']; | |||
| } else { | |||
| if ($this->TotalResult == -1) { | |||
| $this->dsql->SetQuery($cquery); | |||
| $this->dsql->execute(); | |||
| $aidarr = array(); | |||
| $aidarr[] = 0; | |||
| while ($row = $this->dsql->getarray()) { | |||
| if ($this->ChannelType < 0 || $this->ChannelTypeid < 0) $aidarr[] = $row['aid']; | |||
| else $aidarr[] = $row['id']; | |||
| } | |||
| $nums = count($aidarr) - 1; | |||
| $aids = implode(',', $aidarr); | |||
| $delete = "DELETE FROM `#@__arccache` WHERE uptime<".(time() - 3600 * 24); | |||
| $this->dsql->SetQuery($delete); | |||
| $this->dsql->executenonequery(); | |||
| $insert = "INSERT INTO `#@__arccache` (`md5hash`,`uptime`,`cachedata`) VALUES ('$hascode','$uptime','$aids')"; | |||
| $this->dsql->SetQuery($insert); | |||
| $this->dsql->executenonequery(); | |||
| $this->TotalResult = $nums; | |||
| } | |||
| } | |||
| } | |||
| /** | |||
| * 显示列表 | |||
| * | |||
| * @access public | |||
| * @param string | |||
| * @return string | |||
| */ | |||
| function Display() | |||
| { | |||
| foreach ($this->dtp->CTags as $tagid => $ctag) { | |||
| $tagname = $ctag->GetName(); | |||
| if ($tagname == "list") { | |||
| $limitstart = ($this->PageNo - 1) * $this->pagesize; | |||
| $row = $this->pagesize; | |||
| if (trim($ctag->GetInnerText()) == "") { | |||
| $InnerText = GetSysTemplets("list_fulllist.htm"); | |||
| } else { | |||
| $InnerText = trim($ctag->GetInnerText()); | |||
| } | |||
| $this->dtp->Assign( | |||
| $tagid, | |||
| $this->GetArcList( | |||
| $limitstart, | |||
| $row, | |||
| $ctag->GetAtt("col"), | |||
| $ctag->GetAtt("titlelen"), | |||
| $ctag->GetAtt("infolen"), | |||
| $ctag->GetAtt("imgwidth"), | |||
| $ctag->GetAtt("imgheight"), | |||
| $this->ChannelType, | |||
| $this->OrderBy, | |||
| $InnerText, | |||
| $ctag->GetAtt("tablewidth") | |||
| ) | |||
| ); | |||
| } else if ($tagname == "pagelist") { | |||
| $list_len = trim($ctag->GetAtt("listsize")); | |||
| $ctag->GetAtt("listitem") == "" ? $listitem = "index,pre,pageno,next,end,option" : $listitem = $ctag->GetAtt("listitem"); | |||
| if ($list_len == "") { | |||
| $list_len = 3; | |||
| } | |||
| $this->dtp->Assign($tagid, $this->GetPageListDM($list_len, $listitem)); | |||
| } else if ($tagname == "likewords") { | |||
| $this->dtp->Assign($tagid, $this->GetLikeWords($ctag->GetAtt('num'))); | |||
| } else if ($tagname == "hotwords") { | |||
| $this->dtp->Assign($tagid, lib_hotwords($ctag, $this)); | |||
| } else if ($tagname == "field") { | |||
| //类别的指定字段 | |||
| if (isset($this->Fields[$ctag->GetAtt('name')])) { | |||
| $this->dtp->Assign($tagid, $this->Fields[$ctag->GetAtt('name')]); | |||
| } else { | |||
| $this->dtp->Assign($tagid, ""); | |||
| } | |||
| } else if ($tagname == "channel") { | |||
| //下级栏目列表 | |||
| if ($this->TypeID > 0) { | |||
| $typeid = $this->TypeID; | |||
| $reid = $this->TypeLink->TypeInfos['reid']; | |||
| } else { | |||
| $typeid = 0; | |||
| $reid = 0; | |||
| } | |||
| $GLOBALS['envs']['typeid'] = $typeid; | |||
| $GLOBALS['envs']['reid'] = $typeid; | |||
| $this->dtp->Assign($tagid, lib_channel($ctag, $this)); | |||
| } //End if | |||
| } | |||
| global $keyword, $oldkeyword; | |||
| if (!empty($oldkeyword)) $keyword = $oldkeyword; | |||
| $this->dtp->Display(); | |||
| } | |||
| /** | |||
| * 获得文档列表 | |||
| * | |||
| * @access public | |||
| * @param int $limitstart 限制开始 | |||
| * @param int $row 行数 | |||
| * @param int $col 列数 | |||
| * @param int $titlelen 标题长度 | |||
| * @param int $infolen 描述长度 | |||
| * @param int $imgwidth 图片宽度 | |||
| * @param int $imgheight 图片高度 | |||
| * @param string $achanneltype 列表类型 | |||
| * @param string $orderby 排列顺序 | |||
| * @param string $innertext 底层模板 | |||
| * @param string $tablewidth 表格宽度 | |||
| * @return string | |||
| */ | |||
| function GetArcList( | |||
| $limitstart = 0, | |||
| $row = 10, | |||
| $col = 1, | |||
| $titlelen = 30, | |||
| $infolen = 250, | |||
| $imgwidth = 120, | |||
| $imgheight = 90, | |||
| $achanneltype = "all", | |||
| $orderby = "default", | |||
| $innertext = "", | |||
| $tablewidth = "100" | |||
| ) { | |||
| $typeid = $this->TypeID; | |||
| if ($row == '') $row = 10; | |||
| if ($limitstart == '') $limitstart = 0; | |||
| if ($titlelen == '') $titlelen = 30; | |||
| if ($infolen == '') $infolen = 250; | |||
| if ($imgwidth == '') $imgwidth = 120; | |||
| if ($imgheight = '') $imgheight = 120; | |||
| if ($achanneltype == '') $achanneltype = '0'; | |||
| $orderby = $orderby == '' ? 'default' : strtolower($orderby); | |||
| $tablewidth = str_replace("%", "", $tablewidth); | |||
| if ($tablewidth == '') $tablewidth = 100; | |||
| if ($col == '') $col = 1; | |||
| $colWidth = ceil(100 / $col); | |||
| $tablewidth = $tablewidth."%"; | |||
| $colWidth = $colWidth."%"; | |||
| $innertext = trim($innertext); | |||
| if ($innertext == '') { | |||
| $innertext = GetSysTemplets("search_list.htm"); | |||
| } | |||
| //排序方式 | |||
| $ordersql = ''; | |||
| if ($this->ChannelType < 0 || $this->ChannelTypeid < 0) { | |||
| if ($orderby == "id") { | |||
| $ordersql = "ORDER BY arc.aid desc"; | |||
| } else { | |||
| $ordersql = "ORDER BY arc.senddate desc"; | |||
| } | |||
| } else { | |||
| if ($orderby == "senddate") { | |||
| $ordersql = " ORDER BY arc.senddate desc"; | |||
| } else if ($orderby == "pubdate") { | |||
| $ordersql = " ORDER BY arc.pubdate desc"; | |||
| } else if ($orderby == "id") { | |||
| $ordersql = " ORDER BY arc.id desc"; | |||
| } else { | |||
| $ordersql = " ORDER BY arc.sortrank desc"; | |||
| } | |||
| } | |||
| //搜索 | |||
| $query = "SELECT arc.*,act.typedir,act.typename,act.isdefault,act.defaultname,act.namerule,act.namerule2,act.ispart,act.moresite,act.siteurl,act.sitepath FROM `{$this->AddTable}` arc LEFT JOIN `#@__arctype` act ON arc.typeid=act.id WHERE {$this->AddSql} $ordersql LIMIT $limitstart,$row"; | |||
| $this->dsql->SetQuery($query); | |||
| $this->dsql->Execute("al"); | |||
| $artlist = ""; | |||
| if ($col > 1) { | |||
| $artlist = "<table width='$tablewidth' cellspacing='0' cellpadding='0'>\r\n"; | |||
| } | |||
| $this->dtp2->LoadSource($innertext); | |||
| for ($i = 0; $i < $row; $i++) { | |||
| if ($col > 1) { | |||
| $artlist .= "<tr>\r\n"; | |||
| } | |||
| for ($j = 0; $j < $col; $j++) { | |||
| if ($col > 1) { | |||
| $artlist .= "<td width='$colWidth'>\r\n"; | |||
| } | |||
| if ($row = $this->dsql->GetArray("al")) { | |||
| if ($this->ChannelType < 0 || $this->ChannelTypeid < 0) { | |||
| $row["id"] = $row["aid"]; | |||
| $row["ismake"] = empty($row["ismake"]) ? "" : $row["ismake"]; | |||
| $row["filename"] = empty($row["filename"]) ? "" : $row["filename"]; | |||
| $row["money"] = empty($row["money"]) ? "" : $row["money"]; | |||
| $row["description"] = empty($row["description "]) ? "" : $row["description"]; | |||
| $row["pubdate"] = empty($row["pubdate "]) ? $row["senddate"] : $row["pubdate"]; | |||
| } | |||
| //处理一些特殊字段 | |||
| $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["description"] = $this->GetRedKeyWord(cn_substr($row["description"], $infolen)); | |||
| $row["title"] = $this->GetRedKeyWord(cn_substr($row["title"], $titlelen)); | |||
| $row["id"] = $row["id"]; | |||
| 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["typeurl"] = GetTypeUrl($row["typeid"], $row["typedir"], $row["isdefault"], $row["defaultname"], $row["ispart"], $row["namerule2"], $row["moresite"], $row["siteurl"], $row["sitepath"]); | |||
| $row["info"] = $row["description"]; | |||
| $row["filename"] = $row["arcurl"]; | |||
| $row["stime"] = GetDateMK($row["pubdate"]); | |||
| $row["textlink"] = "<a href='".$row["filename"]."'>".$row["title"]."</a>"; | |||
| $row["typelink"] = "[<a href='".$row["typeurl"]."'>".$row["typename"]."</a>]"; | |||
| $row["imglink"] = "<a href='".$row["filename"]."'><img src='".$row["picname"]."' width='$imgwidth' height='$imgheight'></a>"; | |||
| $row["image"] = "<img src='".$row["picname"]."' width='$imgwidth' height='$imgheight'>"; | |||
| $row['plusurl'] = $row['phpurl'] = $GLOBALS['cfg_phpurl']; | |||
| $row['memberurl'] = $GLOBALS['cfg_memberurl']; | |||
| $row['templeturl'] = $GLOBALS['cfg_templeturl']; | |||
| if (is_array($this->dtp2->CTags)) { | |||
| foreach ($this->dtp2->CTags as $k => $ctag) { | |||
| if ($ctag->GetName() == 'array') { | |||
| //传递整个数组,在runphp模式中有特殊作用 | |||
| $this->dtp2->Assign($k, $row); | |||
| } else { | |||
| if (isset($row[$ctag->GetName()])) { | |||
| $this->dtp2->Assign($k, $row[$ctag->GetName()]); | |||
| } else { | |||
| $this->dtp2->Assign($k, ''); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| $artlist .= $this->dtp2->GetResult(); | |||
| } //if hasRow | |||
| else { | |||
| $artlist .= ""; | |||
| } | |||
| if ($col > 1) $artlist .= "</td>\r\n"; | |||
| } //Loop Col | |||
| if ($col > 1) { | |||
| $artlist .= "</tr>\r\n"; | |||
| } | |||
| } //Loop Line | |||
| if ($col > 1) { | |||
| $artlist .= "</table>\r\n"; | |||
| } | |||
| $this->dsql->FreeResult("al"); | |||
| return $artlist; | |||
| } | |||
| /** | |||
| * 获取动态的分页列表 | |||
| * | |||
| * @access public | |||
| * @param string $list_len 列表宽度 | |||
| * @return string | |||
| */ | |||
| function GetPageListDM($list_len, $listitem = "index,end,pre,next,pageno") | |||
| { | |||
| global $oldkeyword; | |||
| $prepage = ""; | |||
| $nextpage = ""; | |||
| $prepagenum = $this->PageNo - 1; | |||
| $nextpagenum = $this->PageNo + 1; | |||
| if ($list_len == "" || preg_match("/[^0-9]/", $list_len)) { | |||
| $list_len = 3; | |||
| } | |||
| $totalpage = ceil($this->TotalResult / $this->pagesize); | |||
| if ($totalpage <= 1 && $this->TotalResult > 0) { | |||
| return "<li class='page-item disabled'><span class='page-link'>1页".$this->TotalResult."条</span></li>"; | |||
| } | |||
| if ($this->TotalResult == 0) { | |||
| return "<li class='page-item disabled'><span class='page-link'>0页".$this->TotalResult."条</span></li>"; | |||
| } | |||
| $purl = $this->GetCurUrl(); | |||
| $oldkeyword = (empty($oldkeyword) ? $this->Keyword : $oldkeyword); | |||
| //当结果超过限制时,重设结果页数 | |||
| if ($this->TotalResult > $this->SearchMaxRc) { | |||
| $totalpage = ceil($this->SearchMaxRc / $this->pagesize); | |||
| } | |||
| $infos = "<li class='page-item disabled'><span class='page-link'>{$totalpage}页".$this->TotalResult."条</span></li>\r\n"; | |||
| $geturl = "keyword=".urlencode($oldkeyword)."&searchtype=".$this->SearchType; | |||
| $hidenform = "<input type='hidden' name='keyword' value='".rawurldecode($oldkeyword)."'>\r\n"; | |||
| $geturl .= "&channeltype=".$this->ChannelType."&orderby=".$this->OrderBy; | |||
| $hidenform .= "<input type='hidden' name='channeltype' value='".$this->ChannelType."'>\r\n"; | |||
| $hidenform .= "<input type='hidden' name='orderby' value='".$this->OrderBy."'>\r\n"; | |||
| $geturl .= "&kwtype=".$this->KType."&pagesize=".$this->pagesize; | |||
| $hidenform .= "<input type='hidden' name='kwtype' value='".$this->KType."'>\r\n"; | |||
| $hidenform .= "<input type='hidden' name='pagesize' value='".$this->pagesize."'>\r\n"; | |||
| $geturl .= "&typeid=".$this->TypeID."&TotalResult=".$this->TotalResult."&"; | |||
| $hidenform .= "<input type='hidden' name='typeid' value='".$this->TypeID."'>\r\n"; | |||
| $hidenform .= "<input type='hidden' name='TotalResult' value='".$this->TotalResult."'>\r\n"; | |||
| $purl .= "?".$geturl; | |||
| //获得上一页和下一页的链接 | |||
| if ($this->PageNo != 1) { | |||
| $prepage .= "<li class='page-item'><a class='page-link' href='".$purl."PageNo=$prepagenum'>上一页</a></li>\r\n"; | |||
| $indexpage = "<li class='page-item'><a class='page-link' href='".$purl."PageNo=1'>首页</a></li>\r\n"; | |||
| } else { | |||
| $indexpage = "<li class='page-item disabled'><a class='page-link'>首页</a></li>\r\n"; | |||
| } | |||
| if ($this->PageNo != $totalpage && $totalpage > 1) { | |||
| $nextpage .= "<li class='page-item'><a class='page-link' href='".$purl."PageNo=$nextpagenum'>下一页</a></li>\r\n"; | |||
| $endpage = "<li class='page-item'><a class='page-link' href='".$purl."PageNo=$totalpage'>末页</a></li>\r\n"; | |||
| } else { | |||
| $endpage = "<li class='page-item'><a class='page-link'>末页</a></li>\r\n"; | |||
| } | |||
| //获得数字链接 | |||
| $listdd = ""; | |||
| $total_list = $list_len * 2 + 1; | |||
| if ($this->PageNo >= $total_list) { | |||
| $j = $this->PageNo - $list_len; | |||
| $total_list = $this->PageNo + $list_len; | |||
| 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 .= "<li class='page-item active'><a class='page-link'>$j</a></li>\r\n"; | |||
| } else { | |||
| $listdd .= "<li class='page-item'><a class='page-link' href='".$purl."PageNo=$j'>".$j."</a></li>\r\n"; | |||
| } | |||
| } | |||
| $plist = ""; | |||
| $plist .= "<form name='pagelist' action='".$this->GetCurUrl()."'>$hidenform"; | |||
| $plist .= "<ul class='pagination justify-content-center pt-3'>"; | |||
| $plist .= preg_match('/info/i', $listitem)? $infos : ""; | |||
| $plist .= preg_match('/index/i', $listitem)? $indexpage : ""; | |||
| $plist .= preg_match('/pre/i', $listitem)? $prepage : ""; | |||
| $plist .= preg_match('/pageno/i', $listitem)? $listdd : ""; | |||
| $plist .= preg_match('/next/i', $listitem)? $nextpage : ""; | |||
| $plist .= preg_match('/end/i', $listitem)? $endpage : ""; | |||
| $plist .= "</ul></form>\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; | |||
| } | |||
| }//End Class | |||
| ?> | |||
| @@ -0,0 +1,853 @@ | |||
| <?php | |||
| if (!defined('DEDEINC')) exit('dedebiz'); | |||
| /** | |||
| * 自定义模型列表类 | |||
| * | |||
| * @version $id:sglistview.class.php 15:48 2010年7月7日 tianya $ | |||
| * @package DedeBIZ.Libraries | |||
| * @copyright Copyright (c) 2022 DedeBIZ.COM | |||
| * @license https://www.dedebiz.com/license | |||
| * @link https://www.dedebiz.com | |||
| */ | |||
| @set_time_limit(0); | |||
| require_once(DEDEINC."/archive/partview.class.php"); | |||
| class SgListView | |||
| { | |||
| var $dsql; | |||
| var $dtp; | |||
| var $dtp2; | |||
| var $TypeID; | |||
| var $TypeLink; | |||
| var $PageNo; | |||
| var $TotalPage; | |||
| var $TotalResult; | |||
| var $pagesize; | |||
| var $ChannelUnit; | |||
| var $ListType; | |||
| var $Fields; | |||
| var $PartView; | |||
| var $addSql; | |||
| var $IsError; | |||
| var $CrossID; | |||
| var $IsReplace; | |||
| var $AddTable; | |||
| var $ListFields; | |||
| var $searchArr; | |||
| var $sAddTable; | |||
| /** | |||
| * php5构造函数 | |||
| * | |||
| * @access public | |||
| * @param int $typeid 栏目id | |||
| * @param array $searchArr 检索数组 | |||
| * @return void | |||
| */ | |||
| function __construct($typeid, $searchArr = array()) | |||
| { | |||
| global $dsql, $envs; | |||
| $envs['url_type'] = 1; | |||
| $this->TypeID = $typeid; | |||
| $this->dsql = $dsql; | |||
| $this->CrossID = ''; | |||
| $this->IsReplace = false; | |||
| $this->IsError = false; | |||
| $this->dtp = new DedeTagParse(); | |||
| $this->dtp->SetRefObj($this); | |||
| $this->sAddTable = false; | |||
| $this->dtp->SetNameSpace("dede", "{", "}"); | |||
| $this->dtp2 = new DedeTagParse(); | |||
| $this->dtp2->SetNameSpace("field", "[", "]"); | |||
| $this->TypeLink = new TypeLink($typeid); | |||
| $this->searchArr = $searchArr; | |||
| if (!is_array($this->TypeLink->TypeInfos)) { | |||
| $this->IsError = true; | |||
| } | |||
| if (!$this->IsError) { | |||
| $this->ChannelUnit = new ChannelUnit($this->TypeLink->TypeInfos['channeltype']); | |||
| $this->Fields = $this->TypeLink->TypeInfos; | |||
| $this->Fields['id'] = $typeid; | |||
| $this->Fields['position'] = $this->TypeLink->GetPositionLink(true); | |||
| $this->Fields['title'] = preg_replace("/[<>]/", " / ", $this->TypeLink->GetPositionLink(false)); | |||
| //获得附加表和列表字段信息 | |||
| $this->AddTable = $this->ChannelUnit->ChannelInfos['addtable']; | |||
| $listfield = trim($this->ChannelUnit->ChannelInfos['listfields']); | |||
| $this->ListFields = explode(',', $listfield); | |||
| //设置一些全局参数的值 | |||
| foreach ($GLOBALS['PubFields'] as $k => $v) $this->Fields[$k] = $v; | |||
| $this->Fields['rsslink'] = $GLOBALS['cfg_cmsurl']."/static/rss/".$this->TypeID.".xml"; | |||
| //设置环境变量 | |||
| SetSysEnv($this->TypeID, $this->Fields['typename'], 0, '', 'list'); | |||
| $this->Fields['typeid'] = $this->TypeID; | |||
| //获得交叉栏目id | |||
| if ($this->TypeLink->TypeInfos['cross'] > 0 && $this->TypeLink->TypeInfos['ispart'] == 0) { | |||
| $selquery = ''; | |||
| if ($this->TypeLink->TypeInfos['cross'] == 1) { | |||
| $selquery = "SELECT id,topid FROM `#@__arctype` WHERE typename LIKE '{$this->Fields['typename']}' AND id<>'{$this->TypeID}' AND topid<>'{$this->TypeID}' "; | |||
| } else { | |||
| $this->Fields['crossid'] = preg_replace("/[^0-9,]/", '', trim($this->Fields['crossid'])); | |||
| if ($this->Fields['crossid'] != '') { | |||
| $selquery = "SELECT id,topid FROM `#@__arctype` WHERE id IN({$this->Fields['crossid']}) AND id<>{$this->TypeID} AND topid<>{$this->TypeID} "; | |||
| } | |||
| } | |||
| if ($selquery != '') { | |||
| $this->dsql->SetQuery($selquery); | |||
| $this->dsql->Execute(); | |||
| while ($arr = $this->dsql->GetArray()) { | |||
| $this->CrossID .= ($this->CrossID == '' ? $arr['id'] : ','.$arr['id']); | |||
| } | |||
| } | |||
| } | |||
| } //!error | |||
| } | |||
| //php4构造函数 | |||
| function SgListView($typeid, $searchArr = array()) | |||
| { | |||
| $this->__construct($typeid, $searchArr); | |||
| } | |||
| //关闭相关资源 | |||
| function Close() | |||
| { | |||
| } | |||
| /** | |||
| * 统计列表里的记录 | |||
| * | |||
| * @access public | |||
| * @return void | |||
| */ | |||
| function CountRecord() | |||
| { | |||
| global $cfg_list_son; | |||
| //统计数据库记录 | |||
| $this->TotalResult = -1; | |||
| if (isset($GLOBALS['TotalResult'])) $this->TotalResult = $GLOBALS['TotalResult']; | |||
| if (isset($GLOBALS['PageNo'])) $this->PageNo = $GLOBALS['PageNo']; | |||
| else $this->PageNo = 1; | |||
| $this->addSql = " arc.arcrank > -1 "; | |||
| //栏目id条件 | |||
| if (!empty($this->TypeID)) { | |||
| if ($cfg_list_son == 'N') { | |||
| if ($this->CrossID == '') $this->addSql .= " AND (arc.typeid='".$this->TypeID."') "; | |||
| else $this->addSql .= " AND (arc.typeid IN({$this->CrossID},{$this->TypeID})) "; | |||
| } else { | |||
| if ($this->CrossID == '') $this->addSql .= " AND (arc.typeid IN (".GetSonIds($this->TypeID, $this->Fields['channeltype']).") ) "; | |||
| else $this->addSql .= " AND (arc.typeid IN (".GetSonIds($this->TypeID, $this->Fields['channeltype']).",{$this->CrossID}) ) "; | |||
| } | |||
| } | |||
| $naddQuery = ''; | |||
| //地区与信息类型条件 | |||
| if (count($this->searchArr) > 0) { | |||
| if (!empty($this->searchArr['nativeplace'])) { | |||
| if ($this->searchArr['nativeplace'] % 500 == 0) { | |||
| $naddQuery .= " AND arc.nativeplace >= '{$this->searchArr['nativeplace']}' AND arc.nativeplace < '".($this->searchArr['nativeplace'] + 500)."'"; | |||
| } else { | |||
| $naddQuery .= "AND arc.nativeplace = '{$this->searchArr['nativeplace']}'"; | |||
| } | |||
| } | |||
| if (!empty($this->searchArr['infotype'])) { | |||
| if ($this->searchArr['infotype'] % 500 == 0) { | |||
| $naddQuery .= " AND arc.infotype >= '{$this->searchArr['infotype']}' AND arc.infotype < '".($this->searchArr['infotype'] + 500)."'"; | |||
| } else { | |||
| $naddQuery .= "AND arc.infotype = '{$this->searchArr['infotype']}'"; | |||
| } | |||
| } | |||
| if (!empty($this->searchArr['keyword'])) { | |||
| $naddQuery .= "AND arc.title like '%{$this->searchArr['keyword']}%' "; | |||
| } | |||
| } | |||
| if ($naddQuery != '') { | |||
| $this->sAddTable = true; | |||
| $this->addSql .= $naddQuery; | |||
| } | |||
| if ($this->TotalResult == -1) { | |||
| if ($this->sAddTable) { | |||
| $cquery = "SELECT COUNT(*) AS dd FROM `{$this->AddTable}` arc WHERE ".$this->addSql; | |||
| } else { | |||
| $cquery = "SELECT COUNT(*) AS dd FROM `#@__arctiny` arc WHERE ".$this->addSql; | |||
| } | |||
| $row = $this->dsql->GetOne($cquery); | |||
| if (is_array($row)) { | |||
| $this->TotalResult = $row['dd']; | |||
| } else { | |||
| $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 (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; | |||
| } | |||
| } | |||
| $this->TotalPage = ceil($this->TotalResult / $this->pagesize); | |||
| } | |||
| /** | |||
| * 列表创建网页 | |||
| * | |||
| * @access public | |||
| * @param string $startpage 开始页面 | |||
| * @param string $makepagesize 生成尺寸 | |||
| * @return string | |||
| */ | |||
| function MakeHtml($startpage = 1, $makepagesize = 0) | |||
| { | |||
| if (empty($startpage)) { | |||
| $startpage = 1; | |||
| } | |||
| //创建封面模板文件 | |||
| if ($this->TypeLink->TypeInfos['isdefault'] == -1) { | |||
| echo '这个是动态栏目'; | |||
| return ''; | |||
| } | |||
| //单独页面 | |||
| else if ($this->TypeLink->TypeInfos['ispart'] > 0) { | |||
| $reurl = $this->MakePartTemplets(); | |||
| return $reurl; | |||
| } | |||
| if (empty($this->TotalResult)) $this->CountRecord(); | |||
| //初步给固定值的标记赋值 | |||
| $this->ParseTempletsFirst(); | |||
| $totalpage = ceil($this->TotalResult / $this->pagesize); | |||
| if ($totalpage == 0) { | |||
| $totalpage = 1; | |||
| } | |||
| CreateDir(MfTypedir($this->Fields['typedir'])); | |||
| $murl = ''; | |||
| if ($makepagesize > 0) { | |||
| $endpage = $startpage + $makepagesize; | |||
| } else { | |||
| $endpage = ($totalpage + 1); | |||
| } | |||
| if ($endpage >= $totalpage + 1) { | |||
| $endpage = $totalpage + 1; | |||
| } | |||
| if ($endpage == 1) { | |||
| $endpage = 2; | |||
| } | |||
| for ($this->PageNo = $startpage; $this->PageNo < $endpage; $this->PageNo++) { | |||
| $this->ParseDMFields($this->PageNo, 1); | |||
| $makeFile = $this->GetMakeFileRule($this->Fields['id'], 'list', $this->Fields['typedir'], '', $this->Fields['namerule2']); | |||
| $makeFile = str_replace("{page}", $this->PageNo, $makeFile); | |||
| $murl = $makeFile; | |||
| if (!preg_match("/^\//", $makeFile)) { | |||
| $makeFile = "/".$makeFile; | |||
| } | |||
| $makeFile = $this->GetTruePath().$makeFile; | |||
| $makeFile = preg_replace("/\/{1,}/", "/", $makeFile); | |||
| $murl = $this->GetTrueUrl($murl); | |||
| $this->dtp->SaveTo($makeFile); | |||
| if (PHP_SAPI === 'cli') { | |||
| DedeCli::showProgress(ceil(($this->PageNo / $endpage) * 100), 100); | |||
| } | |||
| } | |||
| if ($startpage == 1) { | |||
| //如果列表启用封面文件,复制这个文件第一页 | |||
| if ( | |||
| $this->TypeLink->TypeInfos['isdefault'] == 1 | |||
| && $this->TypeLink->TypeInfos['ispart'] == 0 | |||
| ) { | |||
| $onlyrule = $this->GetMakeFileRule($this->Fields['id'], "list", $this->Fields['typedir'], '', $this->Fields['namerule2']); | |||
| $onlyrule = str_replace("{page}", "1", $onlyrule); | |||
| $list_1 = $this->GetTruePath().$onlyrule; | |||
| $murl = MfTypedir($this->Fields['typedir']).'/'.$this->Fields['defaultname']; | |||
| $indexname = $this->GetTruePath().$murl; | |||
| copy($list_1, $indexname); | |||
| } | |||
| } | |||
| return $murl; | |||
| } | |||
| /** | |||
| * 显示列表 | |||
| * | |||
| * @access public | |||
| * @return void | |||
| */ | |||
| function Display() | |||
| { | |||
| 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(); | |||
| } | |||
| /** | |||
| * 创建单独模板页面 | |||
| * | |||
| * @access public | |||
| * @return string | |||
| */ | |||
| function MakePartTemplets() | |||
| { | |||
| $this->PartView = new PartView($this->TypeID, false); | |||
| $this->PartView->SetTypeLink($this->TypeLink); | |||
| $nmfa = 0; | |||
| $tmpdir = $GLOBALS['cfg_basedir'].$GLOBALS['cfg_templets_dir']; | |||
| if ($this->Fields['ispart'] == 1) { | |||
| $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_sg.htm"; | |||
| if (defined('DEDEMOB')) { | |||
| $tempfile = str_replace('.htm', '_m.htm', $tempfile); | |||
| } | |||
| } | |||
| $this->PartView->SetTemplet($tempfile); | |||
| } else if ($this->Fields['ispart'] == 2) { | |||
| //跳转网址 | |||
| return $this->Fields['typedir']; | |||
| } | |||
| CreateDir(MfTypedir($this->Fields['typedir'])); | |||
| $makeUrl = $this->GetMakeFileRule($this->Fields['id'], "index", MfTypedir($this->Fields['typedir']), $this->Fields['defaultname'], $this->Fields['namerule2']); | |||
| $makeUrl = preg_replace("/\/{1,}/", "/", $makeUrl); | |||
| $makeFile = $this->GetTruePath().$makeUrl; | |||
| if ($nmfa == 0) { | |||
| $this->PartView->SaveToHtml($makeFile); | |||
| } else { | |||
| if (!file_exists($makeFile)) { | |||
| $this->PartView->SaveToHtml($makeFile); | |||
| } | |||
| } | |||
| return $this->GetTrueUrl($makeUrl); | |||
| } | |||
| /** | |||
| * 显示单独模板页面 | |||
| * | |||
| * @access public | |||
| * @return void | |||
| */ | |||
| function DisplayPartTemplets() | |||
| { | |||
| $this->PartView = new PartView($this->TypeID, false); | |||
| $this->PartView->SetTypeLink($this->TypeLink); | |||
| $nmfa = 0; | |||
| $tmpdir = $GLOBALS['cfg_basedir'].$GLOBALS['cfg_templets_dir']; | |||
| if ($this->Fields['ispart'] == 1) { | |||
| //封面模板 | |||
| $tempfile = str_replace("{tid}", $this->TypeID, $this->Fields['tempindex']); | |||
| $tempfile = str_replace("{cid}", $this->ChannelUnit->ChannelInfos['nid'], $tempfile); | |||
| $tempfile = $tmpdir."/".$tempfile; | |||
| if (!file_exists($tempfile)) { | |||
| $tempfile = $tmpdir."/".$GLOBALS['cfg_df_style']."/index_default_sg.htm"; | |||
| } | |||
| $this->PartView->SetTemplet($tempfile); | |||
| } else if ($this->Fields['ispart'] == 2) { | |||
| //跳转网址 | |||
| $gotourl = $this->Fields['typedir']; | |||
| header("Location:$gotourl"); | |||
| exit(); | |||
| } | |||
| CreateDir(MfTypedir($this->Fields['typedir'])); | |||
| $makeUrl = $this->GetMakeFileRule($this->Fields['id'], "index", MfTypedir($this->Fields['typedir']), $this->Fields['defaultname'], $this->Fields['namerule2']); | |||
| $makeFile = $this->GetTruePath().$makeUrl; | |||
| if ($nmfa == 0) { | |||
| $this->PartView->Display(); | |||
| } else { | |||
| if (!file_exists($makeFile)) { | |||
| $this->PartView->Display(); | |||
| } else { | |||
| include($makeFile); | |||
| } | |||
| } | |||
| } | |||
| /** | |||
| * 获得站点的真实根路径 | |||
| * | |||
| * @access public | |||
| * @return string | |||
| */ | |||
| function GetTruePath() | |||
| { | |||
| $truepath = $GLOBALS["cfg_basedir"]; | |||
| return $truepath; | |||
| } | |||
| /** | |||
| * 获得真实连接路径 | |||
| * | |||
| * @access public | |||
| * @param string $nurl 连接地址 | |||
| * @return string | |||
| */ | |||
| function GetTrueUrl($nurl) | |||
| { | |||
| if (preg_match("/^http[s]?:\/\//", $nurl)) return $nurl; | |||
| if ($this->Fields['moresite'] == 1) { | |||
| if ($this->Fields['sitepath'] != '') { | |||
| $nurl = preg_replace("/^".$this->Fields['sitepath']."/", '', $nurl); | |||
| } | |||
| $nurl = $this->Fields['siteurl'].$nurl; | |||
| } | |||
| return $nurl; | |||
| } | |||
| /** | |||
| * 解析模板,对固定的标记进行初始给值 | |||
| * | |||
| * @access private | |||
| * @return void | |||
| */ | |||
| function ParseTempletsFirst() | |||
| { | |||
| if (isset($this->TypeLink->TypeInfos['reid'])) { | |||
| $GLOBALS['envs']['reid'] = $this->TypeLink->TypeInfos['reid']; | |||
| } | |||
| $GLOBALS['envs']['channelid'] = $this->TypeLink->TypeInfos['channeltype']; | |||
| $GLOBALS['envs']['typeid'] = $this->TypeID; | |||
| $GLOBALS['envs']['cross'] = 1; | |||
| MakeOneTag($this->dtp, $this); | |||
| } | |||
| /** | |||
| * 解析模板,对文档里的变动进行赋值 | |||
| * | |||
| * @access public | |||
| * @param int $PageNo 页码 | |||
| * @param int $ismake 是否编译 | |||
| * @return void | |||
| */ | |||
| function ParseDMFields($PageNo, $ismake = 1) | |||
| { | |||
| //替换第二页后的文档 | |||
| if (($PageNo > 1 || strlen($this->Fields['content']) < 10) && !$this->IsReplace) { | |||
| $this->dtp->SourceString = str_replace('[cmsreplace]', 'display:none', $this->dtp->SourceString); | |||
| $this->IsReplace = true; | |||
| } | |||
| foreach ($this->dtp->CTags as $tagid => $ctag) { | |||
| if ($ctag->GetName() == "list") { | |||
| $limitstart = ($this->PageNo - 1) * $this->pagesize; | |||
| $row = $this->pagesize; | |||
| if (trim($ctag->GetInnerText()) == "") { | |||
| $InnerText = GetSysTemplets("list_fulllist.htm"); | |||
| } else { | |||
| $InnerText = trim($ctag->GetInnerText()); | |||
| } | |||
| $this->dtp->Assign( | |||
| $tagid, | |||
| $this->GetArcList( | |||
| $limitstart, | |||
| $row, | |||
| $ctag->GetAtt("col"), | |||
| $ctag->GetAtt("titlelen"), | |||
| $ctag->GetAtt("listtype"), | |||
| $ctag->GetAtt("orderby"), | |||
| $InnerText, | |||
| $ctag->GetAtt("tablewidth"), | |||
| $ismake, | |||
| $ctag->GetAtt("orderway") | |||
| ) | |||
| ); | |||
| } else if ($ctag->GetName() == "pagelist") { | |||
| $list_len = trim($ctag->GetAtt("listsize")); | |||
| $ctag->GetAtt("listitem") == "" ? $listitem = "index,pre,pageno,next,end,option" : $listitem = $ctag->GetAtt("listitem"); | |||
| if ($list_len == "") { | |||
| $list_len = 3; | |||
| } | |||
| if ($ismake == 0) { | |||
| $this->dtp->Assign($tagid, $this->GetPageListDM($list_len, $listitem)); | |||
| } else { | |||
| $this->dtp->Assign($tagid, $this->GetPageListST($list_len, $listitem)); | |||
| } | |||
| } else if ($PageNo != 1 && $ctag->GetName() == 'field' && $ctag->GetAtt('display') != '') { | |||
| $this->dtp->Assign($tagid, ''); | |||
| } | |||
| } | |||
| } | |||
| /** | |||
| * 获得要创建的文件名称规则 | |||
| * | |||
| * @access public | |||
| * @param string $typeid 栏目id | |||
| * @param string $wname | |||
| * @param string $typedir 栏目目录 | |||
| * @param string $defaultname 默认名称 | |||
| * @param string $namerule2 名称规则 | |||
| * @return string | |||
| */ | |||
| function GetMakeFileRule($typeid, $wname, $typedir, $defaultname, $namerule2) | |||
| { | |||
| $typedir = MfTypedir($typedir); | |||
| if ($wname == 'index') { | |||
| return $typedir.'/'.$defaultname; | |||
| } else { | |||
| $namerule2 = str_replace('{tid}', $typeid, $namerule2); | |||
| $namerule2 = str_replace('{typedir}', $typedir, $namerule2); | |||
| return $namerule2; | |||
| } | |||
| } | |||
| /** | |||
| * 获得一个单列的文档列表 | |||
| * | |||
| * @access public | |||
| * @param int $limitstart 限制开始 | |||
| * @param int $row 行数 | |||
| * @param int $col 列数 | |||
| * @param int $titlelen 标题长度 | |||
| * @param int $infolen 描述长度 | |||
| * @param int $imgwidth 图片宽度 | |||
| * @param int $imgheight 图片高度 | |||
| * @param string $listtype 列表类型 | |||
| * @param string $orderby 排列顺序 | |||
| * @param string $innertext 底层模板 | |||
| * @param string $tablewidth 表格宽度 | |||
| * @param string $ismake 是否编译 | |||
| * @param string $orderWay 排序方式 | |||
| * @return string | |||
| */ | |||
| function GetArcList($limitstart = 0, $row = 10, $col = 1, $titlelen = 30, $listtype = "all", $orderby = "default", $innertext = "", $tablewidth = "100", $ismake = 1, $orderWay = 'desc') | |||
| { | |||
| global $cfg_list_son; | |||
| $typeid = $this->TypeID; | |||
| if ($row == '') $row = 10; | |||
| if ($limitstart == '') $limitstart = 0; | |||
| if ($titlelen == '') $titlelen = 100; | |||
| if ($listtype == '') $listtype = "all"; | |||
| if ($orderby == '') $orderby = 'id'; | |||
| else $orderby = strtolower($orderby); | |||
| if ($orderWay == '') $orderWay = 'desc'; | |||
| $tablewidth = str_replace("%", "", $tablewidth); | |||
| if ($tablewidth == '') $tablewidth = 100; | |||
| if ($col == '') $col = 1; | |||
| $colWidth = ceil(100 / $col); | |||
| $tablewidth = $tablewidth."%"; | |||
| $colWidth = $colWidth."%"; | |||
| $innertext = trim($innertext); | |||
| if ($innertext == '') $innertext = GetSysTemplets('list_sglist.htm'); | |||
| //排序方式 | |||
| $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,$addField FROM `{$this->AddTable}` arc LEFT JOIN `#@__arctype` tp ON arc.typeid=tp.id 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,$addField FROM `{$this->AddTable}` arc LEFT JOIN `#@__arctype` tp ON arc.typeid=tp.id WHERE arc.aid IN($idstr) AND arc.arcrank >-1 $ordersql"; | |||
| } | |||
| $t2 = ExecTime(); | |||
| } | |||
| $this->dsql->SetQuery($query); | |||
| $this->dsql->Execute('al'); | |||
| $t2 = ExecTime(); | |||
| $artlist = ''; | |||
| $this->dtp2->LoadSource($innertext); | |||
| $GLOBALS['autoindex'] = 0; | |||
| for ($i = 0; $i < $row; $i++) { | |||
| if ($col > 1) { | |||
| $artlist .= "<div>\r\n"; | |||
| } | |||
| for ($j = 0; $j < $col; $j++) { | |||
| if ($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']; | |||
| //编译附加表里的数据 | |||
| 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]); | |||
| } | |||
| } | |||
| if (is_array($this->dtp2->CTags)) { | |||
| foreach ($this->dtp2->CTags as $k => $ctag) { | |||
| if ($ctag->GetName() == 'array') { | |||
| //传递整个数组,在runphp模式中有特殊作用 | |||
| $this->dtp2->Assign($k, $row); | |||
| } else { | |||
| if (isset($row[$ctag->GetName()])) { | |||
| $this->dtp2->Assign($k, $row[$ctag->GetName()]); | |||
| } else { | |||
| $this->dtp2->Assign($k, ''); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| $artlist .= $this->dtp2->GetResult(); | |||
| } //if hasRow | |||
| }//Loop Col | |||
| if ($col > 1) { | |||
| $i += $col - 1; | |||
| $artlist .= "</div>\r\n"; | |||
| } | |||
| }//Loop Line | |||
| $t3 = ExecTime(); | |||
| $this->dsql->FreeResult('al'); | |||
| return $artlist; | |||
| } | |||
| /** | |||
| * 获取静态的分页列表 | |||
| * | |||
| * @access public | |||
| * @param int $list_len 列表宽度 | |||
| * @param string $listitem 列表样式 | |||
| * @return string | |||
| */ | |||
| function GetPageListST($list_len, $listitem = "index,end,pre,next,pageno") | |||
| { | |||
| $prepage = ""; | |||
| $nextpage = ""; | |||
| $prepagenum = $this->PageNo - 1; | |||
| $nextpagenum = $this->PageNo + 1; | |||
| if ($list_len == "" || preg_match("/[^0-9]/", $list_len)) { | |||
| $list_len = 3; | |||
| } | |||
| $totalpage = ceil($this->TotalResult / $this->pagesize); | |||
| if ($totalpage <= 1 && $this->TotalResult > 0) { | |||
| return "<li class='page-item disabled'><span class='page-link'>1页".$this->TotalResult."条</span></li>"; | |||
| } | |||
| if ($this->TotalResult == 0) { | |||
| return "<li class='page-item disabled'><span class='page-link'>0页".$this->TotalResult."条</span></li>"; | |||
| } | |||
| $purl = $this->GetCurUrl(); | |||
| $maininfo = "<li class='page-item disabled'><span class='page-link'>{$totalpage}页".$this->TotalResult."条</span></li>"; | |||
| $tnamerule = $this->GetMakeFileRule($this->Fields['id'], "list", $this->Fields['typedir'], $this->Fields['defaultname'], $this->Fields['namerule2']); | |||
| $tnamerule = preg_replace("/^(.*)\//", '', $tnamerule); | |||
| //获得上一页和首页的链接 | |||
| if ($this->PageNo != 1) { | |||
| $prepage .= "<li class='page-item'><a class='page-link' href='".str_replace("{page}", $prepagenum, $tnamerule)."'>上一页</a></li>\r\n"; | |||
| $indexpage = "<li class='page-item'><a class='page-link' href='".str_replace("{page}", 1, $tnamerule)."'>首页</a></li>\r\n"; | |||
| } else { | |||
| $indexpage = "<li class='page-item'>首页</li>\r\n"; | |||
| } | |||
| //下一页和未页的链接 | |||
| if ($this->PageNo != $totalpage && $totalpage > 1) { | |||
| $nextpage .= "<li class='page-item'><a class='page-link' href='".str_replace("{page}", $nextpagenum, $tnamerule)."'>下一页</a></li>\r\n"; | |||
| $endpage = "<li class='page-item'><a class='page-link' href='".str_replace("{page}", $totalpage, $tnamerule)."'>末页</a></li>\r\n"; | |||
| } else { | |||
| $endpage = "<li class='page-item'><a class='page-link'>末页</a></li>"; | |||
| } | |||
| //option链接 | |||
| $optionlist = ""; | |||
| //获得数字链接 | |||
| $listdd = ""; | |||
| $total_list = $list_len * 2 + 1; | |||
| if ($this->PageNo >= $total_list) { | |||
| $j = $this->PageNo - $list_len; | |||
| $total_list = $this->PageNo + $list_len; | |||
| 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 .= "<li class='page-item active'><a class='page-link'>$j</a></li>\r\n"; | |||
| } else { | |||
| $listdd .= "<li class='page-item'><a class='page-link' href='".str_replace("{page}", $j, $tnamerule)."'>".$j."</a></li>\r\n"; | |||
| } | |||
| } | |||
| $plist = ""; | |||
| if (preg_match('/info/i', $listitem)) { | |||
| $plist .= $maininfo.' '; | |||
| } | |||
| if (preg_match('/index/i', $listitem)) { | |||
| $plist .= $indexpage.' '; | |||
| } | |||
| if (preg_match('/pre/i', $listitem)) { | |||
| $plist .= $prepage.' '; | |||
| } | |||
| if (preg_match('/pageno/i', $listitem)) { | |||
| $plist .= $listdd.' '; | |||
| } | |||
| if (preg_match('/next/i', $listitem)) { | |||
| $plist .= $nextpage.' '; | |||
| } | |||
| if (preg_match('/end/i', $listitem)) { | |||
| $plist .= $endpage.' '; | |||
| } | |||
| if (preg_match('/option/i', $listitem)) { | |||
| $plist .= $optionlist; | |||
| } | |||
| return $plist; | |||
| } | |||
| /** | |||
| * 获取动态的分页列表 | |||
| * | |||
| * @access public | |||
| * @param int $list_len 列表宽度 | |||
| * @param string $listitem 列表样式 | |||
| * @return string | |||
| */ | |||
| function GetPageListDM($list_len, $listitem = "index,end,pre,next,pageno") | |||
| { | |||
| global $nativeplace, $infotype, $keyword; | |||
| if (empty($nativeplace)) $nativeplace = 0; | |||
| if (empty($infotype)) $infotype = 0; | |||
| if (empty($keyword)) $keyword = ''; | |||
| $prepage = $nextpage = ''; | |||
| $prepagenum = $this->PageNo - 1; | |||
| $nextpagenum = $this->PageNo + 1; | |||
| if ($list_len == "" || preg_match("/[^0-9]/", $list_len)) { | |||
| $list_len = 3; | |||
| } | |||
| $totalpage = ceil($this->TotalResult / $this->pagesize); | |||
| if ($totalpage <= 1 && $this->TotalResult > 0) { | |||
| return "<li class='page-item disabled'><span class='page-link'>1页".$this->TotalResult."条</span></li>"; | |||
| } | |||
| if ($this->TotalResult == 0) { | |||
| return "<li class='page-item disabled'><span class='page-link'>0页".$this->TotalResult."条</span></li>"; | |||
| } | |||
| $purl = $this->GetCurUrl(); | |||
| $geturl = "tid=".$this->TypeID."&TotalResult=".$this->TotalResult."&nativeplace=$nativeplace&infotype=$infotype&keyword=".urlencode($keyword)."&"; | |||
| $hidenform = "<input type='hidden' name='tid' value='".$this->TypeID."' />\r\n"; | |||
| $hidenform = "<input type='hidden' name='nativeplace' value='$nativeplace' />\r\n"; | |||
| $hidenform = "<input type='hidden' name='infotype' value='$infotype' />\r\n"; | |||
| $hidenform = "<input type='hidden' name='keyword' value='$keyword' />\r\n"; | |||
| $hidenform .= "<input type='hidden' name='TotalResult' value='".$this->TotalResult."' />\r\n"; | |||
| $purl .= "?".$geturl; | |||
| //获得上一页和下一页的链接 | |||
| if ($this->PageNo != 1) { | |||
| $prepage .= "<li class='page-item'><a class='page-link' href='".$purl."PageNo=$prepagenum'>上一页</a></li>\r\n"; | |||
| $indexpage = "<li class='page-item'><a class='page-link' href='".$purl."PageNo=1'>首页</a></li>\r\n"; | |||
| } else { | |||
| $indexpage = "<li class='page-item disabled'><a class='page-link'>首页</a></li>\r\n"; | |||
| } | |||
| if ($this->PageNo != $totalpage && $totalpage > 1) { | |||
| $nextpage .= "<li class='page-item'><a class='page-link' href='".$purl."PageNo=$nextpagenum'>下一页</a></li>\r\n"; | |||
| $endpage = "<li class='page-item'><a class='page-link' href='".$purl."PageNo=$totalpage'>末页</a></li>\r\n"; | |||
| } else { | |||
| $endpage = "<li class='page-item disabled'><a class='page-link'>末页</a></li>"; | |||
| } | |||
| //获得数字链接 | |||
| $listdd = ""; | |||
| $total_list = $list_len * 2 + 1; | |||
| if ($this->PageNo >= $total_list) { | |||
| $j = $this->PageNo - $list_len; | |||
| $total_list = $this->PageNo + $list_len; | |||
| 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 .= "<li class='page-item active'><a class='page-link'>$j</a></li>\r\n"; | |||
| } else { | |||
| $listdd .= "<li class='page-item'><a class='page-link' href='".$purl."PageNo=$j'>".$j."</a></li>\r\n"; | |||
| } | |||
| } | |||
| $plist = $indexpage.$prepage.$listdd.$nextpage.$endpage; | |||
| return $plist; | |||
| } | |||
| /** | |||
| * 获得当前的页面文件链接 | |||
| * | |||
| * @access private | |||
| * @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; | |||
| } | |||
| }//End Class | |||
| ?> | |||