thinkphp页面真静态化实现方法
来源:网络收集 点击: 时间:2024-02-15在执行之前,要在根目录下的程序入口文件index.php中进行如下配置:
//生成静态页面的文件位置define(HTML_PATH, ./HTML/);

参数分别为(栏目或内容的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 as $key = $value ) {
$value = trim($value);
$where = $value;
$cat = M(category)-where($where)-limit(1)-find();
$listurl = \/.$dir./.$value..html\;
$content = str_replace ( $matchlist, $listurl, $content );
}
//处理文章列表页
//列表页链接进入内容页
$infourl = /href=\/App\/list\/articleInfo\/id\/(.*?)/;
preg_match_all($infourl,$content,$matchlist);//根据需求自行修改正则
foreach($matchlist as $key = $value){
$value = trim($value);
$where = $value;
$cateid = M(article)-where($where)-limit(1)-getField(category_id);
$cat = M(category)-where(id= . $cateid)-limit(1)-find();
$info = href=/.$dir./.$cat./.$value..html;
$content = str_replace ( $matchlist, $info, $content );
}
//文章列表分页
$page = /a (.*?) href=\/Admin\/List\/articleList\/id\/(.*?)\/p\/(.*?)/;
preg_match_all($page,$content,$matchpage);
foreach ( $matchpage as $key1 = $value1 ) {
foreach ( $matchpage as $key2 = $value2 ) {
if($key1 == $key2){
$value1 = trim($value1);
$value2 = trim($value2);
$url = a .$value2. href=/.$dir./index_.$value1..html;
$content = str_replace ( $matchpage, $url, $content );
}
}
} //生成的文件路径与文件名
$path = $dir./.$filename..html;
if(file_exists($path)){
unlink($path); //删除已有的同名文件
}
//打开文件,如果文件不存在则尝试创建之。 $fp = fopen($path, w); $flag = fwrite($fp, $content);//写入内容
fclose($fp);
return $flag; //返回写入标识
}

//列表页面静态化
public function sethtml(){
$id = I(param.id,,trim);
$m = M(category);
if (!$id) {
return 0;//执行失败
}
$catdir = trim($id);
$where=$catdir;
$cat = $m-where($where)-limit(1)-find();
if (empty($cat)) {
return 0;//执行失败
}
$psize = 10; //每个分页展示几条数据
$where = $cat;
$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);
$dirs = ./news;
$filename = index_.$i; //分类名
$res = $this-createHtml($url,$dir,$filename);//创建静态文件
if(!$res){
$save = /news/.A(base)-getPinyin($cat);
$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);
$dirs = ./news;
$filename = index; //分类名当文件名
$res = $this-createHtml($url,$dir,$filename);
if($res){
$save = /news/.A(base)-getPinyin($cat);
$up_url = M(category)-where(id = $id)-setfield(url,$save);
return 1;//执行成功
}else{
return 0;//执行失败
}
}

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

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=新闻栏目表;

//内容页面静态化
public function sethtmls(){
$id = I(param.id,,trim);
if (!$id) {
return 0;
}
$where = $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)./.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)./.date(Ymd)./.$id..html;
$up_url = M(article)-where(id = $id)-setfield(url,$save);
return 1;
}else{
return 0;
}
}

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=新闻表;

//首页页面静态化
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;
}
}

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

帮忙点赞、投票哦!!!
PHP静态化THINKPHP网页版权声明:
1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。
2、本站仅提供信息发布平台,不承担相关法律责任。
3、若侵犯您的版权或隐私,请联系本站管理员删除。
4、文章链接:http://www.ff371.cn/art_44733.html