ThinkPHP生成静态页面

 2024-03-05 00:05:30  阅读 0

由于自己没有太多时间打理自己的博客,所以干脆改成了博客,但又不想失去之前的资源。 幸运的是,前面的页面都是伪静态的HTML页面,所以我想到了将这些页面转换成所有静态处理转换成html页面,这样用户仍然可以访问它们。 我查了文档,发现有这么一个函数()。 这个功能在2.x时代就有了。 我尝试使用它,但没有成功。 经过一番思考,我想出了一个更好的方法来解决这个问题。

该方法是利用()和()两个函数先将网页输出到缓冲区,然后提取到变量中,最后输出到对应的*.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/");
}
}
?>

上面的代码值得一提的是,你的页面输出操作在()和()之间,如果$this->()输出操作没有指定()的模板,那么()的参数就会是“:”的路径,所以在其他控制器中调用页面输出时,如果()不指定参数,则默认为当前调用的控制器。

扫描二维码领取红包奖励~~

(余额宝支付时可当现金使用)

转载时请注明:悠闲品味 » 生成静态页面

标签: 页面 静态 输出

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码