thinkphp页面真静态化实现方法

 时间:2024-10-14 01:29:32

1、在执行之前,要在根目录下的程序入口文件index.php中进行如下配置://生成静态页面的文件位置define('HTML_PATH', './HTML/');

thinkphp页面真静态化实现方法

2、参数分别为(栏目或内容的URL路径,静态文件保存路径,生成静态文件的文竭惮蚕斗件名):function createHtml($url,$dir,$filename){ $content = file_get_contents($url); //获取内容 if (!is_dir($dir)){ mkdir(iconv("UTF-8", "GBK", $dir),0777,true); //创建目录(777权限) } //处理导航链接 $listurls = "/[\'|\"]\/Admin\/list\/articleList\/id\/(.*?)[\'|\"]/"; preg_match_all($listurls,$content,$matchlist);//根据需求自行修改正则 foreach ( $matchlist[1] as $key => $value ) { $value = trim($value); $where['url'] = $value; $cat = M('category')->where($where)->limit(1)->find(); $listurl = "\"/".$dir."/".$value.".html\""; $content = str_replace ( $matchlist[0][$key], $listurl, $content ); } //处理文章列表页 //列表页链接进入内容页 $infourl = "/href=[\'|\']\/App\/list\/articleInfo\/id\/(.*?)[\'|\']/"; preg_match_all($infourl,$content,$matchlist);//根据需求自行修改正则 foreach($matchlist[1] as $key => $value){ $value = trim($value); $where['id'] = $value; $cateid = M('article')->where($where)->limit(1)->getField('category_id'); $cat = M('category')->where('id=' . $cateid)->limit(1)->find(); $info = "href='/".$dir."/".$cat['url']."/".$value.".html'"; $content = str_replace ( $matchlist[0][$key], $info, $content ); } //文章列表分页 $page = "/<a (.*?) href=[\'|\"]\/Admin\/List\/articleList\/id\/(.*?)\/p\/(.*?)[\'|\"]>/"; preg_match_all($page,$content,$matchpage); foreach ( $matchpage[3] as $key1 => $value1 ) { foreach ( $matchpage[1] as $key2 => $value2 ) { if($key1 == $key2){ $value1 = trim($value1); $value2 = trim($value2); $url = '<a '.$value2.' href="/'.$dir.'/index_'.$value1.'.html">'; $content = str_replace ( $matchpage[0][$key1], $url, $content ); } } } //生成的文件路径与文件名 $path = $dir."/".$filename.".html"; if(file_exists($path)){ unlink($path); //删除已有的同名文件 } //打开文件,如果文件不存在则尝试创建之。 $fp = fopen($path, "w"); $flag = fwrite($fp, $content);//写入内容 fclose($fp); return $flag; //返回写入标识[成功/失败] }

thinkphp页面真静态化实现方法

3、//列表页面静态化 public function sethtml(){ $id = I("param.id"稆糨孝汶;,"","trim"); $m = M('category'); if (!$id) { return 0;//执行失败 } $catdir = trim($id); $where['id']=$catdir; $cat = $m->where($where)->limit(1)->find(); if (empty($cat)) { return 0;//执行失败 } $psize = 10; //每个分页展示几条数据 $where['category_id'] = $cat['id']; $count = M('article')->where($where)->count();//当前分类下文章总数 $pagecount = ceil(intval($count)/intval($psize)); //分页数(向上取整) $host = I("server.HTTP_HOST"); //多页面,列表分页 if($pagecount > 1){ for($i=1;$i<=$pagecount;$i++){ $url = 'http://'.$host.'/Admin/list/articleList/id/'.$catdir.'/p/'.$i.''; $dir = "./news/".A("base")->getPinyin($cat['name']); $dirs = "./news"; $filename = 'index_'.$i; //分类名[当前文件名] $res = $this->createHtml($url,$dir,$filename);//创建静态文件 if(!$res){ $save = "/news/".A("base")->getPinyin($cat['name']); $up_url = M("category")->where("id = '$id'")->setfield("url",$save); return 0;//执行失败 } } } //单页面 $url = 'http://'.$host.'/Admin/list/articleList/id/'.$catdir.''; $dir = "./news/".A("base")->getPinyin($cat['name']); $dirs = "./news"; $filename = 'index'; //分类名当文件名 $res = $this->createHtml($url,$dir,$filename); if($res){ $save = "/news/".A("base")->getPinyin($cat['name']); $up_url = M("category")->where("id = '$id'")->setfield("url",$save); return 1;//执行成功 }else{ return 0;//执行失败 } }

thinkphp页面真静态化实现方法

4、列表页静态化的‍难点就是,根据不同分页链接中的p参数的不同进行静态化,在判断当前有几个分页之后,如果只有一个页面就生成一个文件,如果有多个就循环执行生成多个文件。

thinkphp页面真静态化实现方法

5、CREATE TABLE `news_category` ( `id` int(11) NOT NULL AUTO_INCREMENT, `pid` int(11) NOT NULL, `name` varchar(20) NOT NULL COMMENT '类别名称', `alias` varchar(20) NOT NULL COMMENT '别名', `sort` int(11) NOT NULL COMMENT '排序', `url` varchar(255) NOT NULL, `lv` int(11) NOT NULL, PRIMARY KEY (`id`)) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 COMMENT='新闻栏目表';

thinkphp页面真静态化实现方法

6、//内容页面静态化 public function sethtmls(){ $id = I("param.id",&qu泠贾高框ot;","trim"); if (!$id) { return 0; } $where['id'] = $id; $cateid = M('article')->where($where)->limit(1)->getField('category_id'); $cat = M('category')->where('id=' . $cateid)->limit(1)->find(); if (empty($cat)) { return 0; } $dir = "./news/".A("base")->getPinyin($cat['name'])."/".date("Ymd"); $host = I("server.HTTP_HOST"); $url = 'http://'.$host.'/Admin/list/articleInfo/id/'.$id.''; $filename = $id; //ID当文件名 $res = $this->createHtml($url,$dir,$filename); if($res){ $save = "news/".A("base")->getPinyin($cat['name'])."/".date("Ymd")."/".$id.".html"; $up_url = M("article")->where("id = '$id'")->setfield("url",$save); return 1; }else{ return 0; } }

thinkphp页面真静态化实现方法

7、CREATE TABLE `news_article` ( `id` int(11) NOT NULL AUTO_INCREMENT, `category_id` int(11) NOT NULL COMMENT '新闻栏目id', `publisher` int(11) NOT NULL COMMENT '发布者', `title` varchar(50) NOT NULL COMMENT '文章标题', `content` text NOT NULL COMMENT '新闻内容', `keywords` varchar(255) NOT NULL COMMENT '关键字', `flag` varchar(11) NOT NULL COMMENT '属性', `description` varchar(255) NOT NULL COMMENT '描述', `img` varchar(255) NOT NULL, `url` varchar(255) NOT NULL COMMENT '静态url', `addtime` varchar(20) NOT NULL COMMENT '添加时间', PRIMARY KEY (`id`)) ENGINE=MyISAM AUTO_INCREMENT=51 DEFAULT CHARSET=utf8 COMMENT='新闻表';

thinkphp页面真静态化实现方法

8、//首页页面静态化 public function setindexhtml(){ $host = I("server.HTTP_HOST"); $url = 'http://'.$host.'/Admin/list/article'; $dir = './'; //存放路径 $filename = 'index'; //分类名当文件名 $res = $this->createHtml($url,$dir,$filename); if($res){ return 1; }else{ return 0; } }

thinkphp页面真静态化实现方法

9、注意页面模板引用的css,js的地址防止生成的静态页面找不到对应的css,js路径

thinkphp页面真静态化实现方法
  • 东南亚风格的特点
  • 龙珠Q传寻找龙珠怎么玩
  • 山药粉蒸肉的做法
  • 天津华宁KBZ3300组合开关使用说明书:[5]
  • 前海公司注册流程及条件
  • 热门搜索
    保护牙齿手抄报 我爱文学手抄报 科普手抄报内容 小学生英语手抄报 幼儿手抄报 爱我中华手抄报内容 手抄报国庆 2035年的家乡手抄报 手抄报图片大全3年级 历史手抄报图片