奥门金沙网址smarty详细使用教程(韩顺平smarty模板技巧笔记)

下一场在需求登记函数的地点,调用 zend_register_functions

4.自定义函数
function test($args){
$str="";
for($i=0;$i<$args['times'];$i++){
$str.="<br/><font color='".$args['color']."'>" size='".$args['size']."'>".$args['con']."</font>";
}
return $str;
}
//需注册函数
$smarty->register_function("self","test");
调用格局
<{self times="4" size="5" con="hello" color="red"}>

Smarty配置

在test斯玛特y文件夹中开创三个test文件夹,在这里个文件夹中开创贰个config.php文件,内容如下:

<?phpheader("content-type:text/html;charset=utf-8");//引入核心文件并实例化require ('/WWW/testSmarty/smarty/Smarty.class.php');$smarty = new Smarty();//配置//模板文件的路径$smarty->template_dir = '/WWW/testSmarty/test/tpl';//模板文件编译后得到的文件的路径$smarty->compile_dir = '/WWW/testSmarty/test/template_c';//缓冲文件的路径$smarty->cache_dir = '/WWW/testSmarty/test/cache';//开启缓冲,缓冲默认是关闭的$smarty->caching = true;//缓冲的保留时间$smarty->cache_lifetime = 120;?>

在安装路线的时候本身使用的是相对路线,也能应用相对路线。依赖设置的不二等秘书籍,还要在test文件夹中创造tpl,template_c和cache文件夹。

目录如下:

奥门金沙网址 1

查验smarty是或不是配备成功:

在test文件夹下创设二个start.php文件,文件内容如下:

<?php//引入配置文件require ('config.php');//向模板文件中传递值$smarty->assign('text','hello Smarty');//渲染模板$smarty->display('start.tpl');?>

在tpl文件中开创多个start.tpl文件,内容如下:

{$text}

模板文件的后缀而不是非得是tpl

在浏览器中输入localhost:800/testSmarty/test/start.php

只顾:在自个儿那儿Apache是800端口

若是浏览器中能够显得出hello 斯Matty,则注脚Smarty配置成功。

