tp5生成纯静态html

这只是一个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>&nbsp;&nbsp;&nbsp;
                                <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;
}

第三补:点击生成

原文地址:https://www.cnblogs.com/houdj/p/8693630.html