方法: 
$this->assign('style',$style);//变量
$this->display();//模板 

<?php
/*配制*/
$config=array(
 /* 数据库设置 */
 'DB_TYPE'               => 'mysql',     // 数据库类型
 'DB_HOST'               => 'localhost', // 服务器地址
 'DB_NAME'               => 'php',          // 数据库名
 'DB_USER'               => 'root',      // 用户名
 'DB_PWD'                => '123',          // 密码
 'DB_PREFIX'             => 'jiaodu_',    // 数据库表前缀
 'DB_CHARSET'            => 'utf8',      // 数据库编码默认采用utf8

 /* SESSION设置 */
 'SESSION_START'   => 'user',    //session方式,文件方式:file, 数据库设置为user

 /* 模板引擎设置 */
 'TMPL_ADMIN_PATH'   =>'admin',//后台目录名称
 'TMPL_COMPILE_PATH'   =>'/Runtime',//读写目录
 'TMPL_PATH'   =>'/template',//模板路径
 'TMPL_TEMPLATE_SUFFIX'  => 'html',     // 默认模板文件后缀
 'TMPL_L_DELIM'          => '{',   // 模板引擎普通标签开始标记
 'TMPL_R_DELIM'          => '}',   // 模板引擎普通标签结束标记
 'TMPL_STRIP_SPACE'      => true,       // 是否去除模板文件里面的html空格与换行
 'TMPL_CACHE_ON'   => true,        // 是否开启模板编译缓存,设为false则每次都会重新编译,一般用于模板调试

 /* URL设置 */
 'URL_HTML_SUFFIX'       => 'html',  // URL伪静态后缀设置
 'URL_PATHINFO_MODEL'    => 2,       // URL模式,1不隐藏、2隐藏入口文件[需要规则支持]

 /*其它设置*/
 'PASS_ENCRYPT'   =>'outofmemory.cn
);

<?php
/**
 * 模板解析类 
 *
 */
class template extends Action{
    private $config;
    private $CompileDir;//编译目录
    private $templateDir;//模板目录
    private $templateFile;
    private $debuy=1;//是否调试
    private $assign;//变量
    public function __construct($templateFile){
        $this->config();
        $this->templateFile=$templateFile;
    }
    private function config(){
        global $config;
        $this->config=$config;
        $this->CompileDir=$this->config['TMPL_COMPILE_PATH'].'/Compile';
        $this->templateDir=$this->config['TMPL_PATH'];
        $this->debuy=$this->config['TMPL_CACHE_ON'];

    }

