dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2165
  • 铜币13236枚
  • 威望5838点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
阅读:2283回复:2

[php] smarty 模板引擎示例

楼主#
更多 发布于:2017-02-17 09:53
Smarty 功能
Smarty , PHP Template Engine ,将后端逻辑代码与前端界面代码分离开,这种方式提升了开发效率;

官网

http://www.smarty.net/
手册
http://www.smarty.net/docs/zh_CN/
下载
https://github.com/smarty-php/smarty/releases/tag/v3.1.30

部署
1. 非常简单,只需要解压后将libs 目录加入到 项目即可,例如:
tar zxf smarty-3.1.30.tar.gz
mv smarty-3.1.30/libs/ demo/


2. 目录结构
tree -d demo/
demo/
├── admin
├── libs
│   ├── plugins
│   └── sysplugins
├── logs
├── public
│   ├── css
│   ├── js
│   └── pic
├── templates
│   └── admin
└── templates_c

12 directories

使用
smarty 面向对象方式,只需要加载类文件,并设置一些属性即可,例如:

1. 初始化 smarty 类
cat demo/init.php
// 绝对路径
define(ROOT, dirname(__FILE__));

// 加载 smarty 类文件
require_once ROOT.'/libs/Smarty.class.php';

// 对象
$dong = new Smarty();
// 设置目录
$dong ->setTemplateDir(ROOT."/templates");     //模板目录
$dong ->setCompileDir(ROOT."/templates_c");   //编译目录
// 设置定界符
$dong ->setLeftDelimiter("<{");
$dong ->setRightDelimiter("}>");
$dong ->auto_literal = FALSE;

2. 后端逻辑文件
cat demo/public/index.php
<?php

// 加载 smart 公共文件
require "../init.php";

$tit = 'this is index';
$cot = 'this is content of index';
$fot = '----END----';

// 向模板分配变量
$dong ->assign("title", $tit);
$dong ->assign('content', $cot);
$dong ->assign("footer",$fot);

// 加载并输出模板
$dong ->display('index.tpl');

3. 前端模板文件
#公共头部模板
cat demo/templates/head.tpl
<html>
    <head>
        <title> <{$title}> </title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
#公共尾部模板
cat demo/templates/footer.tpl
           <style>
                body{ text-align:center}
                .div{ margin:0 auto; width:400px; height:100px; border:1px solid #F00}
                /* css注释:为了观察效果设置宽度 边框 高度等样式 */
            </style>            

            <div class="div"> <{$footer}> </div>
    </body>
</html>
#对应index.php 的模板文件,使用 include 加载了 公共模板 head/footer.tpl 文件;
cat demo/templates/index.tpl
<{include "head.tpl"}>
        <h1> <{$title}> </h1>
        <div> <{$content}> </div>
<{include "footer.tpl"}>

验证

图片:smarty-1.png


参考: 实现简单的 php 模板引擎  
#
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2165
  • 铜币13236枚
  • 威望5838点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
沙发#
发布于:2017-02-24 09:41
smarty 注释
smarty 注释,模板注释被*星号包围,而两边的星号又被定界符包围,例如:
{* this is a comment *}
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2165
  • 铜币13236枚
  • 威望5838点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
板凳#
发布于:2017-03-02 16:56
smarty 循环遍历数组示例
代码
cat templates/memcache.tpl
<{include "head.tpl"}>
      
<table border="1" align="center" width="800">
    <{foreach key=$key item=$value from=$show }>
        <tr>
                <td> <{$key}> </td>
                <td> <{$value}> </td>
        </tr>
    <{/foreach}>
</table>

<{include "footer.tpl"}>
其中
与php 相同,依然使用foreach 指令,内部语法有些不同, from=$show 表示接收的数组,key 表示键名,item 表示值;

#
游客

返回顶部