/**
	生成页面
	对页面进行判断并分割页面
*/
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>';
}
Exemple #2
0
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);
}