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

第三补:点击生成

tp5生成纯静态html的更多相关文章

  1. ASP.NET MVC3关于生成纯静态后如何不再走路由直接访问静态页面--收藏没测

    要解决这个问题,我们需要先了解ASP.NET应用程序的生命周期,先看下面作者整理的一张图片: 从图中我们可以清楚的看到:通用IIS访问应用程序时,每次的单个页面URL访问时,都会先经过HttpAppl ...

  2. 使用coding、daocloud和docker打造markdown纯静态博客

    说起独立博客的技术演变,从数据库到纯文本放git是一大进步,从HTML到markdown又是一大进步. 解析技术有没有进步呢?既然markdown是纯文本了,再用PHP/Python/Ruby去实时解 ...

  3. 利用hexo来配合nginx来打造属于自己的纯静态博客系统

    什么是静态网站生成器?顾名思义,就是以最快的速度生成一个高可用的web页面,我们知道Django作为一款非常流行的框架被广泛应用,但是部署起来实在是太麻烦了,各种命令各种配置,动态页面必然要涉及数据库 ...

  4. 利用基于Go Lang的Hugo配合nginx来打造属于自己的纯静态博客系统

    Go lang无疑是目前的当红炸子鸡,极大地提高了后端编程的效率,同时有着极高的性能.借助Go语言我们 可以用同步的方式写出高并发的服务端软件,同时,Go语言也是云原生第一语言,Docker,Kube ...

  5. PHP 页面静态化/纯静态化/伪静态化

    个人博客迁移至独立博客:https://blog.plcent.com/,欢迎大家访问 概念 PHP静态化分为:纯静态化 和 伪静态化:纯静态化又分为:局部静态化 和 完全静态化 纯静态化:是把PHP ...

  6. ffmpeg 纯静态编译,以及添加自定义库流程摘要

    需求:    1. 纯静态编译ffmpeg ,即ldd ./ffmpeg 的结果是:not a dynamic executable    2.  修改ffmpeg 项目,添加自定义功能库    3. ...

  7. 利用基于Python的Pelican打造一个自己的个人纯静态网站

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_100 其实呢这么多年以来我一直建议每个有技术追求的开发者都要有写技术博客记笔记的良好习惯,一来可以积累知识,二来可以帮助别人,三来 ...

  8. 生成freemarker静态页面的工具类

    package cn.bocai.pc.util; import java.io.BufferedWriter;import java.io.File;import java.io.FileOutpu ...

  9. php 开启缓冲,页面纯静态化

    服务器默认不开启php缓冲区 两种方法开启 1.php.ini out_put_buffer = on 2.ob_start(); 页面纯静态化 file_put_contents()写文件 ob_s ...

随机推荐

  1. Spring中FactoryBean与BeanFactory的区别

    版本:spring-framework-4.1 一概述 BeanFactory 与 FactoryBean的区别, 两个名字很像,面试中也经常遇到,所以容易搞混,现从源码以及示例两方面来分析. 二.源 ...

  2. DNS中NS和SOA区别

    ns 授權很簡單… 假設你註冊的 domain 叫 abc.com ,而你有 ns1 與 ns2 兩台 server . 那,你必需從 .com 的權威伺服器授權給你,其設定或類似如此: $ORIGI ...

  3. centos下安装docker最新版教程

    1.通过yum安装需要root或者能sudo的权限 yum包更新到最新$ sudo yum update 添加Docker yum源$ sudo tee /etc/yum.repos.d/docker ...

  4. php 取数组最后一个元素

    可以用end()函数取出数组的最后一个元素, $rList = array( array('id'=>1,'txt'=>'a'), array('id'=>2,'txt'=>' ...

  5. HBase,region以及HFile概念

    什么是HBase的Region? 大家一定对一个词不陌生:域分区,这个域就是Region:Region定义为key的一个取值范围的子集的数据载体:比如常见的域分区有固定大小分区,比如1-10一个reg ...

  6. UT报错误:A granted authority textual representation is required

    原因:团队唯一标识数据为空,必须保证唯一 牵连需要改进的代码: UserDetailService.java 60行"初始化角色集合"未进行异常处理

  7. JProfiler 8(一个很好的java性能监控工具) 下载和注册码

    windows x64 zip下载地址:http://download-aws.ej-technologies.com/jprofiler/jprofiler_windows-x64_8_0_1.zi ...

  8. xargs命令学习

    1.xargs复制文件 目录下文件结构为: . ├── demo1 │ ├── test.lua │ ├── test.php │ └── test.txt └── demo2 执行命令: find ...

  9. 2018 Multi-University Training Contest 4-Problem B. Harvest of Apples

    由公式$S(n, m)=S(n - 1, m) + S(n - 1, m - 1) = 2 * S(n - 1, m) - C_{n-1}^{m}$ 莫队思想

  10. CentOS-7设置开机进入命令行界面(不进入图形界面)

    [root@localhost ~]# systemctl get-default graphical.target [root@localhost ~]# systemctl set-default ...