|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
看看西,人家这个编论坛,那个CMS,还有那啥CRM,我啥时候写一个呢? Smarty是一个php模板引擎,它分隔了逻辑法式和内在的内容,供应了一种易于办理的办法.
Smarty请求web办事器运转php4.0.6和以上版本.
smarty装置需求smarty库文件。可以去官方网站http://smarty.php.net下载。
网上讲了良多装置的教程,然而我都没有胜利,所以直接把全部目次名改成smarty直接复制到了网站地点的目次下,然后翻开
http://网站途径/smarty/demo/index.php,显示正常,应当算是装置胜利了。
根基语法
一切的smarty标签都被加上了定界符.在smarty里,一切定界符之外的内容都是静态的,当smarty碰到了模板标签,将测验考试注释他们,然后再以得当的体例输入.
默许情形下是 {和},但它们是可定制的.定制办法是:
$smarty->left_delimiter = '<!--{';
$smarty->right_delimiter = '}-->';
1.正文
模板正文被*号包抄,例如 {* this is a comment *}
smarty正文将不被输入.它是模板内涵的正文.
2.变量
模板变量以$开首,可以包括数字,字母和下划线。
config_file变量是破例要用#变量名#的办法援用
3.函数
smarty标签输入一个变量或挪用某种函数.
在定界符内函数和其属性将被处置和输入.例如:
{funcname attr1="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.在字符串中拔出变量
只能辨认数字,字母,下划线和[]的组合,假如为庞杂的模式需求用``将变量隔起来。好比{func var="test $foo.bar test"} 中只能辨认变量$foo,要辨认$foo.bar,需求写成{func var="test `$foo.bar` test"}的格局。
6.一些保存字的显示办法
在模板中假如要将smarty的一些保存字作为言语的内容显示出来,好比显示分隔符,默许为{}的办法是: {ldelim},{rdelim} 或{$smarty.ldelim},{$smarty.rdelim} 或可以把{}放在{literal} .. {/literal} 两头输入。
smarty的保存变量
{$smarty}保存变量可以被用于会见一些特别的模板变量.
以下是全体.
页面恳求变量
以下是会见页面恳求变量诸如get,post,cookies,server,enviroment和session变量的例子. 例如{$smarty.server.SERVER_NAME}获得办事器变量,{$smarty.env.PATH}获得体系情况变量path, {$smarty.request.username}获得get/post/cookies/server/env的复合变量。
{$smarty.now}变量用于会见以后工夫戳.
可以用 date_format调理器格局化输入. 例如{$smarty.now|date_format:"%Y-%m-%d %H:%M:%S"}
{$smarty.const}
你可以直接会见PHP常量. 例如{$smarty.const._MY_CONST_VAL}
{$smarty.capture}
可以经由过程 {capture}..{/capture}布局 截取的输入可使用{$smarty} 变量会见.
{$smarty.config}
{$smarty}变量 可以会见已加载的config变量.
例如 {$smarty.config.foo}就能够暗示 {#foo#}.
{$smarty.section}, {$smarty.foreach}
{$smarty} 变量可以会见'section'和'foreach'轮回的属性.
{$smarty.template}
显示以后被处置的模板的名字.
{$smarty.version}
显示smarty模板的版本
{$smarty.ldelim}
显示左分隔符
{$smarty.rdelim}
显示右分隔符
变量调理器
变量调理器用于变量,自界说函数和字符串.
可使用'|'符号和调理器称号使用调理器.
变量调理器由付与的参数值决意其行动.
参数由':'符号分隔.
假如你用变量调理器调理数组变量,了局是数组的每一个值都被调理.假如你想要调理器调理全部数组,你必需在调理器名字前加上@符号.
例如: {$articleTitle|@count}(这将会在输入 $articleTitle 数组里的数量)
capitalize
将变量里的一切单词首字大写. 参数值boolean型决意带数字的词是不是首字大写。默许不大写
count_characters
盘算变量值里的字符数.参数值boolean型决意是不是盘算空格数。默许不盘算空格
cat
将cat里的参数值毗连到给定的变量前面.默许为空。
count_paragraphs
盘算变量里的段落数目
count_sentences
盘算变量里句子的数目
count_words
盘算变量里的词数
date_format
日期格局
第一个参数掌握日期格局.
假如传给date_format的数据是空的,将利用第二个参数作为默许工夫
%a - 礼拜几的简写
%A - 礼拜几的全写
%b - 月份的简写
%B - 月份的全写
%c - 日期工夫06/12/05 11: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小时模式的小时,双数字后面加空格.(range 1 to 12)
%m - 月份 (range 01 to 12)
%M - 分
%n - 换行符
%p - 显示早上仍是下战书`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,javascript。默许是html转码
indent
缩进
在每行缩进字符串,第一个参数指定缩进几何个字符,默许是4个字符.第二个参数,指定缩进用甚么字符取代。
lower
小写
This is used to lowercase a variable.
将变量字符串小写
nl2br
换行符交换成<br />
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函数的感化是搜集模板输入的数据到一个变量里,而不是把它们输入到页面.例如任安在 {capture name="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的输入将会分派给模板变量而不会显示。 script暗示要援用的剧本途径。这个法式发生的内容将不会被缓存,在每次挪用该页时从头履行,合用于告白,投票,查询了局等互动的中央。
if,elseif,else
if语句和和前提同php差不多,但每一个词之间必需用空格朋分开。也有一些新的前提语句,罗列以下:eq相等,ne、neq不相等,gt大于,lt小于,gte、ge大于等于,lte、le 小于等于,not非,mod求模。is [not] div by是不是能被某数整除,is [not] even是不是为偶数,$a is [not] even by $b即($a / $b) % 2 == 0,is [not] odd是不是为奇,$a is not odd by $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两头的任何中央,也能够用在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或javascript,默许是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_select_date
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_select_time
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, srans and tan。var给运算变量赋值。format肯定了局的格局。assign将输入赋给一个参数。
mailto
利用mailto函数能使收集蜘蛛很难获得你的email地址,然而能在网页上正常显示,由于他把email地址停止了加密处置。address是必需的,界说email地址。text是显示在页面上的文本内容,默许是email地址。encode是加密email地址的体例,可所以none,hex或javascript,默许是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, 0, 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 = new Smarty(); //创立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 = 60 * 60 * 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内容
?>
不过还好,PHP语言给出的语法错误很详细,只要稍微熟悉一点之后,看错误提示就能很容易找出错误所在的。PHP还有一个特别好用的调试功能,在PHP语句中,你可以随时用echo来输出结果。 |
|