PHP 中使用 Smarty 之六:Smarty 内建函数

        Smarty 的内建函数:Smarty自带一些内建函数,内建函数是模板语言的一部分,用户不能创建名称和内建函数一样的自定义函数,也不能修改内建函数。

        下面对 Smarty 中的内建函数进行说明,并加以实例:

         实例中使用到的 Smarty 模板引擎初始化文件 init.inc.php 和主文件 index.php

init.inc.php

<?php
    define('ROOT_PATH', dirname(__FILE__));     //设置网站根目录
    require ROOT_PATH.'/libs/Smarty.class.php'; //加载 Smarty 模板引擎
    $_tpl = new Smarty();                       //创建一个实例对象
    $_tpl->template_dir = ROOT_PATH.'/tpl/';    //重新指定模板目录
    $_tpl->compile_dir = ROOT_PATH.'./com/';    //重新指定编译目录
    $_tpl->left_delimiter = '<{';               //重新指定左定界符
    $_tpl->right_delimiter = '}>';              //重新指定右定界符
?>

index.php

<?php 
    require 'init.inc.php';        //引入模板初始化文件
    global $_tpl;
    $_tpl->display('index.tpl');   //引入模板
?>

        1、capture

属性类型是否必须缺省值描述
namestringnodefault数据采集区域名称
assignstringNon/a数据采集区域在哪分配给变量name[待考]

        capture函数的作用是捕获模板输出的数据并将其存储到一个变量里,而不是把它们输出到页面,任何在 {capture name="foo"}和{/capture}之间的数据将被存储到变量$foo中,该变量由name属性指定,在模板中通过 $smarty.capture.foo 访问该变量。如果没有指定 name 属性,函数默认将使用 "default" 作为参数,{capture}必须成对出现,即以{/capture}作为结尾,该函数不能嵌套使用。请看下面的实例模板文件。

/tpl/index.tpl

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Capture</title>
</head>

<body>
     <!-- 定义capture -->
     <{capture name="foo"}>
         这里是 capture 函数里面的内容,默认是不显示的。
     <{/capture}>
     
     <!-- 调用capture,使用的是 Smarty 中的保留变量{$smarty.capture} -->
     <{$smarty.capture.foo}>
</body>
</html>

        2、config_load

属性类型是否必须缺省值描述
filestringYesn/a待包含的配置文件的名称
sectionstringNon/a配置文件中待加载部分的名称
scopestringnolocal加载数据的作用域,取值必须为local, parent 或 global. local 说明该变量的作用域为当前模板. parent 说明该变量的作用域为当前模板和当前模板的父模板(调用当前模板的模板). global 说明该变量的作用域为所有模板.
globalbooleanNoNo说明加载的变量是否全局可见,等同于 scope=parent. 注意: 当指定了 scope 属性时,可以设置该属性,但模板忽略该属性值而以 scope 属性为准。

        config_load 函数用于从配置文件中加载变量,关于 config_load 函数的使用,请看我的《PHP 中使用 Smarty 之二:配置文件在模板变量中的使用。

        3、include

属性类型是否必须缺省值描述
filestringYesn/a待包含的模板文件名
assignstringNon/a该属性指定一个变量保存待包含模板的输出
[var ...][var type]Non/a传递给待包含模板的本地参数,只在待包含模板中有效
        include 函数用于在当前模板中包含其它模板, 当前模板中的变量在被包含的模板中可用. 必须指定 file 属性,该属性指明模板资源的位置。如果设置了 assign 属性,该属性对应的变量名用于保存待包含模板的输出,这样待包含模板的输出就不会直接显示了。请看下面的示例:

/tpl/index.tpl

{include file="header.tpl"}

{* body of template goes here *}

{include file="footer.tpl"}

        4、if,elseif,else

        Smarty 中的 if 语句和 php 中的 if 语句一样灵活易用,并增加了几个特性以适宜模板引擎. if 必须于 /if 成对出现. 可以使用 else 和 elseif 子句。

        可以使用以下条件修饰词:eq、ne、neq、gt、lt、lte、le、gte、ge、is even、is odd、is not even、is not odd、not、mod、div by、even by、odd by、==、!=、>、<、<=、>=. 使用这些修饰词时必须和变量或常量用空格格开。

        下面对这些修饰符表示的意思进行说明:
       

条件修饰符作用描述
eq==
ne!=
neq!=
gt>
lt<
lte<=
le<=
gte>=
ge>=
is even是否偶数
is odd是否奇数
is not even是否不是偶数
is not odd   是否不是奇数
not!=
mod求模
div by是否能被整除
even by商是否是偶数
odd by商是否是奇数
&&
||
()括号改变优先级

   

        5、ldelim 和 rdelim
        用于输出分隔符,也就是大括号 "{" 和 "}". 模板引擎总是尝试解释大括号内的内容,因此如果需要输出大括号,请使用此方法。请看下面的示例:

/tpl/index.tpl

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>ldelim 和 rdelim</title>
</head>

<body>
    
    <{ldelim}>funcname<{rdelim}> 是 Smarty 中的一个函数。

    <!-- 执行结果: <{funcname}> 是 Smarty 中的一个函数。 -->
    
</body>
</html>

        6、literal

        literal 标签区域内的数据将被当作文本处理,此时模板将忽略其内部的所有字符信息. 该特性用于显示有可能包含大括号等字符信息的 javascript 脚本. 当这些信息处于 {literal}{/literal} 标签中时,模板引擎将不分析它们,而直接显示,其实按照我的所有例子中的标签风格(因为在 init.inc.php 初始化文件中已经重新设置了左定界符和右定界符),而不是 Smarty 的默认风格,基本上不会产生这种情况。关于该函数的使用,请看下面的示例

/tpl/index.tpl

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>literal</title>
</head>

<body>
    
    <{literal}>
    <script language=javascript>

         <!--
             window.alert(new Date());
          -->

    </script>
    <{/literal}>
    
</body>
</html>

       7、php

        php 标签允许在模板中直接嵌入 php 脚本,此标签会把标签内部的内容当成 PHP 脚本进行解析执行。请看下面的示例

/tpl/index.tpl

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>php</title>
</head>

<body>
    
    <{php}>
        echo date("Y-m-d H:i:s");
    <{/php}>
    
    <!-- 执行结果: 2011-10-24 04:35:03 -->
</body>
</html>

        8、strip

        Web 开发者多次遇到空格和回车影响HTML输出的情形,为了得到特定的结果,因此你不得不在模板里运行所有的标签. 通常在难以理解或难以处理的模板中遇到此问题。Smarty 在显示前将除区任何位于 {strip}{/strip} 标记中数据的首尾空格和回车. 这样可以保证模板容易理解且不用担心多余的空格导致问题。


        好了, Smarty 模板引擎中的内建函数先总结这么多,关于内建函数中两个最重要的函数(foreach,foreachelse、section,sectionelse)的使用,将在下面的进行整理。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值