SpeedPHP/Smarty开发教程

来自站长百科
跳转至: 导航、​ 搜索

SpeedPHP | 快速入门 | 访问交互 | 数据操作 | 框架概述 | 模板引擎 | 优化加速 | 开发指南 | 数据模型 | API参考

对模板赋值[ ]

将变量输入到模板[ ]

程序:

$this->hello = "Hello world";

模板:

<{$hello}>

输出:

Hello world

将数组输入到模板[ ]

程序:

$this->color = array('red' => '红色', 'yellow' => '黄色', 'green' => '绿色');

模板可以使用:

<{$color['red']}>

同时也可以:

<{$color.red>

输出:红色

模板内部语法[ ]

if,elseif,else 条件判断[ ]

<{if $color == "red"}>

这是红色的。

<{elseif $color == "green" || $color == "white"}>

这是绿色或者白色的。

<{else}>

这不知道什么颜色

<{/if}>

Smarty中的if/else除了不使用括号外和PHP的if/else几乎是一样的。

include 包含文件[ ]

<{include file="header.html"}>

请注意include的包含是以'template_dir'的设置为根目录的,而且并不存在相对目录。所以比如我们的footer.html在"模板目录/main/footer.html",我们将使用

<{include file="main/footer.html"}>

来进行包含。

在Smarty中还有include_php,和include一样,只是include_php包含的是可执行的PHP文件。同时,如果使用include_php函数,将可能涉及到Smarty的安全特性,这和{php}语法也是有关的。当然,在基于Smarty的模板开发中,我们原则上不建议在模板内使用PHP的功能。

foreach,foreachelse[ ]

和PHP的foreach一样,循环处理数组。例:

$this->color = array('red' => '红色', 'yellow' => '黄色', 'green' => '绿色');
<{foreach item=colorname from=$color key=enname}>
<{$enname}>: <{$colornam}><br>
<{/foreach}>

将输出:

  • red:红色
  • yellow:黄色
  • green:绿色

多维数组也是同样处理,请留意以下的多维数组,例:

$students = 
   array(
      'name' => 'He Qing',
      'age' => 17,
      'score' => array(
         'math' => 76,
        'english' => 92,
         'PE' => 72
      ),
   ),
   array(
      'name' => 'Lee Wen',
      'age' => 18,
      'score' => array(
         'math' => 69,
        'english' => 80,
         'PE' => 79
      ),
   ),
);
$this->students = $students ;
模板:
学生成绩:<br>
<{foreach item=person from=$students}>
姓名:<{$person.name}><br>
年龄:<{$person.age}><br>
分数:
<{foreach item=num key=subject from=$person.score}>
<{$subject}>:<{$num}><br>
<br><br>
<{/foreach}>
<{foreachelse}>
暂无学生数据!
<{/foreach}>

foreachelse是在变量未赋值的时候将显示。和foreach差不多的还有section。

literal[ ]

literal主要用于显示有可能包含大括号等字符信息的 javascript 脚本. 当这些javascript 脚本处于 {literal}{/literal} 标签中时,模板引擎将不分析它们,而直接显示。

有时候我们在使用Smarty模板时,会遇到程序正常却仅输出空白页面;这时我们可以检查一下,是否该模板中包含了javascript脚本。在这些javascript外边加上literal就不会有问题了。

<{literal}>
<script language=javascript>
  <!--
  function isblank(field) {
  if (field.value == '') 
  { return false; }
  else
  {
  document.loginform.submit();
  return true;
  }
  }
  // -->
</script>
<{/literal}>

strip[ ]

Smarty将清除{strip} ... {/strip}之间的全部空格以及回车。

建议马上在您的模板中使用strip标签,根据实际开发的估计,一般的页面在使用了strip标签几乎可以减少四分之一的html文件大小,尤其在内容特别多的页面(比如首页)在网页的打开速度和显示速度上面有着明显的提高。

例子:

{strip}
<table border=0>
<tr>
<td>
<A HREF="{$url}">
<font color="red">This is a test</font>
</A>
</td>
</tr>
</table>
{/strip}

显示:

<A HREF="http://my.domain.com"> This is a test</A>

SpeedPHP框架在Smarty模板中的函数[ ]

在模板中,除了可以使用Smarty本身自带的函数外,sp框架还提供了一些常用的函数,下面我们了解一下:

spUrl[ ]

和输出spUrl()函数结果一样,显示一个URL地址

比如:

程序中:echo spUrl('article', 'list', array('page'=>3, 'pageSize' => 10)); // 显示文章列表的第三页

在模板中使用就是:

<{spUrl c='article' a='list' page=3 pageSize=10}>

T[ ]

和输出 T()函数的结果一样,显示多语言情况下的翻译结果

比如:

程序中:echo T("welcome"); // 显示在特定语言下的欢迎信息

在模板中则是:

<{T w='welcome'}>

HTML相关函数[ ]

Smarty提供了一系列的HTML代码生成函数。

html_checkboxes[ ]

生成多个多选框,程序:

$this->cust_checkboxes = array(
            1000 => 'Joe Schmoe',
            1001 => 'Jack Smith',
            1002 => 'Jane Johnson',
            1003 => 'Charlie Brown'
);
$this->customer_id' = 1001;

模板:

