PHP 自定义 Smarty 模板引擎类 高洛峰 细说PHP

smarty模板引擎类简单工作原理

利用Smarty 模板引擎类对模板文件中的变量进行编译,编译过程其实就是利用正则表达式翻译成PHP文件。例如 模板文件中{$title} 利用正则表达式找到并替换成  <?php echo $this->vars[‘title‘];?>

自定义 Smarty 模板引擎类 smarty.class.php页面

<?php
/*
 * 自定义Smarty模板引擎类
 */
        class Smarty{
            private $vars = array();
            //第一个向模板中分配变量 
            //有两个参数 一个参数是模板中的变量名,一个时分配给它的变量值
            public function assign($name,$value=null){
                        if($name != ‘ ‘)
                                $this->vars[$name]=$value;
            }
            
            //加载指定的模板 并显示
            //有一个参数是模板的文件名
            public function display($tplname){
                        $comfile = "./comps/".$tplname."_com.php";
                        $tplname = "./templates/".$tplname;
                        //编译文件不存在 或者模板文件有变化 才需要编译
                        if(!file_exists($comfile) || filemtime($tplname)>filemtime($comfile)){
                        $html = file_get_contents($tplname);
                        
                        //要替换的部分{title}
                        $reg = ‘/\{\s*\$([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)\s*\}/‘;
                        //变量正则表达式[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]* 
                        
                        //替换后的部分<?php echo $this->vars[‘title‘];?>
                        $rep = "<?php echo \$this->vars[‘\\1‘];?>";
                        
                        $newhtml = preg_replace($reg, $rep, $html);    
                        file_put_contents($comfile, $newhtml);
                        }
                        include $comfile;
            }
            
        }

调用模板页面 index.php

<?php
header(‘content-type:text/html;charset=utf-8‘);
/*
 * 模版引擎
 * PHP 超文本预处理脚本语言
 * 自定义模板引擎
 * 
 */
 //包含模板引擎类
 include ‘smart.class.php‘;
 //创建模板引擎对象
 $smarty = new Smarty();
 // 连接数据库
 //执行SQL语句
 // 这是从数据库获取的动态数据,需要在模板中显示
 $title = "This is a test";
 $content = "This is content ......";
 
 //第一个向模板中分配变量
 $smarty->assign(‘title‘, $title);
 $smarty->assign(‘content‘, $content);
 var_dump($smarty);
 //加载指定的模板 并显示
 $smarty->display(‘c.php‘);

模板文件页  c.php页面

<html>
<head>
<title>{$title}</title>
</head>
<body>
<h1>{$title}</h1>
<div>
{$content}
</div>
</body>
</html>

输出结果

object(Smarty)[1]  private ‘vars‘ => 
    array (size=2)
      ‘title‘ => string ‘This is a test‘ (length=14)
      ‘content‘ => string ‘This is content ......‘ (length=22)
This is a test
This is content ......
时间: 2024-10-05 03:13:51

PHP 自定义 Smarty 模板引擎类 高洛峰 细说PHP的相关文章

PHP 验证码 &nbsp; 高洛峰 细说PHP

前端页面index.php <?php header('content-type:text/html;charset=utf-8'); if(isset($_POST['dosubmit'])){     session_start();     if(strtoupper($_SESSION['code']) == strtoupper($_POST['code'])){         echo '输入成功!<br/>';     }else{         echo '输入不对&

PHP 对象 多态性 简单图形计算器 高洛峰 细说PHP

主程序页面 test.php页面 <!DOCTYPE html> <html> <head>     <title>简单的图形计算器</title>     <meta http-equiv = "Content-Type" content = "text/html;charset=utf-8" /> </head> <body>     <center>  

PHP SESSION 应用 邮件系统实例 高洛峰 细说PHP

首页 index.php <?php header('content-type:text/html;charset=utf-8'); /*  *   * 邮件系统实例  *   */         require 'conn.inc.php';//加载连接数据库配置         //如果没有登录 就去登录页面         if(!(isset($_SESSION['islogin']) && $_SESSION['islogin']===1)){             h

PHP memcache 内存缓存 数据库查询 应用 高洛峰 细说PHP

PHP memcache在数据库查询中应用,减少连接数据库的次数,降低服务器的压力! /*  * memcache应用说明 memory cache 内存缓存  * 工作原理  *  服务器端口port 11211    * MemCached 存取键值对key => value  * 1.内网访问  * 2.设置防火墙  */           //创建memcache对象         $mem  =  new  Memcache();                  //连接memc

高洛峰细说php学习笔记

1.php嵌套模式 <?php ... ?> <? ... ?> <% ... %> <script language="php"> ... </script> <?=$hello ?> php.ini: short_open_tag = on asp_tags = on 2.php注释 // 或 /* ... */ 或 #

前端学PHP之Smarty模板引擎

前面的话 对PHP来说,有很多模板引擎可供选择,但Smarty是一个使用PHP编写出来的,是业界最著名.功能最强大的一种PHP模板引擎.Smarty像PHP一样拥有丰富的函数库,从统计字数到自动缩进.文字环绕以及正则表达式都可以直接使用,如果觉得不够,SMARTY还有很强的扩展能力,可以通过插件的形式进行扩充.另外,Smarty也是一种自由软件,用户可以自由使用.修改,以及重新分发该软件.本文将详细介绍Smarty模板引擎 概述 Smarty是一个php模板引擎.更准确的说,它分离了逻辑程序和外

Smarty模板引擎技术(一)

一.Smarty模板引擎简介 什么是smarty? Smarty是采用php写的一个模版引擎,设计的目的是要将php代码与html代码分离,使php程序员只专注于php代码的编写,网页美工只专注于网页的美化 没有模版引擎时出现的问题? html中php代码比重越来越大 页面的数量越来越多 程序设计与美工设计分工不明确 传统的php文件: 1. php代码跟html混编在一起,不利于程序员和美工的分工,程序员和美工不能同时修改一个文件 2.数据的传递同一页面传递,php数据在页面中的显示需要使用p

Smarty模板引擎技术(二)

一.使用Smarty模板引擎步骤 第一步:引入smarty核心类文件并创建一个smarty实例对象: include_once “libs/smarty/Smarty.class.php”; $smarty=new Smarty(); 第二步:对核心类中属性或变量的配置 $smarty->template_dir=”./templates”; $smarty->compile_dir=”./templates_c”; $smarty->config_dir=”./configs”; $s

smarty模板引擎(一)基础知识

一.基本概念 1.什么是mvc? mvc是一种开发模式,核心思想是:数据的输入.数据的处理.数据显示的强制分离. 2.什么是smarty? smarty是一个php的模板引擎.更明确的来说,它可以帮助开发者更好的分离程序逻辑和页面显示. 3.smarty运行原理 模板文件,就是一个显示数据的模板,其中需要显示的数据用占位符代替. smarty运行时,会读取模板文件,将模板文件中的占位符替换成真正的数据,并输出一个处理后的php文件,交由服务器运行. 二.自己写一个smarty模板 为了更好的理解