NSmarty - 基本语法
基本语法
注释
{* wow such a doge *}
输出变量、赋值
{$date='2112-09-03'}
今天是:{$date}!也可以写成:{$date|replace:'-':'/'}!
输出结果:
今天是:2112-09-03!也可以写成:2112/09/03!
输出数组和对象(nsmarty不区分数组和对象,数字可以理解为数字索引的对象)
{$people=[name=> '八云紫']}
{$people.age=17} {* 使用“点” 和 *}
{$people['gender']='少女'} {* 用中括号 (是一样的 但中括号里面可以有特殊字符,例如空格) *}
她是{$people.gender}{$people.name},今年{$people['age']}岁。
输出结果:
她是少女八云紫,今年17岁。
分支
{$selectedPlayer=0}
{if $selectedPlayer eq 0}
你选了灵梦
{elseif $selectedPlayer eq 1}
你选了魔理沙
{elseif $selectedPlayer eq 2}
你选了冴月麟
{/if}
输出结果:
你选了灵梦
循环
foreach
<table style="width:100%;"><tr>
{$colors=[honoka=>'#D98545', eli=>'#FEF0B5',kotori=>'#C3A48A',umi=>'#7171A6',
rin=>'#F08C6C',maki=>'#DD6467',nozomi=>'#685A8A',hanayo=>'#FBE48B',nico=>'#5B5B5B']}
{foreach $colors as $name => $code}
<td style="background-color:{$code};">{$name}</td>
{/foreach}
</tr></table>
输出结果:
honoka | eli | kotori | umi | rin | maki | nozomi | hanayo | nico |
for A to B
{$number=[1,2,3,4,5,6,7,8,'⑨']}
{for $i=0 to $number|count}
{$i}: {$number[$i]}、
{/for}
输出结果:
0: 1、
1: 2、
2: 3、
3: 4、
4: 5、
5: 6、
6: 7、
7: 8、
8: ⑨、
---
{for $i=0 to 10}
{$i}、
{/for}
输出结果:
0、1、2、3、4、5、6、7、8、9、10、
循环过程中可以用{break}和{continue}哦~
过滤器
输出变量时使用过滤器:如上面的{$date|replace:'-':'/'}
完整的过滤器列表看下面的“内置扩展”
有时需要连续使用同一个过滤器,可以使用setfilter:
{setfilter escape}
1: {$foo}
2: {$bar}
{/setfilter}
函数
可以在模板中使用提前定义好的函数实现简单的逻辑:,函数的调用方式是:{inline_function_name $var1 $var2 var_name=$var_value}
{block_function_name $var1 $var2 var_name=$var_value}
bla bla...
{/block_function_name}
一个inline_function不可以用block_function的方式调用,下面的写法是错的(反之亦然)
{inline_function_name $params}{/inline_function_name}
一个函数至少有一个参数,否则无法调用。
为什么?
引用文件
{include file="./file_in_same_folder.tpl"}
{include file="../file_in_parent_folder.tpl"}
{include file="/absolute/file/path/file.tpl"}
{include file="$var_path/file.tpl"}
{include file="relative/to/template/root/file.tpl"}
以上是所有可能的引用文件的方式
- 由./或../开头:相对于写这一行的文件的路径
- 由/开头:文件系统绝对路径
- 其他开头:从模板目录中找
模板目录可以通过配置文件修改(不建议)
字面值
很多时候,尤其是写script标签的的时候,会需要用很多大括号,但不想它们被转义,那么可以使用字面值:<script type="text/javascript">{literal}
var json = {Flandre:'Scarlet'};
{/literal}</script>