Pārlūkot izejas kodu

手机端组件

master
叙述、别离 pirms 2 gadiem
vecāks
revīzija
cc3a0c2e3a
25 mainītis faili ar 7755 papildinājumiem un 1 dzēšanām
  1. +58
    -1
      README.md
  2. +768
    -0
      admin/inc/inc_archives_functions.php
  3. +129
    -0
      admin/inc/inc_menu.php
  4. +136
    -0
      admin/makehtml_m_all.php
  5. +14
    -0
      admin/makehtml_m_archives.php
  6. +113
    -0
      admin/makehtml_m_archives_action.php
  7. +98
    -0
      admin/makehtml_m_config.php
  8. +27
    -0
      admin/makehtml_m_homepage.php
  9. +14
    -0
      admin/makehtml_m_list.php
  10. +125
    -0
      admin/makehtml_m_list_action.php
  11. +100
    -0
      admin/templets/makehtml_m_all.htm
  12. +57
    -0
      admin/templets/makehtml_m_archives.htm
  13. +81
    -0
      admin/templets/makehtml_m_config.htm
  14. +56
    -0
      admin/templets/makehtml_m_list.htm
  15. +40
    -0
      m/index.php
  16. +59
    -0
      m/list.php
  17. +94
    -0
      m/search.php
  18. +28
    -0
      m/tags.php
  19. +96
    -0
      m/view.php
  20. +1026
    -0
      system/archive/archives.class.php
  21. +1034
    -0
      system/archive/archives.m.class.php
  22. +997
    -0
      system/archive/listview.class.php
  23. +1023
    -0
      system/archive/listview.m.class.php
  24. +729
    -0
      system/archive/searchview.class.php
  25. +853
    -0
      system/archive/sglistview.class.php

+ 58
- 1
README.md Parādīt failu

@@ -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>

+ 768
- 0
admin/inc/inc_archives_functions.php Parādīt failu

@@ -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('&amp;','&',$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;
}
?>

+ 129
- 0
admin/inc/inc_menu.php Parādīt failu

@@ -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>";
?>

+ 136
- 0
admin/makehtml_m_all.php Parādīt failu

@@ -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; ");
}
?>

+ 14
- 0
admin/makehtml_m_archives.php Parādīt failu

@@ -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');
?>

+ 113
- 0
admin/makehtml_m_archives_action.php Parādīt failu

@@ -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");
}
}
}
?>

+ 98
- 0
admin/makehtml_m_config.php Parādīt failu

@@ -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');
?>

+ 27
- 0
admin/makehtml_m_homepage.php Parādīt failu

@@ -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:;");
?>

+ 14
- 0
admin/makehtml_m_list.php Parādīt failu

@@ -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');
?>

+ 125
- 0
admin/makehtml_m_list_action.php Parādīt failu

@@ -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();
}
}
?>

+ 100
- 0
admin/templets/makehtml_m_all.htm Parādīt failu

@@ -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>

+ 57
- 0
admin/templets/makehtml_m_archives.htm Parādīt failu

@@ -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>

+ 81
- 0
admin/templets/makehtml_m_config.htm Parādīt failu

@@ -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>

+ 56
- 0
admin/templets/makehtml_m_list.htm Parādīt failu

@@ -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>

+ 40
- 0
m/index.php Parādīt failu

@@ -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');
}
?>

+ 59
- 0
m/list.php Parādīt failu

@@ -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();
?>

+ 94
- 0
m/search.php Parādīt failu

@@ -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();
?>

+ 28
- 0
m/tags.php Parādīt failu

@@ -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();
?>

+ 96
- 0
m/view.php Parādīt failu

@@ -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();
?>

+ 1026
- 0
system/archive/archives.class.php
Failā izmaiņas netiks attēlotas, jo tās ir par lielu
Parādīt failu


+ 1034
- 0
system/archive/archives.m.class.php
Failā izmaiņas netiks attēlotas, jo tās ir par lielu
Parādīt failu


+ 997
- 0
system/archive/listview.class.php
Failā izmaiņas netiks attēlotas, jo tās ir par lielu
Parādīt failu


+ 1023
- 0
system/archive/listview.m.class.php
Failā izmaiņas netiks attēlotas, jo tās ir par lielu
Parādīt failu


+ 729
- 0
system/archive/searchview.class.php Parādīt failu

@@ -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
?>

+ 853
- 0
system/archive/sglistview.class.php Parādīt failu

@@ -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
?>

Notiek ielāde…
Atcelt
Saglabāt