由于自己没有太多时间打理自己的博客,所以干脆改成了博客,但又不想失去之前的资源。 幸运的是,前面的页面都是伪静态的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->()输出操作没有指定()的模板,那么()的参数就会是“:”的路径,所以在其他控制器中调用页面输出时,如果()不指定参数,则默认为当前调用的控制器。
扫描二维码领取红包奖励~~
(余额宝支付时可当现金使用)
转载时请注明:悠闲品味 » 生成静态页面