    /**
     * 检查编译目录
     */
    public function is_CompileDir(){
        $dir=APP_PATH.$this->CompileDir;
        if (!is_dir($dir)){
            if (!mkdir($dir)){
                die('编译目录自动创建失败,请手动创建');
            }
        }
        if (!is_writeable($dir)){
            die('编译目录没有写入权');
        }
    }
    /**
     * 注入变量
     */
    public function assign($assign) {
        $this->assign=$assign;
    }
    /**
     * 输出模板
     */
    public function display(){
        $this->is_CompileDir();
        $this->CompileCheck();
    }
    /**
     * 检查编译
     */
    private  function CompileCheck(){
        $this->is_CompileDir();
        $filename=APP_PATH.$this->CompileDir.'/'.md5($this->templateFile).'.php';
        if ($this->debuy || !is_file($filename)){
            $this->tmplstrtpspace($filename);
        }
        foreach ($this->assign as $key=>$row){
            $$key=$row;
        }
        include $filename;
    }
    /**
     * 格式化模板并写入编译
     */
    private  function tmplstrtpspace($filename){
        if ($this->config['TMPL_STRIP_SPACE']){
            $find     = array("~>\\\\s+<~","~>(\\\\s+\\\\n|\\\\r)~");
            $replace  = array("><",">");
            $tmplContent = preg_replace($find, $replace,$this->templateCheck());
        }else {
            $tmplContent = $this->templateCheck();
        }
        if (file_put_contents($filename,trim($tmplContent))){
            return true;
        }else {
            die('编译写入失败');
        }
    }
    /**
     * 检查模板
     */
    private  function templateCheck(){
        $PATH=APP_PATH.$this->templateDir.'/'.$this->templateFile.'.html';
        if (is_file($PATH)){
            return $this->template_compile(file_get_contents ( $PATH ));
        }else {
            die('模板:'.$this->templateFile.'.html 不存在');
        }
    }
    /**
     * 编译模板
     */
    private function template_compile($template_Conver){
        if (empty($template_Conver)){
            return $template_Conver;
        }else {
            $_Left= $this->config['TMPL_L_DELIM'];
            $_Right= $this->config['TMPL_R_DELIM'];
            $template_Preg [] = '/<\\\\?(=|php|)(.+?)\\\\?>/is';
            $template_Preg [] = '/' . $_Left . '(else if|elseif) (.*?)' . $_Right . '/i';
            $template_Preg [] = '/' . $_Left . 'for (.*?)' . $_Right . '/i';
            $template_Preg [] = '/' . $_Left . 'while (.*?)' . $_Right . '/i';
            $template_Preg [] = '/' . $_Left . '(loop|foreach) (.*?)' . $_Right . '/i';
            $template_Preg [] = '/' . $_Left . 'if (.*?)' . $_Right . '/i';
            $template_Preg [] = '/' . $_Left . 'else' . $_Right . '/i';
            $template_Preg [] = '/' . $_Left . "(eval|_)( |[\\\\r\\\\n])(.*?)" . $_Right . '/is';
            $template_Preg [] = '/' . $_Left . '_e (.*?)' . $_Right . '/is';
            $template_Preg [] = '/' . $_Left . '_p (.*?)' . $_Right . '/i';
            $template_Preg [] = '/' . $_Left . '\\\\/(if|for|loop|foreach|eval|while)' . $_Right . '/i';
            $template_Preg [] = '/' . $_Left . '((( *(\\\\+\\\\+|--) *)*?(([_a-zA-Z][\\\\w]*\\\\(.*?\\\\))|\\\\$((\\\\w+)((\\\\[|\\\\()(\\\\'|")?\\\\$*\\\\w*(\\\\'|")?(\\\\)|\\\\]))*((->)?\\\\$?(\\\\w*)(\\\\((\\\\'|")?(.*?)(\\\\'|")?\\\\)|))){0,})( *\\\\.?[^ \\\\.]*? *)*?){1,})' . $_Right . '/i';
            $template_Preg [] = "/( | ){0,}(\\\\r\\\\n){1,}\\\\";/";
            $template_Preg [] = '/' . $_Left . '(\\\\#|\\\\*)(.*?)(\\\\#|\\\\*)' . $_Right . '/';
            $template_Preg [] = '/' . $_Left . '\\\\%([a-zA-Z_\\\\x7f-\\\\xff][a-zA-Z0-9_\\\\x7f-\\\\xff]*)' . $_Right . '/';
            $template_Replace [] = '<?\\\\\\\\1\\\\\\\\2?>';
            $template_Replace [] = '<?php }else if (\\\\\\\\2){ ?>';
            $template_Replace [] = '<?php for (\\\\\\\\1) { ?>';
            $template_Replace [] = '<?php while (\\\\\\\\1) { ?>';
            $template_Replace [] = '<?php foreach ((array)\\\\\\\\2) { $__i++; ?>';
            $template_Replace [] = '<?php if (\\\\\\\\1){ ?>';
            $template_Replace [] = '<?php }else{ ?>';
            $template_Replace [] = '<?php \\\\\\\\3; ?>';
            $template_Replace [] = '<?php echo \\\\\\\\1; ?>';
            $template_Replace [] = '<?php print_r(\\\\\\\\1); ?>';
            $template_Replace [] = '<?php } ?>';
            $template_Replace [] = '<?php echo \\\\\\\\1;?>';
            $template_Replace [] = '';
            $template_Replace [] = '';
            $template_Replace [] = '<?php echo $this->lang_array[\\\\'\\\\\\\\1\\\\'];?>';
            return preg_replace ( $template_Preg, $template_Replace, $template_Conver );
        }
    }
}
//该片段来自于http://outofmemory.cn

安装co-views swig

PPT首要特征:

怎样是模板

多少个含有了各样参数,并能够由模板管理系统通过辨认某个特定语法来替换这几个参数的文书档案。
模板和数指标拜别,使得HTML的维护变得越来越轻巧:改造标签、加多class和重写li等。

$ npm install co-views
$ npm install swig

var co = require('co');
var views = require('co-views');

var render = views('views', {
  map: { html: 'swig' } 
});

co(function*(){
    var html = yield render('template', {
        pagename: 'awesome people',
        authors: ['Paul', 'Jim', 'Jane']
    });
     console.log(html);
})

undefined_模板模板引擎,超实用的模板引擎。Tencent录像

模板引擎 == 分二种

用于生成html等两种文书,以html为例:
客户端引擎,主要构成js达成html,一种以handlebar
mustache为代表,完毕情势为拼字符串。另一种以react为表示,完成格局为virtual
Dom。
服务端引擎,以velocity这种为表示,可整合Java等语言实现,由劳务端生成html重返客户端。

views/user.html

111页精美国商人务风格PPT模板

模板引擎渲染原理

  • 后端模板引擎渲染,以jsp为例

图片 1

1.jpg

上面 <%%>内的是模板内容、<div></div> 是页面内容
当JSP运维被,编写翻译为Servlet Class后,其实做了黄字标明的操作
<%%> 被去掉,内部即为正常的JAVA代码
<div></div> 被加引号成为字符串(回车换行也被改为转义字符)
出口字符串内容。
特点:

    转换模板代码为目标源码执行,后续直接调用源码运行。
    依赖服务器端,对我们来说,需要用idea运行在tomcat中发布之后才能将jsp正确的装换成html
  • 前面三个模板引擎

图片 2

2.jpg

特点:
借助客户端,在浏览器渲染页面,而不借助与服务端

<h1>{{ pagename|title }}</h1>
<ul>
{% for author in authors %}
  <li{% if loop.first %} class="first"{% endif %}>
    {{ author }}
  </li>
{% endfor %}
</ul>

本套模板预制5种配色方案

模板引擎使用状态
  • 全前置、前后各半、全后模板
  • 前者模板会分担部分服务器压力,不过也会给客户端扩展压力,所以大家必要根据实际意况选取特别的章程。

输出结果:

含有了三种文件格式ppt和pptx

依据质量的设想

动用客户端模板重新渲染UI的换代部分已是司空眼惯之事。可是天性最好的措施如故是透过将先前时代的页面全部进行加载。使用这种做法,浏览器能够向来渲染HTML页面,而不要深入分析任何JavaScript代码,也不要发出额外的数目央求。那对于那多个既是动态,又需求尽大概最大化开首加载速度的页面来说,是一项挑战。然后,最优良的是模板已支付,能重用于客户端中,这样服务器能提供最棒品质,并且维护性照旧很好。

这里供给思索到四个难题:

• 程序的那一个部分重大是动态的?而哪些部分须求减小初步化加载的年月?
• 供给把管理进度交给客户端?依然让服务器做这么的繁重职业?

其一主题素材唯有在其实测量试验了二种差异的措施展技艺能回答。但是,使用预编写翻译模板,客户端平日不会在渲染进度中遭罪。並且在客户端、服务端复用模板的景况下,你会发现无逻辑性模板语法更为通用。

网站地图xml地图