这只是一个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. tomcat自启动脚本

    1.#cd /etc/rc.d/init.d2.#vi tomcat3.把下面的代码保存为tomcat文件,并让它成为可执行文件 chmod 755 tomcat. #!/bin/sh # # /et ...

  2. CentOS 6.5 下搭建NTP服务器

    参考网站: http://www.iyunv.com/thread-64847-1-1.html http://acooly.iteye.com/blog/1993484 1         检查系统 ...

  3. 在Linux中安装Oracle(较详细图解)

    原创 http://www.cnblogs.com/nucdy/p/5603998.html 参考视屏:链接: https://pan.baidu.com/s/1kViEZQZ  密码: z7ha ( ...

  4. web deploy 部署到远程服务器(win server 2008 r2) 遇到的问题。。。。

    和他遇到的情况一样,最后也解决了 http://www.cnblogs.com/brucejia/archive/2012/07/30/2615416.html 安装的前提是先看下这里: http:/ ...

  5. map、reduce处理数据结构及常见案例

    随着三大前端框架和小程序的流行,MVVM大行其道,而其中的核心是 ViewModel 层,它就像是一个中转站(value converter),负责转换 Model 中的数据对象来让数据变得更容易管理 ...

  6. Linux嵌入式内核模块程序设计

    1.环境搭建 vmware+Fedora 2.创建一个Hello文件 [root@localhost ~]# mkdir Hello 3.在Hello里面创建 hello.c 和 Makefile 两 ...

  7. Float IP设置

    浮动IP: 在做双机的时候,设定的一个IP,通过访问这个IP,具体到后台哪台机器,由系统指定. 浮动IP是随资源一起走的. 就是由软件根据具体情况把该IP设置在某一台机器上,对外提供服务 为了避免因为 ...

  8. ZOJ-3230-Solving the Problems

    /*ZOJ Problem Set - 3230Solving the Problems ------------------------------------------------------- ...

  9. spring data jpa 的各种查询总结

    参考哦:https://blog.csdn.net/weixin_36667844/article/details/79945156

  10. 检测IE浏览器版本是否过低

    <script type="text/javascript"> /*判断浏览器版本是否过低*/ $(document).ready(function() {s var ...