static zend_function_entry azalea_template_functions[] = { ZEND_NAMED_FE(p, ZEND_FN(azalea_template_printf), NULL) // 注册 p ZEND_NAMED_FE(url, ZEND_FN(azalea_url), NULL) // 注册 url PHP_FE_END};/* {{{ proto void p( string $format [, mixed $args [, mixed $... ]] ) */PHP_FUNCTION(azalea_template_printf){ zend_string *result, *text; // 参考 formatted_print.c 实现了一个 azaleaSprintf 方法 if ((result = azaleaSprintf(execute_data)) == NULL) { RETURN_FALSE; } // 然后进行 HTML 转义 text = php_escape_html_entities_ex((unsigned char *) ZSTR_VAL, ZSTR_LEN, 0, ENT_QUOTES, get_default_charset; zend_string_release; // 输出 PHPWRITE(ZSTR_VAL, ZSTR_LEN; zend_string_release;}/* }}} */

注意事项:
1.交替变量的标志分隔符日常接纳<{}>
转移分隔符的四个办法:
1.改源码:Smarty.class.php $left_delimiter 不推荐
2.动态纠正:
$Smarty->left_delimiter="<{";
$Smarty->right_delimiter="}>";
写在display之前

section循环

section不能够循环遍历关联数组,它不能不循环遍历三回九转数字下标的数组,倘若要循环关联数组使用foreach

section能够选择name,loop,step,start,max,show,在那之中name和loop是必得的。name是每二回巡回获得的下标,loop是垚循环的值,step循环的增进率,暗中同意为1,max是最大循环的次数,start起头循环的下标,默以为0,假若start为负数,就从数组末尾起先循环,show代表是还是不是出示循环的源委,默许是true

如下:

在test文件夹下创立section.php文件,内容如下:

<?phprequire ('config.php');$article = array(    array(        'title'=>'第一章',        'name'=>'QxQstar',        'content'=>'Smarty section循环第一章'    ),    array(        'title'=>'第二章',        'name'=>'QxQstar',        'content'=>'Smarty section循环第二章'    ));$smarty->assign('article',$article);$smarty->display('section.tpl');?>

在tpl文件夹下创设section.tpl文件,内容如下:

<ul>    {section name=item loop=$article}        <li>            {$article[item].title}            <p>作者:{$article[item].name}</p>            <p>内容:{$article[item].content}</p>        </li>    {sectionelse}        没有文章    {/section}</ul>
// 增加了 p 方法用于 HTML 转义输出,并支持 printf 格式<?php p('您好 %s, %s好', $username, date <= 12 ? '上午' : '下午'); ?>// 增加了 url 方法用于输出绝对路径<a href="<?php echo url ?>">登录</a>

append 以值传递,有拷贝的进度
append_by_ref 援引增添
assign私下认可是值传递的
assign_by_ref是援引传递

界定符

斯马特y的价签是放在界定符之间,默许界定符是{和},界定符是足以改换的。在配备文件中对界定符实行更动,如下:

  //将左界定符改为#

$smarty->left_delimiter = '#';
//将右界定符改为#
$smarty->right_delimiter = '#';

当Smarty读取到界定符之间的内容会试图解析它,并输出结果。在界定符之外的内容都是静态。
zend_unregister_functions(azalea_template_functions, -1, NULL);

自定义函数(块注册格局)
function test2($args,$con){
$str="";
for($i=0;$i<$args['times'];$i++){
$str.="<br/><font color='".$args['color']."'>" size='".$args['size']."'>".$con."</font>";
}
return $str;
}
//注册块函数
$smarty->register_block("block","test2");
调用情势
<{block times="4" size="5" color="red"}>hello<{/block}>

二.入门语法

先须要挨近普通的模块 functions 注册

以插件的款型增加自定义块函数
不得不坚守文件名格式:function.自定义函数块名.php
函数名格式:
function smarty_block_自定义函数块名($params,$con,&$smarty卡塔尔(قطر‎{
$str="";
for($i=0;$i<$args['times'];$i++){
$str.="<br/><font color='".$args['color']."'>" size='".$args['size']."'>".$con."</font>";
}
return $str;
}
//没有需求注册

制作插件

构建插件的主意有三种

1.行使registerPlugin函数注册写好的自定义函数

2.将写好的插件放在smarty目录中的Plugins目录里

3.PHP内置函数能够自行的以修饰插件的款型在模板中接纳

选取registerPlugin函数注册自定义插件,例子如下

在test文件夹下创设defineFunc.php文件,内容如下:

<?phprequire ('config.php');function test($params){    $p1 = $params['p1'];    $p2 = $params['p2'];    return $p1.$p2;}$smarty->registerPlugin('function','f_test','test');$smarty->display('definedFunc.tpl');?>

在tpl文件夹下创立三个defineFunc.tpl文件,内容如下:

{f_test p1='learn' p2=' Smarty'}

registerPlugin函数的首先个参数表达注册的这段程序的花色,在此是function表明注册的是三个function插件,还是能获得值有block和modifier,第2个参数指注册的Smarty function插件名,第四个参数指自定义函数名,第二个参数和第二个参数能够等效。

在斯马特y中当执行到{f_test p1='learn' p2=' Smarty'}时,p1和p2会被打包成一个数组传递到我们定义的test函数中去。

透过网Plugins文件夹中添Gavin件的法门塑造插件

1.制作function插件

在Plugins文件夹下创造几个function.test.php文件(function表示这么些叁个function插件,test表示插件名),内容如下:

function smarty_function_test($params){    //$params是一个关联数组    $w = $params['w'];    $h = $params['h'];    return $w * $h;}?>

在模板中间接采纳test function插件

{test h = 3 w = 5}

那八个参数会被打包成贰个数组传递到smarty_function_test函数中

2.制作modifier插件

在Plugins文件夹下创建一个modifier.test2.php文件(modifier代表那么些一个modifier插件,test2表示插件名),内容如下:

function smarty_modifier_test2($utime,$formate){    return date($formate,$utime);}

在模板中动用test2 modifier插件

{$time|test2:'Y-m-d H-i-s'}

概念modifier插件和function插件有所差别,function插件的自定义函数只收到三个数组参数,modifier插件的自定义函数
将收受到的参数风度翩翩一列举出来

3.制作block插件

在Plugins文件夹下创立一个block.test3.php文件(block代表这么些贰个block插件,test3表示插件名),内容如下:

function smarty_block_test3($params ,$content){    $replace = $params['replace'];    $maxnum = $params['maxnum'];    if($replace == 'true'){        str_replace(',', ',', $content);        str_replace('。', '.', $content);    }    $content = substr($content,0,$maxnum);    return $content;}

在模板中应用test3 block插件

{test3 replace='true' maxnum = 6}

abcdfedddderere

{/test3}

{test3}{/test3}之间的剧情传递到smarty_block_test3中的第二个参数中,test3后任何时候的参数打包成一个数组传递到smarty_block_test3中的第多少个参数中。

本来你只怕还要求在终止时去除那几个偶尔 functions

8.变量(入眼应用)
$config_dir
$template_dir
$compile_dir
$plugins_dir
$caching
$cache_dir
$cache_lifetime
$debugging运维调试调整台

while循环

Smarty的while循环与php中的while循环相通,语法如下:

{while $variable > 0}//some{/while}

在循环中利用{break}能够告风流浪漫段落循环,{continue}退出当前循环走入下叁回巡回