• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    php tpl模板引擎定义与使用示例

    本文实例讲述了php tpl模板引擎定义与使用。分享给大家供大家参考,具体如下:

    tpl.php

    ?php
    namespace tpl;
    /**
    * Class Tpl
    */
    class Tpl
    {
      protected $view_dir;//模板文件
      protected $cache_dir;//缓存文件
      protected $lifetime;//过期时间
      protected $vars = [];//存放显示变量的数组
       /**
       * Tpl constructor.
       * @param string $view_dir
       * @param string $cache_dir
       * @param string $lifetime
       */
      public function __construct($view_dir='', $cache_dir='', $lifetime='')
      {
        //如果模板文件不为空,则设置,为空则为默认值
        if (!empty($view_dir)) {
          if ($this->check_dir($view_dir)) {
            $this->view_dir = $view_dir;
          }
        }
        //如果缓存文件不为空,则设置,为空时为默认值
        if (!empty($cache_dir)) {
          if ($this->check_dir($cache_dir)) {
            $this->cache_dir = $cache_dir;
          }
        }
        //如果过期时间不为空,则设置,为空时为默认值
        if (!empty($lifetime)) {
          $this->lifetime = $lifetime;
        }
      }
       /**
       * 对外公开的方法
       * @param string $name
       * @param string $value
       */
      public function assign($name, $value)
      {
        $this->vars[$name] = $value;//将传入的参数以键值对存入数组中
      }
       /**
       * 测试文件
       * @param $dir_path
       * @return bool
       */
      protected function check_dir($dir_path)
      {
        //如果文件不存在或不是文件夹,则创建
        if (!file_exists($dir_path) || !is_dir($dir_path)) {
          return mkdir($dir_path, 0777, true);
        }
        //如果文件不可读或不可写,则设置模式
        if (!is_writable($dir_path) || !is_readable($dir_path)) {
          return chmod($dir_path, 0777);
        }
        return true;
      }
       /**
       * 展示方法
       * @param $view_name
       * @param bool $isInclude
       * @param null $uri
       */
      public function display($view_name, $isInclude=true, $uri=null)
      {
        //通过传入的文件名,得到模板文件路径
        $view_path = rtrim($this->view_dir, '/') . '/' . $view_name;
        //判断路径是否存在
        if (!file_exists($view_path)) {
          die('文件不存在');
        }
        //通过传入的文件名得到缓存文件名
        $cache_name = md5($view_name . $uri) . '.php';
        //缓过缓存文件名得到缓存路径
        $cache_path = rtrim($this->cache_dir, '/') . '/' .$cache_name;
        //判断缓存文件是否存在,如果不存在,重新生成
        if (!file_exists($cache_path)) {
          $php = $this->compile($view_path);//解析模板文件
          file_put_contents($cache_path, $php);//缓存文件重新生成
        } else {
          //如果缓存文件存在,判断是否过期,判断模板文件是否被修改
          $is_time_out = (filectime($cache_path) + $this->lifetime) > time() ? false : true;
          $is_change = filemtime($view_path) > filemtime($cache_path) ? true : false;
          //如果缓存文件过期或模板文件被修改,重新生成缓存文件
          if ($is_time_out || $is_change) {
            $php = $this->compile($view_path);
            file_put_contents($cache_path, $php);
          }
        }
        if ($isInclude) {
          extract($this->vars);//解析传入变量的数组
          include $cache_path;//展示缓存
        }
      }
       /**
       * 正则解析模板文件
       * @param string $file_name
       * @return mixed|string
       */
      protected function compile($file_name)
      {
        $html = file_get_contents($file_name);//获取模板文件
        //正则转换数组
        $array = [
          '{$%%}' => '?=$\1?>',
          '{foreach %%}' => '?php foreach (\1): ?>',
          '{/foreach}' => '?php endforeach ?>',
          '{include %%}' => '',
          '{if %%}' => '?php if (\1): ?>',
          '{/if}' => '?php endif ?>',
          '{for %%}' => '?php for (\1): ?>',
          '{/for}' => '?php endfor ?>',
          '{switch %%}' => '?php switch (\1) ?>',
          '{/switch}' => '?php endswitch ?>'
        ];
        //遍历数组,生成正则表达式
        foreach ($array AS $key=>$value) {
          //正则表达式,
          $pattern = '#' . str_replace('%%', '(.+?)' , preg_quote($key, '#')) . '#';
          if (strstr($pattern, 'include')) {
            $html = preg_replace_callback($pattern, [$this, 'parseInclude'], $html);
          } else {
            $html = preg_replace($pattern, $value, $html);
          }
        }
        return $html;
      }
       /**
       * 处理include表达式
       * @param array $data
       * @return string
       */
      protected function parseInclude($data)
      {
        $file_name = trim($data[1], '\'"');
        $this->display($file_name, false);
        $cache_name = md5($file_name) . '.php';
        $cache_path = rtrim($this->cache_dir, '/') . '/' . $cache_name;
        return '?php include "'.$cache_path.'" ?>';
      }
    }
    
    

    user_tpl,,,,从数据库中取值,作为参数传到模板文件,再解析模板文件

    ?php
    include './sql/pdo.sql.php';
    include 'tpl.php';
     $tpl = new tpl\Tpl('./view/', './cache/', 3000);
    $link = new pdo_sql();
    $dat = ['menu_name', 'menu_url'];
    $res = $link->table('blog_menu')->field($dat)->order('id ASC')->select();
    $tpl->assign('menu', $res);
    $tpl->display('index.html');
    
    

    更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP模板技术总结》、《PHP基于pdo操作数据库技巧总结》、《PHP运算与运算符用法总结》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

    希望本文所述对大家PHP程序设计有所帮助。

    您可能感兴趣的文章:
    • ThinkPHP使用smarty模板引擎的方法
    • 需要使用php模板的朋友必看的很多个顶级PHP模板引擎比较分析
    • PHP模板引擎Smarty的缓存使用总结
    • PHP原生模板引擎 最简单的模板引擎
    • php模板引擎技术简单实现
    • PHP中MVC模式的模板引擎开发经验分享
    • 在Yii框架中使用PHP模板引擎Twig的例子
    • 简单的自定义php模板引擎
    • PHP模板引擎Smarty中变量的使用方法示例
    • TMDPHP 模板引擎使用教程
    • Pain 全世界最小最简单的PHP模板引擎 (普通版)
    上一篇:php函数式编程简单示例
    下一篇:PHP实现提高SESSION响应速度的几种方法详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    php tpl模板引擎定义与使用示例 php,tpl,模板,引擎,定义,与,