• Smarty3配置及入门语法


    一.Smarty3配置

    下载Smarty文件

    在Smarty的官方网站下载Smarty文件,解压下载到的Smarty文件,Smarty的库文件就在libs文件夹中。

    我使用的PHP调试环境的程序集成包是phpstudy,默认在D盘会有一个WWW的文件夹,在WWW文件夹中创建一个testSmarty的文件夹,testSmarty文件夹就是本次练习Smarty的项目根目录。在testSmarty中创建一个smarty的文件夹,并将libs中的文件复制到这个smarty文件夹中。目录结构如下:

    Smarty配置

    在testSmarty文件夹中创建一个test文件夹,在这个文件夹中创建一个config.php文件,内容如下:

    <?php
    header("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文件夹。

    目录如下:

    检验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 Smarty,则说明Smarty配置成功。

    二.入门语法

    界定符

    Smarty的标签是位于界定符之间,默认界定符是{和},界定符是可以改变的。在配置文件中对界定符进行修改,如下:

      //将左界定符改为#

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

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

    注释

    注释是以*开头*结尾的,外面包着界定符,如下:

    {* 这儿是注释 *}

    输出变量

    //向要渲染的模板传递值

    $smarty->assign('变量名',值)

    传递的值可以是字符串,数组也能是对象。

    当变量是字符串时,{$变量名}表示输出变量。

    当变量是数组时,输出变量的方式有两种,分别为:

      a.{$arr.key}

      b.{$arr['key']}

    当是一个对象时,可以直接通过obj->method(),调用对象的方法

    条件判断

    条件判断的基本句式如下:

    {if $variable 条件修饰符 value1}
        //some
    {elseif $variable 条件修饰符 value2}
        //some
    {else}
        //some
    {/if}

    基本的条件修饰符有:eq(等于),neq(不等于),gt(大于),lt(小于),lte(小于等于),gte(大于等于)。修饰符前后要有空格

    循环

    Smarty中有两种循环,分别是foreach,section,for和while

    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文件,内容如下:

    <?php
    require ('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>

    foreach循环

    foreach循环比section循环要简单,foreach的语法与php中foreach的语法很像,foreach可以做到任何section做到的功能,并且foreach更简单

    {foreach $arrayvar as $itemvar}

    {foreach $arrayvar as $keyvar=>$itemvar}

    例子如下:

    在test文件夹中创建foreach.php文件,文件内容如下:

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

    在tpl文件夹中创建foreach.tpl文件,内容如下:

    <ul>
        {foreach $articles as $article}
            <li>
                {$article.title}
                <p>{$article.name}</p>
                <p>{$article.content}</p>
            </li>
            {foreachelse}
            <p>没有文章</p>
        {/foreach}
    </ul>

    for循环

    for循环用于创建一个简单的循环,语法如下:

    {for $variable = $startValue to $entValue step $step}

    {for $i = 0 to 10 step 2}
        {$i}
    {foreach}
    不能进行循环
    {
    /for}

    step可以不指定,默认循环的步长是1。for还可以指定一个max属性,max属性用于指定循环的次数

    与foreach循环类似,for循环也有一个forelse。{forelse}在循环不能遍历的时候执行

    while循环

    Smarty的while循环与php中的while循环类似,语法如下:

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

    在循环中使用{break}可以停止循环,{continue}退出当前循环进入下一次循环

    插件

    Smarty插件的实质是函数,插件的类型有三种,分别是function插件,modifier插件(变量调节插件),block插件

    使用插件

    function插件的使用:{funcName param1 = value...}

    modifier插件的使用:{$variable | modifierName:param1...}

    block插件的使用:

    {blockName param1 = value...}

      {$content}

    {/blockName}

    如:

    //function插件的使用
    {include file='header.tpl'}
    //modifier插件的使用
    {'abc'|cat:'d'}
    //block插件的使用
    {textformat wrap = 10}
    abc def
    ghikj lmn
    {/textformat}

    制作插件

    制作插件的方式有三种

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

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

    3.PHP内置函数可以自动的以修饰插件(变量调节插件)的形式在模板中使用

    使用registerPlugin函数注册自定义插件,例子如下

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

    <?php
    require ('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,第二个参数指注册的Smarty function插件名,第三个参数指自定义函数名,第二个参数和第三个参数可以相同。

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

    通过网Plugins文件夹中添加文件的方式制作插件

    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中的第一个参数中。

  • 相关阅读:
    JavaScript界面传值与前后台互调
    @requestBody注解的使用
    mybatis动态sql中foreach标签的使用
    mybatis动态SQL中的sql片段
    mybatis动态sql中where标签的使用
    mybatis动态sql中的trim标签的使用
    mybatis动态SQL中的set标签的使用
    SQL-join(inner join)、left join、right join、full join
    Oracle-distinct()用法、count(distinct( 字段A || 字段B))是什么意思?distinct多个字段
    Oracle-where exists()、not exists() 、in()、not in()用法以及效率差异
  • 原文地址:https://www.cnblogs.com/QxQstar/p/6426160.html
Copyright © 2020-2023  润新知