基本语法
所有的smarty标签都被加上了定界符.在smarty里,所有定界符以外的内容都是静态的,当smarty遇到了模板标签,将尝试解释他们,然后再以恰当的方式输出. 默认情况下是{和},但它们是可定制的.定制方法是:
$smarty->left_delimiter=''; 1.注释 模板注释被号包围,例如{thisisacomment*}
smarty注释将不被输出.它是模板内在的注释. 2.变量
模板变量以$开头,可以包含数字,字母和下划线。
config_file变量是例外要用#变量名#的方法引用 3.函数
smarty标签输出一个变量或者调用某种函数.
在定界符内函数和其属性将被处理和输出.例如:
{funcnameattr1="val"attr2="val"}.
funcname为函数的名称比如:include等,attr1,attr2为属性名,val为属性相应的值。 在模板里无论是内建函数还是自定义函数都有相同的语法.
内建函数将在smarty内部工作,例如{if},{section}和{strip}.他们不能被修改.
自定义函数通过插件机制起作用,它们是附加函数,可以随意修改,自行添加.
例如{html_options}and{html_select_date} 4.属性
静态数值不需要加引号,布尔值(真或假)也不需要引号,可以是true,on,yes或者false,off,no.但是字符串例外.变量同样被用到了,它们也不能加引号. 5.在字符串中插入变量
只能识别数字,字母,下划线和[]的组合,如果为复杂的形式需要用`将变量隔起来。比如{funcvar="test$foo.bartest"}中只能识别变量$foo,要识别$foo.bar,需要写成{funcvar="test
$foo.bartest"}的格式。 6.一些保留字的<a href="https://www.jb51.cc/tag/xianshi/" target="_blank" class="keywords">显示</a><a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a> <BR>在模板中如果要将smarty的一些保留字作为语言的<a href="https://www.jb51.cc/tag/neirong/" target="_blank" class="keywords">内容</a><a href="https://www.jb51.cc/tag/xianshi/" target="_blank" class="keywords">显示</a>出来,比如<a href="https://www.jb51.cc/tag/xianshi/" target="_blank" class="keywords">显示</a>分隔符,默认为{}的<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>是:{ldelim},{rdelim}或者{$smarty.ldelim},{$smarty.rdelim}或者可以把{}放在{literal}..{/literal}中间<a href="https://www.jb51.cc/tag/shuchu/" target="_blank" class="keywords">输出</a>。 smarty的保留变量 {$smarty}保留变量可以被用于访问一些特殊的模板变量. <BR>以下是全部. <a href="https://www.jb51.cc/tag/yemian/" target="_blank" class="keywords">页面</a>请求变量 <BR>以下是访问<a href="https://www.jb51.cc/tag/yemian/" target="_blank" class="keywords">页面</a>请求变量诸如get,post,cookies,server,enviroment和session变量的例子.例如{$smarty.server.SERVER_NAME}取得服务器变量,{$smarty.env.PATH}取得系统环境变量path,{$smarty.request.username}取得get/post/cookies/server/env的复合变量。 {$smarty.now}变量用于访问当前时间戳. <BR>可以用date_format调节器格式化<a href="https://www.jb51.cc/tag/shuchu/" target="_blank" class="keywords">输出</a>.例如{$smarty.now|date_format:"%Y-%m-%d%H:%M:%S"} {$smarty.const} <BR>你可以直接访问<a href="https://www.jb51.cc/tag/PHP/" target="_blank" class="keywords">PHP</a>常量.例如{$smarty.const._MY_CONST_VAL} {$smarty.capture} <BR>可以通过{capture}..{/capture}结构<a href="https://www.jb51.cc/tag/jiequ/" target="_blank" class="keywords">截取</a>的<a href="https://www.jb51.cc/tag/shuchu/" target="_blank" class="keywords">输出</a>可以使用{$smarty}变量访问. {$smarty.config} <BR>{$smarty}变量可以访问已经加载的config变量. <BR>例如{$smarty.config.foo}就可以表示{#foo#}. {$smarty.section},{$smarty.foreach} <BR>{$smarty}变量可以访问'section'和'foreach'循环的<a href="https://www.jb51.cc/tag/shuxing/" target="_blank" class="keywords">属性</a>. {$smarty.template} <BR><a href="https://www.jb51.cc/tag/xianshi/" target="_blank" class="keywords">显示</a>当前被处理的模板的名字. {$smarty.version} <BR><a href="https://www.jb51.cc/tag/xianshi/" target="_blank" class="keywords">显示</a>smarty模板的版本 {$smarty.ldelim} <BR><a href="https://www.jb51.cc/tag/xianshi/" target="_blank" class="keywords">显示</a>左分隔符 {$smarty.rdelim} <BR><a href="https://www.jb51.cc/tag/xianshi/" target="_blank" class="keywords">显示</a>右分隔符 变量调节器 <BR>变量调节器用于变量,<a href="https://www.jb51.cc/tag/zidingyihanshu/" target="_blank" class="keywords">自定义函数</a>和字符串. <BR>可以使用'|'符号和调节器<a href="https://www.jb51.cc/tag/mingcheng/" target="_blank" class="keywords">名称</a>应用调节器. <BR>变量调节器由赋予的参数值决定其行为. <BR>参数由':'符号分开. <BR>如果你用变量调节器调节数组变量,结果是数组的每个值都被调节.如果你想要调节器调节整个数组,你必须在调节器名字前<a href="https://www.jb51.cc/tag/jiashang/" target="_blank" class="keywords">加上</a>@符号. <BR>例如:{$articleTitle|@count}(这将会在<a href="https://www.jb51.cc/tag/shuchu/" target="_blank" class="keywords">输出</a>$articleTitle数组里的数目) capitalize <BR>将变量里的所有单词首字大写.参数值boolean型决定带数字的词是否首字大写。默认不大写 count_characters <BR>计算变量值里的字符数.参数值boolean型决定是否计算空格数。默认不计算空格 cat <BR>将cat里的参数值连接到给定的变量后面.默认为空。 count_paragraphs <BR>计算变量里的段落<a href="https://www.jb51.cc/tag/shuliang/" target="_blank" class="keywords">数量</a> count_sentences <BR>计算变量里句子的<a href="https://www.jb51.cc/tag/shuliang/" target="_blank" class="keywords">数量</a> count_words <BR>计算变量里的词数 date_format <BR>日期格式 第一个参数控制日期格式. <BR>如果传给date_format的数据是空的,将使用第二个参数作为默认时间 %a-星期几的简写 %A-星期几的全写 %b-月份的简写 %B-月份的全写 %c-日期时间06/12/0511:15:10 %C-世纪时间 %d-一个月的第几号(从01到31) %D-同%m/%d/%y %e-一个月的第几号,号为单数则前面加一空格(从1到31) %g-世纪 %G-世纪[0000,9999] %h-同%b %H-24小时形式的小时(从00到23) %I-12小时形式的小时(从01到12) %j-一年中的第几天(从001到366) %k-24小时形式的小时,单数字前面加空格.(从0到23) %l-12小时形式的小时,单数字前面加空格.(range1to12) %m-月份(range01to12) %M-分 %n-换行符 %p-<a href="https://www.jb51.cc/tag/xianshi/" target="_blank" class="keywords">显示</a>早上还是下午
am'或`pm' %r-a.m.或p.m.形式的时间 %R-24小时形式的时间 %S-秒 %t-tab符号 %T-同%H:%M:%S %u-用[1,7],表示星期几 %U-计算是该年的第几个星期,从该年的第一个星期天开始计算 %V-计算是该年的第几个星期,从01到53,第一个星期必须至少有4天在这一年,星期天作为这个星期的第一天 %w-用数字的形式表示是星期的第几天,星期天为0 %W-用数字的形式是该年的第几个星期,从该年的第一个星期一开始计算 %x-显示日期:月/日/年 %X-显示时间:小时:分钟:秒 %y-不包括世纪的年份 %Y-包括世纪的年份 %Z-时区 %%-输出% 其中有些有时不能正常输出。 default
默认
为空变量设置一个默认值.
当变量为空或者未分配的时候,将由给定的默认值替代输出. escape
转码
参数值为html,htmlall,url,quotes,hex,hexentity,javascrīpt。默认是html转码 indent
缩进
在每行缩进字符串,第一个参数指定缩进多少个字符,默认是4个字符.第二个参数,指定缩进用什么字符代替。 lower
小写
Thisisusedtolowercaseavariable.
将变量字符串小写 nl2br
换行符替换成
regex_replace
正则替换
寻找和替换正则表达式.必须有两个参数,参数1是替换正则表达式.参数2使用什么文本字串来替换 replace
替换
简单的搜索和替换字符串必须有两个参数,参数1是将被替换的字符串.参数2是用来替换的文本 spacify
spacify是在字符串的每个字符之间插入空格或者其他的字符串.参数表示将在两个字符之间插入的字符串,默认为一个空格。 string_format字符串格式化
是一种格式化浮点数的方法.例如十进制数.使用sprintf语法格式化。参数是必须的,规定使用的格式化方式。%d表示显示整数,%.2f表示截取两个浮点数。 strip去除(多余空格)
替换所有重复的空格,换行和tab为单个或者指定的字符串.如果有参数则是指定的字符串。 strip_tags去除所有html标签 truncate截取
参数1,规定截取的字符数.默认是80个.
第二个参数指定在截取的那段字符串后加上什么字符.默认为...
第三个参数决定是否精确截取,默认情况下为false,则smarty不会分割单词。 upper将变量改为大写 wordwrap行宽约束
第一个参数指定段落的宽度(也就是多少个字符一行,超过这个字符数换行).默认80.
第二个参数指定在约束点使用什么字符(默认是换行符\n).
第三个参数决定是否精确截取字符,默认情况下是不精确截取,就是截取时不能分开单词。
内建函数
内建函数不能擅自修改。
capture
capture函数的作用是收集模板输出的数据到一个变量里,而不是把它们输出到页面.例如任何在{capturename="foo"}和{/capture}之间的数据都被收到了由函数的名称属性指定的变量{$foo}里,或者{$smarty.capture.foo}里。如果函数没有名字属性,将使用"default".每个{capture}都必须对应{/capture},也不能嵌套使用capture函数。 config_load
引用配置文件
file是必须的,说明要包含进来的配置文件名称,section说明要加载的部分的名称,scope被处理的变量的作用域.必须是local,parent或者global.
local的意思是变量将在本模板里被加载.
parent的意思是变量将在本模板和上级模板被加载.
global的意思是变量将应用到所有的模板.默认为local。变量是否在上级模板可视,默认为no。如果scope属性已经有了,这个值将被忽略. foreach,foreachelse
foreach循环是选择性的section循环.用于遍历关联数组.foreach的语法比section简单的多,但是作为一个折中它只能用于简单数组.
foreach必须的参数是from和item.from变量表示需要循环的数组的名称,item表示当前元素的变量名,key表示当前关键字的变量名,name表示访问foreach属性的foreach循环名。循环可以互相嵌套,被嵌套的循环之间的名字必须是独立的.foreachelse在from变量没有值的时候被执行 include
用来引用其他的模板。
file属性是必须的用来表示所引用模板的名字,assign表示include文件将要分配的输出的变量。你可以自行用属性名="属性值"的方式定义任意个局部变量。 include_PHP
用来在模板中引入PHP脚本。file是必须的用来表示PHP脚本的路径,once确定如果在模板中引用了PHP脚本多次,是否只装载一次。默认为true。 insert
用来包含PHP脚本中的函数,name是必须的,表示所插入的脚本的名称,注意如果名称是name,则包含的函数则是insert_name(),所以所有要插入的函数要有前缀insert_。如果用了assign属性,则insert的输出将会分配给模板变量而不会显示。scrīpt表示要引用的脚本路径。这个程序产生的内容将不会被缓存,在每次调用该页时重新执行,适用于广告,投票,查询结果等互动的地方。
if,elseif,else
if语句和和条件同PHP差不多,但每个词之间必须用空格分割开。也有一些新的条件语句,列举如下:eq相等,ne、neq不相等,gt大于,lt小于,gte、ge大于等于,lte、le小于等于,not非,mod求模。is[not]divby是否能被某数整除,is[not]even是否为偶数,$ais[not]evenby$b即($a/$b)%2==0,is[not]odd是否为奇,$aisnotoddby$b即($a/$b)%2!=0 PHP
PHP标记可以让模板中能直接使用PHP语言。 section,sectionelse
section用来循环显示数组的数据,name和loop是必须的参数。name表示嵌套名.section可以嵌套使用,但是名字必须各不相同。loop表示循环的次数.sectionelse在loop参数为空的输出。start用来规定循环开始的指针,如果值为负则从数组尾部计算开始的指针,默认为0.step表示循环的步数,为负则反向循环,默认为1.max设定循环的最大步数.show决定是否显示section.
section也有自己的变量处理section属性,用{$smarty.section.sectionname.varname}来显示. index
index用来显示当前循环的指针,从0开始. index_prev
用来显示前一次循环的指针,从-1开始 index_next
用来显示后一次循环的指针. iteration
显示当前循环的次数,从1开始. first
如果当前循环为第一个循环,则值为true. last
如果当前循环为最后一个循环,则值为true. rownum
同iteration. loop
显示最后一次循环的指针,可以用在section中间的任何地方,也可以用在section之后. show
show决定是否显示section. total
显示总共循环的次数,也可以用在section之后. strip
去掉多余的空格
常规函数
assign
assign用来在执行模板时分配变量值.var,value是必须的参数.var为要分配值的变量名,value为分配的值. counter
counter用来输出一个计数.可以用多个计数,但是名字必须各不相同.name表示计数器名,默认为default.start表示计数的初始值,默认为1.skip计数的间隔,默认为1.direction表示计数方向,up或down,默认为up.print表示是否打印该值,默认为true.assign定义模板变量,计数器的输出将被分配到assign定义的变量中. cycle
Cycle用来循环显示一组数值.name表示cycle名,values("值1","值2",...)表示循环显示的一组数值.print表示是否显示.advance决定是否显示下一个数值.delimiter决定value的分隔符,默认为逗号.assign定义模板变量,cycle的输出将被分配到assign定义的变量中. debug
debug可以显示所有分配了值的变量,但是不显示模板内容,output属性决定显示的格式html或javascrīpt,默认是html. eval
eval用来在变量里插入变量。var是插入的变量名,assign把输出分配给一个变量。 fetch
用来取得文件内容,并输出文件内容,可以取得本地文件,http文件和ftp文件,file是取得文件的路径,assign把输出分配给一个变量。 html_checkBoxes
html_checkBox用来用给定的数据创建checkBox。name表示checkBox的名称,values表示checkBox的值,output表示checkBox的显示,selected表示被选选项的值,options表示一组checkBox的值和显示,separator表示分割每个checkBox的符号,labels表示给输出添加标签,默认为true。 html_image
html_image用来为一个图片创建html标签,如果height和width不分配值将会自动生成。file是图片的路径,height,width,alt同html标签,basedir是图片相对路径开始的目录的路径,默认为服务器根目录。href定义图片的链接。 html_options
输出下拉列表,参数有name,values,output,selected,options。 html_radios
输出单选框,参数同复选框。 html_selectdate
prefix定义各个下拉列表名字的前缀,默认为Date。time决定使用的时间,默认是当前时间。start_year决定下拉列表开始的年份,可以用年份表示,也可以用与当前年份的相对年数来表示。默认是当前年份。end_year决定下拉列表结束的年份,可以用年份表示,也可以用与当前年份的相对年数来表示。默认是当前年份。display_days决定是否显示日期。display_months决定是否显示月份。display_years决定是否显示年份。month_format决定显示月份的格式,默认为%B。day_format决定显示日期的格式,默认为%02d。day_value_format决定日期值的格式,默认为%d。month_value_format决定月份值的格式,默认为%m。year_as_text决定是否将年份按文本格式输出。reverse_years决定是否反向输出各年份。field_array用来取得一组变量,可以用name[Day],name[Month],name[Year]的方式从form取得获得的值。day_size,month_size,year_size添加大小标签。all_extra,day_extra,month_extra,year_extra添加额外的属性到select或input标签。field_order决定年月日下拉列表的顺序,默认为MDY。field_separator不同下拉列表之间的分隔符,默认是\n。year_empty,month_empty,day_empty是在各下拉列表第一栏显示的内容。 html_selecttime
prefix定义各个下拉列表名字的前缀,默认为Time。time决定使用的时间,默认是当前时间。display_hours决定是否显示小时。display_minutes决定是否显示分钟。display_seconds决定是否显示秒数。display_meridian决定是否显示上午或下午,即显示am/pm。use_24_hours决定是否24小时制。minute_interval决定分钟之间的间隔。second_interval决定秒数之间的间隔。field_array用来取得一组变量,可以用name[Hour],name[Minute],name[Second]的方式从form取得获得的值。all_extra,hour_extra,minute_extra,second_extra,meridian_extra添加额外的属性到select或input标签。 html_table
loop定义用于循环的一组数据。cols决定列的数目,rows决定行的数目,如果其中一个为空,另一个有值,则根据元素个数和有值的属性来计算另一个的值,两者的默认值为3。inner决定元素的列举方向cols则列跟着列排列,rows则行跟着行排列,默认为cols。table_attr,tr_attr,td_attr分别为table,tr,td增加标签,如果tr_attr,td_attr是数组,将会循环增加标签。trailpad用来填充最后一行没有值的单元格,默认是。hdir决定每行元素的排列方向,从左到右right或从右到左left,默认为right。vdir决定每列的排列方向,从上到下down或从下到上up,默认为down。 math
进行数字运算操作。equation和var是必须的。equation定义运算式,可以使用的运算符有+,-,/,,abs,ceil,cos,exp,floor,log,log10,max,min,pi,pow,rand,round,sin,sqrt,sransandtan。var给运算变量赋值。format确定结果的格式。assign将输出赋给一个参数。 mailto
使用mailto函数能使网络蜘蛛很难获取你的email地址,但是能在网页上正常显示,因为他把email地址进行了加密处理。address是必须的,定义email地址。text是显示在页面上的文本内容,默认是email地址。encode是加密email地址的方式,可以是none,hex或javascrīpt,默认是none。如果要把邮件发给其他的邮箱,可以用cc抄送,email地址之间用,分割。bcc则为密件抄送。subject是邮件主题。newsgroups是发表内容的新闻组,新闻组之间用,隔开。extra添加附加标签。followupto意思不知。 textformat
textformat用来格式化文本,他会去掉空格和特殊字符,和规定行宽和缩进。style规定当前的格式,indent规定缩进的位数。indent_first规定第一行的缩进。indent_char用来缩进的字符,默认是一个空格。wrap规定行宽,即一行的字符数,默认是80。wrap_char规定每行的分隔符,默认是\n。wrap_cut决定是否分割单词。assign将输出分配给变量。
常量
SMARTY_DIR
是到smarty类目录的完全路径,必须以/结束。如果没有定义,将会自动决定路径. SMARTY_CORE_DIR
是到smarty类core文件目录的完全路径,必须以/结束。如果没有定义,将会自动定义为smarty_dir路径下面的子目录.
变量 $template_dir
默认的模板目录名,默认为"./templates".
$compile_dir
默认的编译模板目录名,默认为"./templates_c"
$config_dir
默认的config文件目录名,默认为"./configs".
$plugins_dir
默认的插件目录名,默认为"plugins".
$debugging
debugging控制台。即一个显示变量的窗口.
$debug_tpl
debug窗口的模板
$debugging_ctrl
另一种控制debugging的方法。
$autoload_filters
对所有的模板使用过滤程序,这个变量是一个数组,其中关键字是过滤的类型,值是过滤的名字。
$compile_check
每次PHP执行将是否查看模板的内容是否改变。 $caching
决定是否缓存文件执行生成的文件。
$cache_dir
默认的模板缓存目录名,默认为"./cache".
$cache_lifetime
缓存的模板的过期时间,以秒计算.$caching值为-1则缓存的模板永不过期.
最后我放个我用的例子.大家仅做一个参考吧 <?PHP
error_reporting(7);
$TurnDot=substr(PHP_OS,3)=='WIN'?";":":";
$doc_root=$_SERVER['DOCUMENT_ROOT'];//默认获取根路径
//$doc_root="E:/Myweb/an-cool.com/Web";//这里是指定路径
$lib_root=".".$TurnDot.$doc_root."/shopadmin".$TurnDot.$doc_root."/shopadmin/inc".$TurnDot.$doc_root."/".$TurnDot.$doc_root."/jpgraph/src/".$TurnDot.$doc_root."/Smarty/libs/".$TurnDot.$doc_root."/Smarty";
ini_set("include_path",$lib_root);
include("conf.global.PHP");//这里是装载一个全局配置文件.
$Templates_root=$doc_root."/templates";//定义摸版根目录
define("Templates",$Templates_root);
$templates=isset($INFO['templates'])?$INFO['templates']:'default';
include_once('Smarty.class.PHP');
$tpl=newSmarty();//建立smarty实例对象$tpl
$tpl->debugging=false;
$tpl->template_dir=Templates."/".$templates;//设置模板目录
tpl->compile_dir=Templates."/".$templates."/templates_c";//设置编译目录
$tpl->cache_dir=$doc_root."/cache";//设置缓存目录
$tpl->cache_lifetime=6060*24;//设置缓存时间
$tpl->cache_lifetime=0;//设置缓存时间
$tpl->caching=false;//这里是调试时设为false,发布时请使用true
$tpl->left_delimiter='<{';
$tpl->right_delimiter='}>';
$tpl->assign("template_dir",$INFO['site_url']."/templates/".$templates);//摸板路径
$tpl->assign("Site_Url",$INFO['site_url']);//主站URL
$tpl->assign("LanguageIs",$INFO['IS']);//语言包类型
$tpl->assign("HtmlTitle",$INFO['site_title']);//TITLE内容
$tpl->assign("HtmlMeta",$INFO['Meta_keyword']);//Meta内容
?>