PHP模板引擎smarty详细介绍(3)

class A{
    function aa($nam){
        echo $nam;
    }
}
$smarty->assign("obj", new A);
//设置的模版变量是对象时在模版页可以如下这样调用,给模版传类对象时也是传址
//{$obj->aa('my name is y')}

//Smarty可以识别嵌入在双引号中的模版变量,只要此变量只包含数字、字母、下划线。但貌似只支持能直接转换成字符串的模版变量
$smarty->assign("testStr", "this is testStr");
//模板中可通过{"$testStr OK !"}来访问

/*
tpl模板包含模板
模板文件:
{include file="header.tpl"}
header.tpl内容:
<span>这是顶部内容!!,欢迎你,{$name}</span>

模板包含模板也可以是这样格式
{include file="header.tpl" testVar="这是顶部内容!!!"}
header.tpl则可以通过{$testVar}使用调用页包含时传来的模板变量
header.tpl内容:
<span>{$testVar},欢迎你,{$name}</span><hr />
*/

/*
可以预先规定一系列的变量与值的对应,并放在配置文件中,在使用时载入。
配置文件默认放在configs文件夹中,可以自定义修改文件夹名。
*/

/*
#模板test.conf文件:
#键对应的值可以不用引号括起来
title = Welcome to Smarty!!
cutoff_size = 40

[china]
language = chinese

[england]
language = english

#[china],[england]为标签,未设置标签的键值为全局的只要调用该配置文件就可以在模版中使用,设置了标签的键值只有在调用配置文件时指定了对应标签才可以使用
#在PHP源文件调用配置文件语句$smarty->configLoad('test.conf', $sections = 'england');该语句下面调用的模版才可以使用该配置文件,通过$sections属性指定使用哪个标签下的键和值
#$sections参数可以不写,默认值为null,$smarty->configLoad('test.conf')则只使用全局的键值,而不能使用标签下的键值
#在模版下通过{config_load file="test.conf" section="china" scope="global"}语句调用配置文件
#section属性可以不写,默认是null,scope属性必须写{config_load file="test.conf" scope="global"}
#section属性可赋三种值
#local 只有当前模版可以使用该配置文件
#parent 只有当前模版引入该配置文件语句后包含的模版中,或在php源文件中smarty对象调用该配置文件后调用的模版中可以使用该配置文件中的键值
#global 测试效果和parent相同
#在模版中通过{#language#}来使用键值,也可以通过{$smarty.config.language}来访问配置文件键值
#PHP源文件中可以使用$smarty->getConfigVars('language')或$smarty->getConfigVariable('language')来获取键值,$smarty->getConfigVars('language')获取的还可能是数组
*/


/*
tpl文件中常用函数
tpl文件:
<!--将capture标签括起的页面显示内容存在capture指定的testCapture中 -->
<!--当达到指定条件时可通过 {$smarty.capture.testCapture} 将内容输出出来 -->
{capture}
{include file="f1.tpl"}
{/capture}

{if true}
{$smarty.capture.testCapture}
{/if}

{if $name == "wang"}

Welcome wang.

{elseif $name == "zhang"}

Welcome zhang.

{else}

Welcome, whatever you are.

{/if}
{*操作符可以是 ==,>= 等也可以是 eq,ne等*}

{for $x=0; $x<count($testArr); $x++}
{$x}
{/for}
{*for循环,类似PHP代码*}


{$x=0}
{while $x<count($testArr)}
{$x++}
{/while}
{*While循环,也类似PHP代码。*}


<!--name和key属性可不写-->
{foreach from=$testArr key=arId item=arVal}
{$arId}对应的值为:{$arVal}
<br>
{$smarty.foreach.testForeach.index}   <!--(循环内部使用)显示当前循环的索引,如果数组为空,返回-1-->

{$smarty.foreach.testForeach.iteration}    <!--(循环内部使用)显示当前的循环次数-->

{$smarty.foreach.testForeach.first} <!--(循环内部使用)如果为第一次循环,返回true-->

{$smarty.foreach.testForeach.last} <!--(循环内部使用)如果为最后一次循环,返回true-->

{$smarty.foreach.testForeach.total} <!-(循环内外部使用)显示循环的总次数-->
<br>
{foreachelse}  <!--$testArr数组变量没有值时(0个元素)执行。-->
$testArr is null
{/foreach}

{*也可以如下两种类PHP格式*}
{foreach $testArr as $n}
{$n}
{/foreach}

{foreach $testArr as $key=>$n}
{$key}
{/foreach}

{$sectionArr = [0=>"a",4=>"b","c","d","e",6,7,8,9,10,11,12,13,14,15,16]}
{section loop=$sectionArr start=0 step=4 max=6 show=true}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/7b031633e3c5d788c16c82f55200619e.html