/** 生成页面 对页面进行判断并分割页面 */ function king_iframe_create() { global $king; echo '<html><head><script type="text/javascript" charset="UTF-8" src="../system/js/jquery.js"></script><style type="text/css">p{font-size:12px;padding:0px;margin:0px;line-height:14px;width:450px;white-space:nowrap;}</style><meta http-equiv="Content-Type" content="text/html; charset=' . PAGE_CHARSET . '" /></head><body></body></html>'; /* 生成方式分类 page 只生成页面 NULL 列表及页面 list 只生成列表 not 只生成未生成内容 all 全部 传递继续项目的时候URL参数 action=iframe list=列表页的ID listid 当前正在生成中的列表id pid 如果是正在生成列表页的时候,则带pid参数 kid pagid pid 列表生成完成,正在生成中的kid,pagid 分页id,pid 每页20条数据的时候所属的段 */ $max_execution_time = ini_get('max_execution_time'); //安全的执行时间 if ($max_execution_time >= 20) { $safetime = $max_execution_time - 10; //10秒的余地是比较保险的时间 } else { $safetime = round($max_execution_time / 3, 4); } $create = $_GET['create']; $Listid = isset($_GET['listid']) ? $_GET['listid'] : ''; //url中获得的listid,和下面的listid不要混淆 if ($create == 'all') { $lists = $king->portal->getListids(); } else { $list = kc_get('list', 3, 1); $lists = explode(',', $list); } sort($lists, SORT_NUMERIC); //对listid值进行排序 if ($Listid) { $lists_key = array_search($Listid, $lists); //返回lists数组和listid对应的键值 $lists = array_slice($lists, $lists_key); //删除小于$Listid的值 } $lists_count = count($lists); foreach ($lists as $listid) { $info = $king->portal->infoList($listid); //生成列表 if (!(isset($_GET['kid']) && $Listid == $listid) && ($Listid == $listid && isset($_GET['pid']) || $Listid != $listid) && ($info['nlist'] == 0 && $info['klistpath']) && ($info['modelid'] > 0 || (int) $info['modelid'] === 0) && in_array($create, array('', 'list', 'all'))) { $pid = $listid == $Listid && isset($_GET['pid']) ? $_GET['pid'] : 1; // kc_error('<pre>'.print_r($info,1)); $pcount = $info['modelid'] > 0 ? $info['pcount'] : 0; if ((int) $pcount === 0) { //没有分页的情况,可能是空的列表首页或者单页 list($msecSta, $secSta) = explode(' ', microtime()); //计算 开始生成用时 $king->portal->createList($listid); list($msecEnd, $secEnd) = explode(' ', microtime()); //计算 结束生成用时 $timeDiff = kc_formattime($msecEnd + $secEnd - $msecSta - $secSta); //生成用时 $timeSleep = kc_formattime(($msecEnd + $secEnd - $msecSta - $secSta) * $king->config('proptime')); //休眠时间 echo kc_progress('progress', $king->lang->get('portal/progress/create/list') . ' (' . $king->lang->get('portal/progress/remainder') . ':' . ($lists_count - 1) . ')', 1, 1, "<p>" . $king->lang->get('portal/progress/success') . " [{$info['klistname']}|{$listid}] [1/1] " . $king->lang->get('portal/progress/when') . ":{$timeDiff} " . $king->lang->get('portal/progress/sleep') . ":{$timeSleep}</p>"); king_inc_location($safetime, "manage.content.php?action=iframe&CMD=create&create=" . ($create == 'all' ? 'all' : $create . "&list=" . kc_get('list', 3, 1)) . "&listid={$listid}"); flush(); } else { for ($i = $pid; $i <= $pcount; $i++) { list($msecSta, $secSta) = explode(' ', microtime()); //计算 开始生成用时 $king->portal->createList($listid, $i); list($msecEnd, $secEnd) = explode(' ', microtime()); //计算 结束生成用时 $timeDiff = kc_formattime($msecEnd + $secEnd - $msecSta - $secSta); //生成用时 $timeSleep = kc_formattime(($msecEnd + $secEnd - $msecSta - $secSta) * $king->config('proptime')); //休眠时间 echo kc_progress('progress', $king->lang->get('portal/progress/create/list') . ' (' . $king->lang->get('portal/progress/remainder') . ':' . ($lists_count - 1) . ')', $i, $pcount, "<p>" . $king->lang->get('portal/progress/success') . " [{$info['klistname']}|{$listid}] [{$i}/{$pcount}] " . $king->lang->get('portal/progress/when') . ":{$timeDiff} " . $king->lang->get('portal/progress/sleep') . ":{$timeSleep}</p>"); /* listid 生成中的listid pid 生成到pid页 */ king_inc_location($safetime, "manage.content.php?action=iframe&CMD=create&create=" . ($create == 'all' ? 'all' : $create . "&list=" . kc_get('list', 3, 1)) . "&listid={$listid}&pid=" . ($pcount > $i ? $i + 1 : '')); flush(); } } } //生成页面 if ($info['npage'] == 0 && in_array($create, array('', 'page', 'all', 'not')) && ($Listid == $listid && isset($_GET['kid']) || $Listid != $listid)) { $model = $king->portal->infoModel($info['modelid']); $kid = $listid == $Listid && $_GET['kid'] ? $_GET['kid'] : 1; $sql = $create == 'not' ? 'kid,kpath,ktitle' : 'kid,ktitle'; $pid = ceil($info['ncount'] / 20); //每次读取20条数据,否则读取太多会出现无法打开的情况,特别是数据库和php服务器分开的情况下 $pid_start = isset($_GET['pid']) ? $_GET['pid'] : 1; $k = 1 + ($pid_start - 1) * 20; for ($j = $pid_start; $j <= $pid; $j++) { //分页 if ($res = $king->db->getRows("select {$sql} from %s__{$model['modeltable']} where listid={$listid} and kid1=0 and nshow=1 order by kid desc", 1, $j, 20)) { foreach ($res as $rs) { if (isset($_GET['kid'])) { if ($_GET['kid'] < $rs['kid'] || $_GET['pagid'] == 'next' && $_GET['kid'] == $rs['kid']) { //如果pagid $k++; continue; } } $id = $king->portal->infoID($listid, $rs['kid']); //生成分页面 if ($info['npagenumber'] == 1) { //每页显示数为1的时候 $subkids = explode(',', $id['subkid'] ? $rs['kid'] . ',' . $id['subkid'] : $rs['kid']); //生成次页 $pagid = $rs['kid'] == isset($_GET['kid']) && isset($_GET['pagid']) ? $_GET['pagid'] : 1; $pcount = count($subkids); for ($i = $pagid; $i <= $pcount; $i++) { list($msecSta, $secSta) = explode(' ', microtime()); //计算 开始生成用时 if ($create == 'not') { //生成未生成内容 if ($i == 1) { //第一个为主题页 $filepath = $id['kfilepath']; } else { $id1 = $king->portal->infoID($listid, $subkids[$i - 1]); $filepath = $id1['kfilepath']; } if (is_file(ROOT . $filepath)) { //如果文件存在,则跳出这次循环 echo kc_progress('progress', $king->lang->get('portal/progress/create/page') . ' (' . $king->lang->get('portal/progress/remainder') . ':' . ($lists_count - 1) . ')', $k, $info['ncount'], "<p>" . $king->lang->get('portal/progress/success') . " ID:" . $rs['kid'] . '(' . $i . "/" . $pcount . ") " . $king->lang->get('portal/progress/exist') . ": " . htmlspecialchars($rs['ktitle']) . "</p>"); flush(); king_inc_location($safetime, "manage.content.php?action=iframe&CMD=create&create=" . ($create == 'all' ? 'all' : $create . "&list=" . kc_get('list', 3, 1)) . "&listid={$listid}&pid={$j}&kid=" . ($pcount > $i ? $rs['kid'] . "&pagid=" . ($i + 1) : $rs['kid'] . "&pagid=next")); continue; } } $king->portal->createPage($listid, $subkids[$i - 1]); list($msecEnd, $secEnd) = explode(' ', microtime()); //计算 结束生成用时 $timeDiff = kc_formattime($msecEnd + $secEnd - $msecSta - $secSta); //生成用时 $timeSleep = kc_formattime(($msecEnd + $secEnd - $msecSta - $secSta) * $king->config('proptime')); //休眠时间 echo kc_progress('progress', $king->lang->get('portal/progress/create/page') . ' (' . $king->lang->get('portal/progress/remainder') . ':' . ($lists_count - 1) . ')', $k, $info['ncount'], "<p>" . $king->lang->get('portal/progress/success') . " ID:" . $rs['kid'] . '(' . $i . "/" . $pcount . ") " . $king->lang->get('portal/progress/when') . ":{$timeDiff} " . $king->lang->get('portal/progress/sleep') . ":{$timeSleep} " . htmlspecialchars($rs['ktitle']) . "</p>"); flush(); king_inc_location($safetime, "manage.content.php?action=iframe&CMD=create&create=" . ($create == 'all' ? 'all' : $create . "&list=" . kc_get('list', 3, 1)) . "&listid={$listid}&pid={$j}&kid=" . ($pcount > $i ? $rs['kid'] . "&pagid=" . ($i + 1) : $rs['kid'] . "&pagid=next")); } } else { //当文件分页每页显示数不为1的时候 $pcount = ceil($id['ncount'] / $info['npagenumber']); for ($i = 1; $i <= $pcount; $i++) { if ($create == 'not') { //生成未生成内容 $filepath = $king->portal->pathPage($info, $rs['kid'], $rs['kpath'], 1, 1); if (is_file(ROOT . $filepath)) { //如果文件存在,则跳出这次循环 echo kc_progress('progress', $king->lang->get('portal/progress/create/page') . ' (' . $king->lang->get('portal/progress/remainder') . ':' . ($lists_count - 1) . ')', $k, $info['ncount'], "<p>" . $king->lang->get('portal/progress/success') . " ID:" . $rs['kid'] . '(' . $i . "/" . $pcount . ") " . $king->lang->get('portal/progress/exist') . ": " . htmlspecialchars($rs['ktitle']) . "</p>"); flush(); king_inc_location($safetime, "manage.content.php?action=iframe&CMD=create&create=" . ($create == 'all' ? 'all' : $create . "&list=" . kc_get('list', 3, 1)) . "&listid={$listid}&pid={$j}&kid=" . ($pcount > $i ? $rs['kid'] . "&pagid=" . ($i + 1) : $rs['kid'] . "&pagid=next")); continue; } } list($msecSta, $secSta) = explode(' ', microtime()); //计算 开始生成用时 $king->portal->createPage($listid, $rs['kid'], $i); list($msecEnd, $secEnd) = explode(' ', microtime()); //计算 结束生成用时 $timeDiff = kc_formattime($msecEnd + $secEnd - $msecSta - $secSta); //生成用时 $timeSleep = kc_formattime(($msecEnd + $secEnd - $msecSta - $secSta) * $king->config('proptime')); //休眠时间 echo kc_progress('progress', $king->lang->get('portal/progress/create/page') . ' (' . $king->lang->get('portal/progress/remainder') . ':' . ($lists_count - 1) . ')', $k, $info['ncount'], "<p>" . $king->lang->get('portal/progress/success') . " ID:" . $rs['kid'] . '(' . $i . "/" . $pcount . ") " . $king->lang->get('portal/progress/when') . ":{$timeDiff} " . $king->lang->get('portal/progress/sleep') . ":{$timeSleep} " . htmlspecialchars($rs['ktitle']) . "</p>"); flush(); /* listid 当前生成中的listid pid 生成到第pid页,这个pid分页和list里的pid不同,每次读取20条内容数据 kid 当前生成中的页面id,是否生成列表的区别在于这个kid,若没有kid值,则是生成列表 */ king_inc_location($safetime, "manage.content.php?action=iframe&CMD=create&create=" . ($create == 'all' ? 'all' : $create . "&list=" . kc_get('list', 3, 1)) . "&listid={$listid}&pid={$j}&kid=" . ($pcount > $i ? $rs['kid'] . "&pagid=" . ($i + 1) : $rs['kid'] . "&pagid=next")); } } $k++; } } } } $lists_count--; } list($_msec, $_sec) = explode(' ', microtime()); $thistime = $_sec + $_msec; $diffstart = $thistime - $_GET['time']; //开始时间差 $str = $king->lang->get('system/progress/alltime') . ': ' . kc_formattime($diffstart); echo '<script>window.parent.$.kc_progress(\'progress\',\'' . $king->lang->get('system/progress/ok') . '\',\'' . $str . '\',500)</script>'; }
function king_ajax_create() { global $king; $king->access('portal'); list($_msec, $_sec) = explode(' ', microtime()); $time = $_sec + $_msec; //当前时间 $cmd = substr(CMD, 6); switch ($cmd) { case '': /* $list=kc_getlist(); $s =kc_progress('progresslist').kc_progress('progresslist1').kc_progress('progresspage'); $s.=kc_htm_iframe('manage.content.php?action=iframe&create=list&time='.$time.'&listids='.$list); $s.=kc_htm_iframe('manage.content.php?action=iframe&create=page&time='.$time.'&listids='.$list); kc_ajax($king->lang->get('portal/title/create'),$s,0,null,340,140); */ // $cmd='listpage';//生成列表和页面 // $ break; case 'list': //只生成列表 /* $list=kc_getlist(); $s=kc_progress('progresslist').kc_progress('progresslist1'); $s.=kc_htm_iframe('manage.content.php?action=iframe&create=list&time='.$time.'&listids='.$list); kc_ajax($king->lang->get('portal/title/create'),$s,0,null,340,100); */ break; case 'page': //只生成页面 // $cmd='onlypage'; /* $list=kc_getlist(); $s=kc_progress('progresspage'); $s.=kc_htm_iframe('manage.content.php?action=iframe&create=page&time='.$time.'&listids='.$list); kc_ajax($king->lang->get('portal/title/create'),$s,0,null,340,60); */ break; case 'all': //全站生成 /* $s =kc_progress('progresslist').kc_progress('progresslist1').kc_progress('progresspage'); $s.=kc_htm_iframe('manage.content.php?action=iframe&create=list&time='.$time.'&listids=0'); $s.=kc_htm_iframe('manage.content.php?action=iframe&create=page&time='.$time.'&listids=0'); kc_ajax($king->lang->get('portal/title/create'),$s,0,null,340,140); */ break; case 'not': //生成未生成内容 /* $list=kc_getlist(); $s=kc_progress('progresspage'); $s.=kc_htm_iframe('manage.content.php?action=iframe&create=not&time='.$time.'&listids='.$list); kc_ajax($king->lang->get('portal/title/create'),$s,0,null,340,60); */ break; } $s = kc_progress('progress'); //($create=='all' ? 'all' : "$create&list=".kc_get('list',3,1)) $s .= '<div class="none" id="k_progress_iframe">' . kc_htm_iframe('manage.content.php?action=iframe&time=' . $time . '&CMD=create&create=' . ($cmd == 'all' ? 'all' : "{$cmd}&list=" . kc_getlist()), 502, 200, 'progress_iframe') . '</div>'; $s .= "<script>function moreinfo(){var obj=\$('#progress + div');var o=\$('#k_ajaxBox').offset();if(obj.css('display')=='none'){\$('#k_ajaxMain').height(320);\$('#k_ajaxBox').css('top',o.top-160);\$('#k_ajaxBox').height(320+\$('#k_ajaxTitle').height()+\$('#k_ajaxSubmit').height());obj.show()}else{obj.hide();\$('#k_ajaxMain').height(100);\$('#k_ajaxBox').height(100+\$('#k_ajaxTitle').height()+\$('#k_ajaxSubmit').height());\$('#k_ajaxBox').css('top',o.top+160)}}</script>"; $but = '<a href="javascript:;" onclick="moreinfo()">' . $king->lang->get('portal/common/moreinfo') . '</a>'; $but .= '<a href="javascript:;" class="k_close">' . $king->lang->get('system/common/close') . '</a>'; kc_ajax($king->lang->get('portal/title/create'), $s, $but, null, 546, 100); }