<{html_checkboxes name="id" options=$cust_checkboxes checked=$customer_id separator="
"}>

输出:

<label><input type="checkbox" name="checkbox[]" value="1000" />Joe Schmoe</label><br />
<label><input type="checkbox" name="checkbox[]" value="1001" checked="checked" />Jack Smith</label><br />
<label><input type="checkbox" name="checkbox[]" value="1002" />Jane Johnson</label><br />
<label><input type="checkbox" name="checkbox[]" value="1003" />Charlie Brown</label><br />

html_image[ ]

生成图片img标签,html_image将自动获取图片长宽。

模板:

<{html_image file="pumpkin.jpg"}>

输出:

<img src="pumpkin.jpg" alt="" border="0" width="44" height="68" />

html_options[ ]

生成多个下拉框选项组,需要自行加上<select>,程序:

$this->cust_options= array(
            1000 => 'Joe Schmoe',
            1001 => 'Jack Smith',
            1002 => 'Jane Johnson',
            1003 => 'Charlie Brown'
);
$this->customer_id' = 1001;

模板:

<select name=customer_id>
    <{html_options options=$cust_options selected=$customer_id}>
</select>

输出:

<select name=customer_id>
    <option value="1000">Joe Schmoe</option>
    <option value="1001" selected="selected">Jack Smith</option>
    <option value="1002">Jane Johnson</option>
    <option value="1003">Charlie Brown</option>
</select>

html_radios[ ]

生成多个单选框,程序:

$this->cust_radios = array(
            1000 => 'Joe Schmoe',
            1001 => 'Jack Smith',
            1002 => 'Jane Johnson',
            1003 => 'Charlie Brown'
);
$this->customer_id' = 1001;

模板:

<{html_radios name="id" options=$cust_radios checked=$customer_id separator="
"}>

输出:

<input type="radio" name="id[]" value="1000">Joe Schmoe<br />
<input type="radio" name="id[]" value="1001" checked="checked"><br />
<input type="radio" name="id[]" value="1002">Jane Johnson<br />
<input type="radio" name="id[]" value="1003">Charlie Brown<br />

html_select_date[ ]

生成年月日下拉框,模板:

{html_select_date month_format="%m" field_order="YMD" start_year="1950" }

html_select_time 生成时分秒下拉框
{html_select_time use_24_hours=true}

html_table[ ]

生成一个表格,程序:

$this->data = array(1,2,3,4,5,6,7,8,9);

模板:

{html_table loop=$data cols=4 }

输出:

<table border="1">
<tr><td>1</td><td>2</td><td>3</td><td>4</td></tr>
<tr><td>5</td><td>6</td><td>7</td><td>8</td></tr>
<tr><td>9</td><td> </td><td> </td><td> </td></tr>
</table>

对模板变量的修饰[ ]

针对输入到模板的变量,有时候我们需要进行一些转换修饰,比如对网址进行URL编码等。下面我们将介绍几个常用的变量修饰器(Modifiers)

default[ ]

默认值

在变量为空或未赋值的时候,将由默认值替代输出。

例:<{$user_name|default:'游客'}>,如果$user_name并未赋值,则输出“游客”。

escape[ ]

对字符串进行编码,常用的编码方式:有html(进行HTML转码)url(进行URL转码)javascript(javascript转码)等

例:$this->url = "http://www.zzbaike.com";

模板:<{$url|escape:"url"}>

输出:http%3A%2F%2Fwww.zzbaike.com

lower小写upper大写[ ]

对字符串进行小写或大写的转换

例:$this->hello = "Hello World!";

模板:

<{$hello|lower}>  

将输出 hello world!

<{$hello|upper}>  

将输出 HELLO WORLD!

replace[ ]

替换,与str_replace效果相同

例:$this->num = "101010101010101";

模板:<{$num|replace:"1":"0"}> // 1被替换成了0

输出:111111111111111

strip_tags[ ]

去除HTML标签,也就是去除<>中间的字符串

例:$this->myword = "hi, this is red font.";

模板:<{$myword|strip_tags}>

输出:hi,this is red font.

参考来源[ ]

http://speedphp.com/manual.html

SpeedPHP使用手册导航

快速入门

开始使用SpeedPHP | 制作留言本 | 简便的数据表操作 | 用Smarty来显示页面

访问交互

入口文件 | 控制器架构 | 网址生成与PATH_INFO | 获取提交数据 | URLRewrite伪静态 | 自定义伪静态URL | 几种跳转 | 多语言实现 | 权限控制 | session、cookie | Ajax应用

数据操作

编写数据模型类 | 常规操作CRUD | 安全过滤 | 简化操作spDB | 数据变量存储 | 缓存配置

框架概述

单入口应用程序 | 架构设计 | 第三方类库及扩展功能 | UTF8编码与GBK版本 | SAE云计算版

模板引擎

模板引擎配置 | 使用Smarty | Smarty开发教程 | 自动显示模板| speedy教程 | 为什么使用模板其常见问题 | 模板包含文件 | 注册函数 | 全局变量赋值 | CSS和JS的路径

优化加速

生成静态HTML概述 | 生成HTML的使用 | 分页 | 高效函数缓存器| 模板引擎缓存

开发指南

核心函数 | 格式输出变量调试dump | 载入包含文件import | 类实例化函数spClass | 开发流程 | 目录结构、路径设置 | 大规模系统部署 | 用户自定义及全局操作 | 自定义函数库 | 自定义类库 | 自定义404页面 | 程序调试dump变量调试安全建议及命名建议

数据模型

高级数据库操作 | 数据表一对一关联 | 数据表一对多关联 | 数据表多对多关联 | 一表关联多表 | 关联结果的条件限制 | 关联结果在Smarty模板中显示 | 多数据库、数据表 | 多种类型数据库的配置 | 重写CRUD操作| 业务数据封装 | 数据函数复合调用

API参考

spModel数据库操作类 | spPager分页类 | spVerifier数据验证类 | spCache函数数据缓存类 | spLinker数据表关联实现类 | spView视图类 | spHtml静态HTML生成类 | spController控制器类 | spArgs环境参数类 | 配置 | 数据库驱动类 | 模板驱动类 | import载入文件