思路:
1. 创建一个函数create_fileinfo($classify),可以生成所有的列表和详请页面需要用到的数据(比如形成有规律的链接参数)
2. 创建一个函数create_list_html($str),可以生成静态的列表页面
3.创建一个函数create_descript_html($str),可以生成静态的详请页面
4. 创建一个函数chtml($type,$str=""),可以触发生成所有的列表和详请页面需要用到的数据和生成单条新闻列表页面和生成单条新闻详请页面
下面是对应的方法
//创建文件列表页的需要的信息,参数是 整数; 成功返回数组,不成功返回字符串
//如果传空值表示需要成所有类型的信息
function create_fileinfo($classify)
{
$back=[];
$arr=db("news")->distinct(true)->field("classify")->select();
if(empty($arr)) return "数据表为空!";
$class=[];
for($a=0;$awhere(array("classify"=>$class[$i]))->field("a.model,a.classify,a.id")->order("a.id desc")->select();
if(empty($list)){
return "查找数据为空!";
break;
}
$mo= $this->html_model;
$page_number=$mo[$list[0]["model"]]["page_number"];
$len=count($list);
$page=ceil($len/$page_number);
//循环生成列表页的 类型#分页号#模板号#总页数
for($j=1;$j<=$page;$j++){
$back[$class[$i]]["list"][]=$list[0]['classify']."#".$j."#".$list[0]["model"]."#".$page;
}
//循环生成详请页面的 类型#ID号#上一页ID号#下一页ID号#模板号
for($k=0;$k<$len;$k++){
if($k===0) $back[$class[$i]]["descript"][]=$list[0]['classify']."#".$list[$k]['id']."#0#".$list[$k+1]['id']."#".$list[0]["model"];
elseif($k===$len-1) $back[$class[$i]]["descript"][]=$list[0]['classify']."#".$list[$k]['id']."#".$list[$k-1]['id']."#0"."#".$list[0]["model"];
else $back[$class[$i]]["descript"][]=$list[0]['classify']."#".$list[$k]['id']."#".$list[$k-1]['id']."#".$list[$k+1]['id']."#".$list[0]["model"];
}
}
return $back;
}
下面的是调用 $this->create_fileinfo("");的结果
array(2) {
["status"] => string(3) "yes"
["msg"] => array(2) {
[7] => array(2) {
["list"] => array(2) {
[0] => string(7) "7#1#1#2"
[1] => string(7) "7#2#1#2"
}
["descript"] => array(11) {
[0] => string(11) "7#16#0#15#1"
[1] => string(12) "7#15#16#13#1"
[2] => string(12) "7#13#15#12#1"
[3] => string(12) "7#12#13#11#1"
[4] => string(12) "7#11#12#10#1"
[5] => string(11) "7#10#11#9#1"
[6] => string(10) "7#9#10#8#1"
[7] => string(9) "7#8#9#7#1"
[8] => string(9) "7#7#8#6#1"
[9] => string(9) "7#6#7#2#1"
[10] => string(9) "7#2#6#0#1"
}
}
[9] => array(2) {
["list"] => array(2) {
[0] => string(7) "9#1#3#2"
[1] => string(7) "9#2#3#2"
}
["descript"] => array(4) {
[0] => string(10) "9#14#0#5#3"
[1] => string(10) "9#5#14#4#3"
[2] => string(9) "9#4#5#3#3"
[3] => string(9) "9#3#4#0#3"
}
}
}
}
//创建列表页(单页),类型号#分页号#模板号#总页数
function create_list_html($str)
{
if(empty($str)||!is_string($str)) return "参数错误";
$arr=explode("#",$str);
if(count($arr)!==4) return "参数有问题";
$classify=$arr[0];//类型
$page=$arr[1];//页号
$model_id=$arr[2];// 模板id号
$page_total=$arr[3];// 总页数
if(!is_numeric($classify)||!is_numeric($page)||!is_numeric($model_id)||!is_numeric($page_total)) return "参数组成部分的类型有问题!";
$mo= $this->html_model;
if(!isset($mo[$model_id])) return "模板参数有问题!";
$model= $mo[$model_id];
$page_number=$model["page_number"];//分页数量
$limit_start=($page-1)*$page_number;
$list=db("news a")->join("tp_menu b","a.classify=b.id","left")->where(array("classify"=>$classify))
->field("a.*,from_unixtime(a.cdate,'%Y-%m-%d %H:%i:%s') ctime,from_unixtime(a.udate,'%Y-%m-%d %H:%i:%s') utime,if(a.pudate,from_unixtime(a.pudate,'%Y-%m-%d %H:%i:%s'),'未发布') putime,b.name")
->order("a.id desc")->limit($limit_start,$page_number)->select();
if(empty($list)) return "查找数据为空!";
$model_path=PRO_PATH.$model['path']."list.html";//模板文件名(绝对路径)
if(!file_exists($model_path)) return "模板文件不存在!";
$replace_arr=array(
"{html.title/}"=>$model['title'],
"{html.keywords/}"=>$model['keywords'],
"{html.description/}"=>$model['description'],
"{html.banner_img/}"=>$model['banner_img'],
"{html.classifyname/}"=>explode("模板",$model['name'])[0],
"{html.classify.href/}"=>"/home/news/index?type=".$classify,
"{html.list.pageNow/}"=>$page,
"{html.list.pageTotal/}"=>$page_total,
"{html.list.pageType/}"=>$classify,
);
$html=$this->model_read_replace($model_path,$replace_arr,[],$list);
$filename="type_".$classify."_list_".$page.".html";
$filepath=PRO_PATH."/view/home/news/list/".$classify."/";
if(!file_exists($filepath) && !mkdir($filepath,0777,true)) return "创建目录失败!";
$handle=fopen($filepath.$filename,"w");
if(!$handle) return "创建或修改文件失败!";
$re= fwrite($handle,$html);
if(!$re) return "创建或修改文件失败!";
fclose($handle);
return [true,$filepath.$filename];
}
//创建新闻详情页面 参数: 类型号#ID号#上一页ID号#下一页ID号#模板号
function create_descript_html($str)
{
if(empty($str)||!is_string($str)) return "参数错误";
$arr=explode("#",$str);
if(count($arr)!==5) return "参数有问题";
$classify=$arr[0];//类型
$id=$arr[1];//ID号
$prev_id=$arr[2];// 上一页ID
$next_id=$arr[3];// 上一页ID
$model_id=$arr[4];// 模板id号
if(!is_numeric($classify)||!is_numeric($id)||!is_numeric($prev_id)||!is_numeric($next_id)||!is_numeric($model_id)) return "参数组成部分的类型有问题!";
$mo= $this->html_model;
if(!isset($mo[$model_id])) return "模板参数有问题!";
$model= $mo[$model_id];
$list=db("news a")->join("tp_menu b","a.classify=b.id","left")->where(array("a.id"=>$id))
->field("a.*,from_unixtime(a.cdate,'%Y-%m-%d %H:%i:%s') ctime,from_unixtime(a.udate,'%Y-%m-%d %H:%i:%s') utime,if(a.pudate,from_unixtime(a.pudate,'%Y-%m-%d %H:%i:%s'),'未发布') putime,b.name")
->find();
if(empty($list)) return "查找数据为空!";
$model_path=PRO_PATH.$model['path']."descript.html";//模板文件名(绝对路径)
if(!file_exists($model_path)) return "模板文件不存在!";
$replace=array(
"{html.title/}"=>$list["htmltitle"],
"{html.keywords/}"=>$list["keywords"],
"{html.description/}"=>$list["description"],
"{html.banner_img/}"=>$model['banner_img'],
"{html.classifyname/}"=>explode("模板",$model['name'])[0],
"{html.classify.href/}"=>"/home/news/index?type=".$classify,
"{html.descript.newstitle/}"=>$list['newstitle'],
"{html.descript.utime/}"=>$list['utime'],
"{html.descript.source/}"=>$list['source'],
"{html.descript.content/}"=>$list['content'],
"{html.descript.editor/}"=>$list['editor'],
);
if($prev_id!=0 && $next_id!=0){
$nextinfo=db("news")->where(array("id"=>$next_id))->field("newstitle")->find();
$previnfo=db("news")->where(array("id"=>$prev_id))->field("newstitle")->find();
$add_child=array(
"{html.descript.prev.href/}"=>"/home/news/descript?type=".$classify."&id=".$prev_id,
"{html.descript.next.href/}"=>"/home/news/descript?type=".$classify."&id=".$next_id,
"{html.descript.prev.newstitle/}"=>$previnfo['newstitle'],
"{html.descript.next.newstitle/}"=>$nextinfo['newstitle'],
);
}elseif($next_id ==0 && $prev_id!=0){
$previnfo=db("news")->where(array("id"=>$prev_id))->field("newstitle")->find();
$add_child=array(
"{html.descript.prev.href/}"=>"/home/news/descript?type=".$classify."&id=".$prev_id,
"{html.descript.next.href/}"=>"javascript:;",
"{html.descript.prev.newstitle/}"=>$previnfo['newstitle'],
"{html.descript.next.newstitle/}"=>"没有了",
);
}else{
$nextinfo=db("news")->where(array("id"=>$next_id))->field("newstitle")->find();
$add_child=array(
"{html.descript.prev.href/}"=>"javascript:;",
"{html.descript.next.href/}"=>"/home/news/descript?type=".$classify."&id=".$next_id,
"{html.descript.prev.newstitle/}"=>"没有了",
"{html.descript.next.newstitle/}"=>$nextinfo['newstitle'],
);
}
$replace_arr=$replace+$add_child;
$html=$this->model_read_replace($model_path,$replace_arr,["classify"=>$classify,"id"=>$id],$list);
$filename="type_".$classify."_id_".$id.".html";
$filepath=PRO_PATH."/view/home/news/descript/".$classify."/";
if(!file_exists($filepath) && !mkdir($filepath,0777,true)) return "创建目录失败!";
$handle=fopen($filepath.$filename,"w");
if(!$handle) return "创建或修改文件失败!";
$re= fwrite($handle,$html);
if(!$re) return "创建或修改文件失败!";
fclose($handle);
return [true,$filepath.$filename];
}
function chtml($type,$str="")
{
if(!in_array($type,['fileinfo','list','descript'])) return ['status'=>'null','msg'=>'第一个参数不对'];
if($type==='fileinfo'){
//生成创建静态页面需要的参数
if($str==="all"){
$re= $this->create_fileinfo("");
if(is_array($re))return ['status'=>'yes','msg'=>$re];
else return ['status'=>'no','msg'=>$re];
}else{
if(!empty($str)||!is_numeric($str)) return ['status'=>'no','msg'=>'第二个参数不对'];
$re= $this->create_fileinfo($str);
if(is_array($re))return ['status'=>'yes','msg'=>$re];
else return ['status'=>'no','msg'=>$re];
}
}elseif($type==='list'){
//生成分页的静态页面
if(empty($str)||!is_string($str)) return ['status'=>'no','msg'=>'第二个参数不对'];
$re=$this->create_list_html($str);
if(is_array($re))return ['status'=>'yes','msg'=>$re[1]];
else return ['status'=>'no','msg'=>$re];
}else{
//生成详情静态页面
if(empty($str)||!is_string($str)) return ['status'=>'no','msg'=>'第二个参数不对'];
$re=$this->create_descript_html($str);
if(is_array($re))return ['status'=>'yes','msg'=>$re[1]];
else return ['status'=>'no','msg'=>$re];
}
}
手动调用,测试生成全部
function test_create()
{
$re=$this->chtml("fileinfo","all");
dump($re);
foreach ($re["msg"] as $classify => $arr) {
if(isset($arr['list'])&& is_array($arr['list'])){
for($i=0;$i
}
}
if(isset($arr['descript'])&& is_array($arr['descript'])){
for($i=0;$i
}
}
}
}
里面涉及到的数据表,其他方法可以找我要。