这只是一个demo
第一步:使用php的ob缓存实现页面静态化
控制器方法:
<?php namespace app estcontroller; use app estmodelDetailModel; use thinkDb; class Detail extends Base { public function index() { $id = input('param.id'); $fileName='./html/'.$id.'.html'; $model = new DetailModel(); $detail = $model->getDetail($id); $this->assign('detail',$detail); $data= $this->fetch(); file_put_contents($fileName,$data); //echo $data; //如果你想访问pathinfo方式也可以打开 就echo一下 如果后台生成,就可以关闭 } }
第二步:后台手动执行生成html文件
html界面 ,将form提交到iframe
<div class="ibox-content"> <form class="form-horizontal" name="import" id="import" enctype="multipart/form-data" method="post" action="{:url('createlistAction')}" target="result"> <div class="hr-line-dashed"></div> <div class="form-group"> <label class="col-sm-3 control-label">选择栏目:</label> <div class="col-sm-4 input-group"> <select name="cate" class="form-control"> <option value="0">--生成全部分类--</option> {foreach name="$cate" item="v"} <option value="{$v.id}" style="margin-left:55px;">{$v.name}</option> {/foreach} </select> </div> </div> <div class="hr-line-dashed"></div> <div class="form-group"> <div class="col-sm-4 col-sm-offset-3"> <button class="btn btn-primary" type="submit"><i class="fa fa-save"></i> 生成栏目</button> <a class="btn btn-danger" href="javascript:history.go(-1);"><i class="fa fa-close"></i> 返回</a> </div> </div> </form> <iframe name="result" style=" 100%;border: #fff solid 0px;"></iframe> </div>
action对应的控制器执行生成操作:
public function createlistAction(){ $url="http://".$_SERVER['HTTP_HOST']; // .url('/test/index/index'); $cate=input('param.cate'); $id=input('param.id',0); if($cate==0){ $catesql=Db::name('ArticleCate')->column('id'); $cateid=implode(',',$catesql); }else{ $cateid=Db::name('ArticleCate')->where('id',$cate)->value('id'); } $count=Db::name('Article')->count(); $map['cate_id']=array('in',$cateid); $map['id']=array('>',$id); $list=Db::name('Article')->where($map)->limit(1)->column('id'); foreach ($list as $val){ $fileurl=$url.url('/test/Detail/index/id/'.$val); $result=file_get_contents($fileurl); if($result){ $gourl=$url.url('createlistAction',['cate'=>$cate,'id'=>$val]); ShowMsg("成功创建:".$val.",继续进行操作!",$gourl,0,2000); } } }
其中 上面方法中用到的ShowMsg方法 复制的dedecms的
/** * 短消息函数,可以在某个动作处理后友好的提示信息 * * @param string $msg 消息提示信息 * @param string $gourl 跳转地址 * @param int $onlymsg 仅显示信息 * @param int $limittime 限制时间 * @return void */ function ShowMsg($msg, $gourl, $onlymsg=0, $limittime=0) { if(empty($GLOBALS['cfg_plus_dir'])) $GLOBALS['cfg_plus_dir'] = '..'; $htmlhead = "<html> <head> <title>提示信息</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> "; $htmlhead .= "<base target='_self'/> <style>div{line-height:160%;}</style></head> <body leftmargin='0' topmargin='0' bgcolor='#FFFFFF'>"." <center> <script> "; $htmlfoot = "</script> </center> </body> </html> "; $litime = ($limittime==0 ? 1000 : $limittime); $func = ''; if($gourl=='-1') { if($limittime==0) $litime = 5000; $gourl = "javascript:history.go(-1);"; } if($gourl=='' || $onlymsg==1) { $msg = "<script>alert("".str_replace(""","“",$msg)."");</script>"; } else { //当网址为:close::objname 时, 关闭父框架的id=objname元素 if(preg_match('/close::/',$gourl)) { $tgobj = trim(preg_replace('/close::/', '', $gourl)); $gourl = 'javascript:;'; $func .= "window.parent.document.getElementById('{$tgobj}').style.display='none'; "; } $func .= " var pgo=0; function JumpUrl(){ if(pgo==0){ location='$gourl'; pgo=1; } } "; $rmsg = $func; $rmsg .= "document.write("<br /><div style='450px;padding:0px;border:1px solid #DADADA;'>"; $rmsg .= "<div style='padding:6px;font-size:12px;border-bottom:1px solid #DADADA;background:#DBEEBD';'><b>提示信息!</b></div>"); "; $rmsg .= "document.write("<div style='height:130px;font-size:10pt;background:#ffffff'><br />"); "; $rmsg .= "document.write("".str_replace(""","“",$msg).""); "; $rmsg .= "document.write(""; if($onlymsg==0) { if( $gourl != 'javascript:;' && $gourl != '') { $rmsg .= "<br /><a href='{$gourl}'>如果你的浏览器没反应,请点击这里...</a>"; $rmsg .= "<br/></div>"); "; $rmsg .= "setTimeout('JumpUrl()',$litime);"; } else { $rmsg .= "<br/></div>"); "; } } else { $rmsg .= "<br/><br/></div>"); "; } $msg = $htmlhead.$rmsg.$htmlfoot; } echo $msg; }
第三补:点击生成