• 2019-09-17 thinkphp网页静态化


     public function details(){
    
            $pid = I('get.goods_id');
            $filename = "details_".$pid.".html";
            if(file_exists($filename)){
                echo file_get_contents($filename);
            }else{
                ob_start();
                require("/store/Store/Home/View/category/details_model.html");
                $str = ob_get_contents();
                ob_end_clean();
                $data['goods_id']= I('get.goods_id');
                $goods = M('goods');
                $res = $goods->where($data)->find();
                $str = str_replace('{$goods_data.goods_name}',$res['goods_name'],$str);
                $str = str_replace('{$goods_data.market_price}',$res['market_price'],$str);
                $str = str_replace('{$goods_data.goods_price}',$res['goods_price'],$str);
                $str = str_replace('{$goods_data.goods_number}',$res['goods_number'],$str);
                $str = str_replace('{$goods_data.goods_desc}',$res['goods_desc'],$str);
                $str = str_replace('{$goods_data.goods_img}',$res['goods_img'],$str);
                $str = str_replace('{$goods_data.goods_id}',$res['goods_id'],$str);
    
                file_put_contents($filename,$str);
                echo $str;
            }

    创建一个模板文件:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <link rel="stylesheet" type="text/css" href="../../../Public/home/res/static/css/main.css">
        <link rel="stylesheet" type="text/css" href="../../../Public/home/res/layui/css/layui.css">
        <script type="text/javascript" src="../../../Public/home/res/layui/layui.js"></script>
        <script type="text/javascript" src="../../../Public/Jquery2.1.4.js"></script>
        <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
        <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
    </head>
    <body>
    
    <div class="site-nav-bg">
        <div class="site-nav w1200">
            <p class="sn-back-home">
                <i class="layui-icon layui-icon-home"></i>
                <a href="#">首页</a>
            </p>
            <div class="sn-quick-menu">
                <div class="login"><a href="/home/login/index">登录</a></div>
                <div class="sp-cart"><a href="/home/cart/index">购物车</a><span>2</span></div>
            </div>
        </div>
    </div>
    
    
    
    <div class="header">
        <div class="headerLayout w1200">
            <div class="headerCon">
                <h1 class="mallLogo">
                    <a href="#" title="母婴商城">
                        <img src="../../../Public/home/res/static/img/logo.png">
                    </a>
                </h1>
                <div class="mallSearch">
                    <form action="" class="layui-form" novalidate>
                        <input type="text" name="title" required  lay-verify="required" autocomplete="off" class="layui-input" placeholder="请输入需要的商品">
                        <button class="layui-btn" lay-submit lay-filter="formDemo">
                            <i class="layui-icon layui-icon-search"></i>
                        </button>
                        <input type="hidden" name="" value="">
                    </form>
                </div>
            </div>
        </div>
    </div>
    
    
    <div class="content content-nav-base datails-content">
        <div class="main-nav">
            <div class="inner-cont0">
                <div class="inner-cont1 w1200">
                    <div class="inner-cont2">
                        <a href="/home/category/index">所有商品</a>
                        <a href="home/groupon/index" class="active">今日团购</a>
                        <a href="__PUBLIC__/home/html/information.html">母婴资讯</a>
                        <a href="home/aboutus/index">关于我们</a>
                    </div>
                </div>
            </div>
        </div>
        <div class="data-cont-wrap w1200">
            <div class="crumb">
                <a href="javascript:;">首页</a>
                <span>></span>
                <a href="javascript:;">所有商品</a>
                <span>></span>
                <a href="javascript:;">产品详情</a>
            </div>
            <div class="product-intro layui-clear">
                <div class="preview-wrap">
                    <a href="javascript:;"><img src="../../..{$goods_data.goods_img}" width="400px" height="400px"></a>
                </div>
                <div class="itemInfo-wrap">
                    <div class="itemInfo">
                        <div class="title">
                            <h4>{$goods_data.goods_name}</h4>
                            <span><i class="layui-icon layui-icon-rate-solid"></i>收藏</span>
                        </div>
                        <div class="summary">
                            <p class="reference"><span>参考价</span> <del>¥{$goods_data.market_price}</del></p>
                            <p class="activity"><span>活动价</span><strong class="price"><i></i>{$goods_data.goods_price}</strong></p>
                            <p class="address-box"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><strong class="address">江西&nbsp;&nbsp;南昌&nbsp;&nbsp;东湖区</strong></p>
                            <p class="reference"><span>库存量</span> <span id="t_number">{$goods_data.goods_number}</span></p>
                        </div>
                        <div class="choose-attrs">
                            <div class="color layui-clear"><span class="title">&nbsp;&nbsp;&nbsp;&nbsp;</span> <div class="color-cont"><span class="btn">白色</span> <span class="btn active">粉丝</span></div></div>
                            <div class="number layui-clear"><span class="title">&nbsp;&nbsp;&nbsp;&nbsp;</span><div class="number-cont"><span class="cut btn" onclick="down_num()">-</span><input id="number"  onkeyup="if(this.value.length==1){this.value=this.value.replace(/[^1-9]/g,'')}else{this.value=this.value.replace(/D/g,'')}" onafterpaste="if(this.value.length==1){this.value=this.value.replace(/[^1-9]/g,'')}else{this.value=this.value.replace(/D/g,'')}" maxlength="4" type="" name="" value="1"><span class="add btn" onclick="add_num()">+</span></div></div>
                        </div>
                        <div class="choose-btns">
                            <button class="layui-btn layui-btn-primary purchase-btn">立刻购买</button>
                            <button class="layui-btn  layui-btn-danger car-btn" id="add_car"><i class="layui-icon layui-icon-cart-simple"></i>加入购物车</button>
                        </div>
                    </div>
                </div>
            </div>
            <div class="layui-clear">
                <div class="aside">
                    <h4>热销推荐</h4>
                    <div class="item-list">
                        <div class="item">
                            <img src="../../../Public/home/res/static/img/details_img2.jpg">
                            <p><span>可爱宝宝粉色连体秋裤</span><span class="pric">¥99.00</span></p>
                        </div>
                        <div class="item">
                            <img src="../../../Public/home/res/static/img/details_img2.jpg">
                            <p><span>可爱宝宝粉色连体秋裤</span><span class="pric">¥99.00</span></p>
                        </div>
                        <div class="item">
                            <img src="../../../Public/home/res/static/img/details_img2.jpg">
                            <p><span>可爱宝宝粉色连体秋裤</span><span class="pric">¥99.00</span></p>
                        </div>
                        <div class="item">
                            <img src="../../../Public/home/res/static/img/details_img2.jpg">
                            <p><span>可爱宝宝粉色连体秋裤</span><span class="pric">¥99.00</span></p>
                        </div>
                        <div class="item">
                            <img src="../../../Public/home/res/static/img/details_img2.jpg">
                            <p><span>可爱宝宝粉色连体秋裤</span><span class="pric">¥99.00</span></p>
                        </div>
                        <div class="item">
                            <img src="../../../Public/home/res/static/img/details_img2.jpg">
                            <p><span>可爱宝宝粉色连体秋裤</span><span class="pric">¥99.00</span></p>
                        </div>
                    </div>
                </div>
                <div class="detail">
                    <h4>详情</h4>
                    <div class="item">
                        {$goods_data.goods_desc}
                        <img src="../../../Public/home/res/static/img/footer.png">
                    </div>
                </div>
            </div>
        </div>
    </div>
    <script type="text/javascript">
        /*
         layui.config({
         base: '__PUBLIC__/home/res/static/js/util/' //你存放新模块的目录,注意,不是layui的模块目录
         }).use(['mm','jquery'],function(){
         var mm = layui.mm,$ = layui.$;
         var cur = $('.number-cont input').val();
         $('.number-cont .btn').on('click',function(){
         if($(this).hasClass('add')){
         cur++;
    
         }else{
         if(cur > 1){
         cur--;
         }
         }
         $('.number-cont input').val(cur)
         })
    
         });*/
    </script>
    
    <script>
        function add_num(){
            var number =$("#number").val();
            var t_number = $("#t_number").html();
            var new_num = parseInt(number)+1;
            if(new_num>t_number){
                layer.alert("选择数量不能大于库存量");
                return false;
            }else{
                $("#number").val(new_num);
            }
        }
    
        function down_num(){
            var number =$("#number").val();
            var new_num = parseInt(number)-1;
            if(new_num<1){
                layer.alert("至少选择一件");
                return false;
            }else{
                $("#number").val(new_num);
            }
        }
    
    </script>
    
    <script>
        $("#add_car").click(function(){
            var goods_id ="{$goods_data.goods_id}";
            //alert(goods_id);return false;
            var name ="{$goods_data.goods_name}";
            var number =$("#number").val();
            var t_number = "{$goods_data.goods_number}";
            var price = "{$goods_data.goods_price}";
            var img = "{$goods_data.goods_img}";
            $.ajax({
                url:'add_car',
                type:'post',
                data:{
                    'goods_id':goods_id,
                    'name':name,
                    'number':number,
                    'price':price,
                    'img':img
                },
                dataType:'json',
                success:function (e) {
                    if(e.status==1){
                        layer.alert(e.info);
                        window.location.href="/home/cart/index";
                    }else{
                        layer.alert(e.info);
                    }
                }
            })
        });
    
    </script>
    <script>
        layui.use('layer', function(){
            var layer = layui.layer;
        });
    </script>

    静态化

    静态化: 1.纯(真)静态 2.伪静态

    静态化是解决减轻网站压力,提高网站访问速度的常用方案.包括:纯静态和伪静态。


    纯静态:
    将PHP程序生成静态的HTML文件,保存到服务器的磁盘中。
    优势:
    减少PHP程序编译和对数据库的查询。

    原理:
    在用户访问PHP程序时,首先检测静态的HTML文件是否存在,如果存在直接输出静态文件,如果静态文件不存在,查询数据库,生成静态文件

    缓冲

    1.缓冲,也就是buffer, ob是output_buffering的简写

    2.echo、print_r=>php output_buffering=>webServer buffer=>browser buffer=>browser display

    从echo、print_r函数到发送信息给客户端经历了两个缓冲区,在客户端还经历了一个浏览器缓冲区。
    也就是说,当你echo输出数据的时候,其实是要经历一层缓存的,只是说这个 buffer默认是关闭的,当我们开启之后,输出数据时,就会先走缓冲区了,当缓冲区数据满了之后就自动输出。


    3.. 在程序中如果开启ob_start(),所有的echo输出都会保存到ob缓存中,可以使用ob系列函数进行操作,如果没有,默认情况下,在程序执行结束,会把缓存中的数据发送给浏览器

    ob的基本原则:如果ob缓存打开,则echo的数据首先放在ob缓存。如果是header信息,直接放在程序缓存。当页面执行到最后,会把ob缓存的数据放到程序缓存,然后依次返回给浏览器

    4.
    ob的基本作用:
    1)防止在浏览器有输出之后再使用setcookie()、header()或session_start()等发送头文件的函数造成的错误。其实这样的用法少用为好,养成良好的代码习惯。
    2)捕捉对一些不可获取的函数的输出,比如phpinfo()会输出一大堆的HTML,但是我们无法用一个变量例如$info=phpinfo();来捕捉,这时候ob就管用了。
    3)对输出的内容进行处理,例如进行gzip压缩,例如进行简繁转换,例如进行一些字符串替换。
    4)生成静态文件,其实就是捕捉整页的输出,然后存成文件。经常在生成HTML,或者整页缓存中使用。

    ob_start() :打开输出控制缓冲
    返回值:成功时返回 TRUE, 或者在失败时返回 FALSE.

    ob_get_contents() :返回输出缓冲区的内容
    返回值:输出缓冲区的内容,或者如果输出缓冲区无效将返回FALSE

    ob_clean() :清空(擦掉)输出缓冲区的内容。 没有返回值

    ob_end_clean:删除内部缓冲区的内容,并且关闭内部缓冲区
    返回值:成功时返回 TRUE, 或者在失败时返回 FALSE

    ob_flush() :冲刷出(送出)输出缓冲区中的内容。 没有返回值

    ob_end_flush :发送内部缓冲区的内容到浏览器,并且关闭输出缓冲区。
    返回值:成功时返回 TRUE, 或者在失败时返回 FALSE

  • 相关阅读:
    大数据之MapReduce工作机制
    swoft +nginx 快速获取客户端的真实的IP
    JWT 介绍 详解
    swoft 切面编程 (AOP编程思想)
    CSP 编程模型
    Ubuntu 16.04 Mysql 重置密码
    ubuntu 提示:rm: cannot remove 'you-get/tmp': Directory not empty
    Ubuntu 系统升级到php7.2/7.3 (平滑升级)-朝花夕拾
    git clone 非标准的ssh端口(非22)端口
    Ubuntu 升级npm 以及安装cross-env 过程中遇到的问题
  • 原文地址:https://www.cnblogs.com/zhangxu-fasu/p/11536500.html
Copyright © 2020-2023  润新知