php 使用文件函数生成静态html(不使用框架模板标签1)

思路:

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                     dump($this->chtml("list",$arr['list'][$i]));
                }
            }
            if(isset($arr['descript'])&&  is_array($arr['descript'])){
                for($i=0;$i                     dump($this->chtml("descript",$arr['descript'][$i]));
                }
            }
        }
    }

里面涉及到的数据表,其他方法可以找我要。

你可能感兴趣的:(工作中遇到的难点)