tp5生成纯静态html

这只是一个demo

第一步:使用php的ob缓存实现页面静态化

控制器方法:

<?php
namespace app\test\controller;
use app\test\model\DetailModel;
use think\Db;

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="width: 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>\r\n<head>\r\n<title>提示信息</title>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\r\n";
    $htmlhead .= "<base target='_self'/>\r\n<style>div{line-height:160%;}</style></head>\r\n<body leftmargin='0' topmargin='0' bgcolor='#FFFFFF'>"."\r\n<center>\r\n<script>\r\n";
    $htmlfoot  = "</script>\r\n</center>\r\n</body>\r\n</html>\r\n";

    $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';\r\n";
        }

        $func .= "      var pgo=0;
      function JumpUrl(){
        if(pgo==0){ location='$gourl'; pgo=1; }
      }\r\n";
        $rmsg = $func;
        $rmsg .= "document.write(\"<br /><div style='width: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>\");\r\n";
        $rmsg .= "document.write(\"<div style='height:130px;font-size:10pt;background:#ffffff'><br />\");\r\n";
        $rmsg .= "document.write(\"".str_replace("\"","“",$msg)."\");\r\n";
        $rmsg .= "document.write(\"";

        if($onlymsg==0)
        {
            if( $gourl != 'javascript:;' && $gourl != '')
            {
                $rmsg .= "<br /><a href='{$gourl}'>如果你的浏览器没反应,请点击这里...</a>";
                $rmsg .= "<br/></div>\");\r\n";
                $rmsg .= "setTimeout('JumpUrl()',$litime);";
            }
            else
            {
                $rmsg .= "<br/></div>\");\r\n";
            }
        }
        else
        {
            $rmsg .= "<br/><br/></div>\");\r\n";
        }
        $msg  = $htmlhead.$rmsg.$htmlfoot;
    }
    echo $msg;
}

 

 

第三补:点击生成

 

posted on 2018-04-02 15:13  长不大的菜鸟  阅读(1048)  评论(0编辑  收藏  举报

导航