php模板引擎 smarty笔记

Smarty的标签都是使用定界符括起来。 默认定界符是{  }, 但定界符可以被改变


注释: {* 这是一个注释 *}
 
  
 
变量:
模板变量以美元符号$开头,由字母、数组和下划线组成,和  PHP variable 相似。 变量可以引用数字索引或非数字索引的数组,对象的属性和方法等。不过,配置变量是例外。
配置文件 获取的变量,可以通过 井号引用起来访问如 #hash_marks# , 或者通过Smarty变量 $smarty.config 来访问。 后者在使用其他属性或者是访问别的变量值时比较有用,如$smarty.config.$foo。
<pre name="code" class="php">{$Name}

{$product.part_no} <b>{$product.description}</b>

{$Contacts[row].Phone}

<body bgcolor="{#bgcolor#}">
 
 

从PHP赋值的变量 以美元符号 ( $ ) 开头。
PHP 代码:
<?php

$smarty = new Smarty();

$smarty->assign('firstname', 'Doug');
$smarty->assign('lastname', 'Evans');
$smarty->assign('meetingPlace', 'New York');

$smarty->display('index.tpl');

?>
index.tpl 模板源码:
Hello {$firstname} {$lastname}, glad to see you can make it.
<br />
{* this will not work as $variables are case sensitive *}
This weeks meeting is in {$meetingplace}.
{* this will work *}
This weeks meeting is in {$meetingPlace}.
输出:
Hello Doug Evans, glad to see you can make it.
<br />
This weeks meeting is in .
This weeks meeting is in New York.

数组赋值, 可以通过点号“.”来使用赋值的数组变量。

<?php
$smarty->assign('Contacts',
    array('fax' => '555-222-9876',
          'email' => 'zaphod@slartibartfast.example.com',
          'phone' => array('home' => '555-444-3333',
                           'cell' => '555-111-1234')
                           )
         );
$smarty->display('index.tpl');
?>
index.tpl 模板代码:
{$Contacts.fax}<br />
{$Contacts.email}<br />
{* you can print arrays of arrays as well *}
{$Contacts.phone.home}<br />
{$Contacts.phone.cell}<br />
输出:
555-222-9876<br />
zaphod@slartibartfast.example.com<br />
555-444-3333<br />
555-111-1234<br />

数组下标, 你可以通过下标来使用数组,和PHP语法一样。
<?php
$smarty->assign('Contacts', array(
                           '555-222-9876',
                           'zaphod@slartibartfast.example.com',
                            array('555-444-3333',
                                  '555-111-1234')
                            ));
$smarty->display('index.tpl');
?>
index.tpl 模板代码:
{$Contacts[0]}<br />
{$Contacts[1]}<br />
{* you can print arrays of arrays as well *}
{$Contacts[2][0]}<br />
{$Contacts[2][1]}<br />
输出:
555-222-9876<br />
zaphod@slartibartfast.example.com<br />
555-444-3333<br />
555-111-1234<br />

从PHP赋值的 对象 的属性和方法,可以通过 -> 来使用。

name:  {$person->name}<br />
email: {$person->email}<br />
输出:
name:  Zaphod Beeblebrox<br />
email: zaphod@slartibartfast.example.com<br />


双引号中嵌入变量:

1、Smarty可以识别出在双引号中嵌套的 变量,这些变量名称必须只包括 字母、数字和下划线。 参见命名规则

2、另外,带有其他字符的,如点号(.)或者 $object->reference形式的变量, 必须用`单引号`括起来。

3、Smarty3中允许在双引号中嵌入Smarty的标签并运行。 如果你需要在双引号的变量上使用修饰器、插件或者PHP函数等,这是非常有用的。


避免Smarty解析

有时候部分模板中的代码是不需要或者不希望被Smarty解析的, 比较典型的例子是嵌入在页面HTML中的Javascript或CSS代码。 问题通常发生在这些语言会经常使用{ 和 },但{ 和 }也恰好是Smarty的 定界符

避免被解析的一个良好方式,是分离你的Javascript/CSS代码到单独的文件中, 然后在HTML中引入它们。而且这样也有利于浏览器进行缓存。 当你需要嵌入Smarty的变量或者函数到Javascript/CSS中,请参考下面的方式:

Smarty模板中,当{ 和 }定界符两边都是空格的时候,将会被自动忽略解析。 此特性可以通过设置Smarty的成员变量  $auto_literal 为false来关闭。

<script>
   // 下面的定界符两边都是空格,所以可以被自动忽略解析
   function foobar {
	alert('foobar!');
   }
   // 下面需要手动忽略解析
   {literal}
	function bazzy {alert('foobar!');}
   {/literal}
</script>

{literal}..{/literal}可以让块中间的内容忽略Smarty的解析。 在需要使用定界符的时候,可以通过 {ldelim}{rdelim}标签,或者 {$smarty.ldelim},{$smarty.rdelim}的变量来使用。

Smarty的默认定界符{ 和 }可以整齐地界定一般内容的显示。 然而你可以通过修改Smarty的$left_delimiter  $right_delimiter 的变量值,设置更适合的定界符。

Note: 修改定界符会影响到全部模板代码和解析,请确保在修改前已清除了全部的缓存和编译文件。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值