总有人间一两风,填我十万八千梦

ThinkPHP生成静态页面

PHP Zero、J 7551℃ 0评论

ThinkPHPhtml

由于自己 没有很多时间去打理自己的博客,索性就把博客换成了Wordpress了,但是我又不想丢失掉之前的资源,幸好之前的页面都是伪静态的html页面,所以就想着把这些页面全部静态化处理转换成html页面让用户依然能够访问到,我查阅了一下ThinkPHP的文档,有这么一个函数buildhtml(),这个函数是2.x的时代有的,我尝试着用了一下,但是没有成功,经过一番思考,想到了一个比较好的方法,把这个问题解决了。

这个方法是使用ob_start()和ob_get_clean()这两个函数,先将网页输出到缓冲区,然后提取到变量中,最后输出到对应的*.html文件中去,下面是相关的代码,给大家分享一下:

<?php
namespace Home\Controller;
use Think\Controller;
class indexController extends Controller
{
//将$details内容写入到$postion的文件夹中的$filename文件
private function WriteToFile($detail,$filename,$postion="./RM/"){
$filename = $postion.$filename;
file_put_contents($filename, $detail);
}

//这个函数 的目的是把codeorg这个数据库对应的页面全部生成html文件
//注意,一定要先创建相关的文件夹才行,例如我的输出位置是"./RM/codeorg/sid/"这个文件夹
public function buildHtml(){
//首先连接数据库
$Model = M("codeorg");
//查询到文章的sid记录
$SidList = $Model->field("ID")
->select();
//我的页面是在CodeorgController输出的
$AppCtrl = new \Home\Controller\CodeorgController();
//循环
foreach ($SidList as $key => $sidArr) {
//我要生成的页面名称sid的值
$_GET["sid"]=$sidArr["ID"];
//开启输出缓冲
ob_start();
//执行原来的那个显示页面的函数
//注意你的输出页面的函数中的$this->display("xxx:XXX");其中display函数必须要指明模板
//不能使用display()默认空的参数,
//因为当前你在buildHtml函数中,display()的默认模板位置是不对的
$AppCtrl->displaycode();//显示一个页面,实际上是把页面输出到了缓冲区
$out = ob_get_clean();//获取到缓冲区域内容
//写入文件
$this->WriteToFile($out,$sidArr["ID"].".html","./RM/codeorg/sid/");
}
}

?>

上面的代码值得说的地方就是,你在ob_start()和ob_get_clean()之间的页面输出操作,在ThinkPHP中,如果$this->display()输出操作不指定display()的模板的话,那么display()的参数将会是 “控制器:ACTION” 这个路径,所以当你在其他控制器中调用页面输出的时候,如果display()没有指定参数的话,会默认到当前调用的控制器.

转载请注明:悠然品鉴 » ThinkPHP生成静态页面

喜欢 (4)or分享 (0)
发表我的评论
取消评论

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(2)个小伙伴在吐槽
  1. 看看我的http://wp.iyouths.org/250.html
    xhq2016-03-03 02:41 回复
    • 谢谢,我这个方法当时是为了静态化全站用的,你的方法可以设置静态缓存,更好(^ω^)
      浅灬笑2016-03-03 10:15 回复