PHP高级 Smarty 第46天

如何分配函数?


$tpl->register_function('模版当中使用的名称','在当前文件当中的函数名');


如何在模版当中使用函数?


<{ 函数名 参数=''  参数=''  参数=''}>


在我们自己写的自定义函数当中,所有的参数全部放到一个形参当中.


参数全部放到形参$args当中

Function demo($args){

}


Smarty为我们准备好的一些内建函数:

config_load


第一步,在configs目录当中写一个配置文件,写配置文件的时候,对于里面的文字这些玩意儿都不要加引号


第二步,在模版当中使用配置文件,第一步config_load载入配置文件


第三步,使用<{#配置文件名#}>


注意:不要写成这个样子<{#  joke#}>


Include这个内函数数:


1,如果header.tpl当中已经存在<body>这样的标签,你就别再写body这样的标签了


2,定位包含文件的时候,要注意:在包含文件的时候,是以模版目录作为起启口来写包含文件的路径


3,你需要做的事情是对你display() 的页面负责,把包含的文件,也当成你dipslay文件当中的一个部份,不需要单独操作共用文件例如header.tplfooter.tpl

Include_php 很少使用,或者基本不用


基本语法当中的注释:

<{*  中间写内容 * }>   smarty中的注释,这种注释,右键看不到内容

<!– 注释的内容  –>    右键查看源代码可以看到内容


smarty的函数当中:

1<{table  cols="10" rows="10"}>  

2,块状函数

<{if}>

<{/if}>


Smarty双引号当中以直接插入变量:


可以把php文件当中分配的变量,直接放在模板的参数的双引号当中,当成变量来使用。


Smarty中反引号的使用:


在引号中,使用变量的关联数组的时候使用反引号,将关联数组给包起来。

声明变量调节器:


1,声明一个函数,函数当的第一个参数为传进来变量,第二个参数到第n个参数,为:后面的值,一一对应的关系


2,最后要记得返回一个数据


3,可以一次性使用多个变量调节器,多个变量调节器之间用|分格

系统保留变量:

$smarty.now   即为当前时间邮戳

$smarty.get.名称

$smarty.post.名称

$smarty.cookies.username

$smarty.session.id

$smarty.request.username

$smarty.server.REMOTE_ADDR


读取常量:

<{$smarty.const.DB_HOST}>


读取配置文件有两种用法:

<{#配置文件项#}>

<{$smarty.config.名字}>


显示当前模版的位置:

<{$smarty.template}>


capture

给它取个名字,将包着的内容不显示,通过

<{$smarty.capture.名字}>反复读取,反复调用


自定义块标签

与你的自定义函数基本上是一样的

1,自定义块函数,需要放两个参数。第一个为参数,第二个为块包起来的内容

2,在写的时候,加上一个isset()判断一下有没有内容,如果没有内容,则不处理


3,一定要用register_block去注册一次块

自定义smarty插件:


自定义函数插件:


1function.名字.php


2,在里面写函数的时候用法为 smarty_function_函数名


3,在自定义函数的时候,不需要引用&$smarty,但是自己定义smarty函数插件的时候,需要传入两个参数,第一个参数为 形参,第二个参数&$smarty.

init.php

<?php
    define('ROOT',str_replace('\\','/',dirname(__FILE__)).'/');

    include 'libs/Smarty.class.php';

    $tpl=new Smarty();

    //模版目录
    $tpl->template_dir=ROOT.'tpls/';
    //编译后的文件目录
    $tpl->compile_dir=ROOT.'tpls_c/';
    //配置文件目录
    $tpl->config_dir=ROOT.'configs/';
    //开启缓存
    $tpl->caching=0;
    //缓存目录
    $tpl->cache_dir=ROOT.'caches/';
    //缓存有效期,如果写具体值,在注释里面标名计算方式和多长时间
    $tpl->cache_lifetime=60*60;
    //左右定界符
    $tpl->left_delimiter='<{';
    $tpl->right_delimiter='}>';
?>

include.php

<?php
    include 'init.php';
    $tpl->assign('title','this is title');
    $tpl->assign('nav','nav.la');
    $tpl->assign('content','content这样吧?');
    $tpl->assign('footer','foott.la');
    $tpl->display('admin/admin.tpl');
?>

admin/admin.tpl

<{include file="admin/header.tpl"}> 

        <{$content}><br />

<{include file="admin/footer.tpl"}>

admin/header.tpl

<html>
    <head>
        <title><{$title}></title>
    </head>

    <body>
        <{$nav}><br />

footer.tpl

        <{$footer}><br />

    </body>

</html>

block.php

<?php
    include 'init.php';
    $tpl->register_block('myblock','demo');
    function demo($args,$content){
        var_dump($args);
        if(isset($content)){
            for($i=0;$i<$args['num'];$i++){
                echo '<font color="'.$args['color'].'">'.$content.'</font><br />';
        }
        }
    }
    $tpl->display('home/block.tpl');
?>

block.tpl

<{myblock num=5 color="red"}>

    this is php.xlxz.org

<{/myblock}>

<{table rows='5' cols=5}>

index.php

<?php
include 'init.php';

$tpl->register_function('hello','demo');

$tpl->register_function('table','myTable');

$tpl->register_function('print','test');

function test($args){

    echo '<font color="'.$args['color'].'" size="'.$args['size'].'">'.$args['string'].'</font>';

}

function myTable($args){

    echo '<table width="800" border="1">';
    for($i=0;$i<$args['rows'];$i++){
        if($i%2){
            echo '<tr bgcolor="'.$args['twocolor'].'">';
        }else{
            echo '<tr bgcolor="'.$args['onecolor'].'">';
        }

        for($j=0;$j<$args['cols'];$j++){
            echo '<td>'.($i*$args['cols']+$j).'</td>';

        }

        echo '</tr>';

    }
    echo '</table>';

}

function demo($args){

    for($i=0;$i<$args['num'];$i++){

        echo '<font color="'.$args['color'].'">'.$args['string'].'</font><br />';
    }

}

$arr=array(
    'ai'=>'haha',
    'why'=>'this',
    'tajiu'=>'nginx'
);

$tpl->assign('string',$arr);
$tpl->display('home/abc.tpl');
?>

home/abc.tpl

<html>

<body>

<{table cols="10" rows="10"  twocolor="green"  onecolor="pink"}>

<{print string='opds `$string.ai` ' color='green' size='7'}>

</body>

</html>

modifier.php

<?php

    include 'init.php';

    $tpl->register_modifier('upper','myUpper');

    function myUpper($data,$a){

        if($a){

            return strtoupper($data);

        }else{

            return $data;
        }
    }

    $tpl->register_modifier('concat','concat');

    function concat($data,$string='',$string1=''){

        $string=$string?$string:'';
        $string1=$string1?$string1:'';

        $data=$data.$string.$string1;

        return $data;
    }

    $tpl->register_modifier('myDate','myDate');

    function myDate($data,$string){

        return date($string,$data);

    }

    $tpl->register_modifier('msubstr','msubstr');

function msubstr($str, $start=0, $length, $charset="utf-8", $suffix='...')
{
    if(function_exists("mb_substr"))
        return mb_substr($str, $start, $length, $charset).$suffix;
    elseif(function_exists('iconv_substr')) {

        return iconv_substr($str,$start,$length,$charset).$suffix;
    }

    $re['utf-8']   = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
    $re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";
    $re['gbk']    = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";
    $re['big5']   = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";
    preg_match_all($re[$charset], $str, $match);
    $slice = join("",array_slice($match[0], $start, $length));
    $slice.=$suffix;
    return $slice;
}

    $tpl->assign('test','how  old are you?');

    $tpl->assign('nu','postgresql');

    $tpl->assign('string','pppp');

$tpl->assign('cust_ids', array(1000,1001,1002,1003));
$tpl->assign('cust_names', array('Joe Schmoe','Jack Smith','Jane
Johnson','Carlie Brown'));
$tpl->assign('customer_id', 1001);
    $tpl->display('home/upper.tpl');
?>

upper.tpl

<html>

    <head>

    </head>
    <body>
        <{$test|concat:'dongtian':'shui'|upper:true}>
        <{$smarty.now|myDate:'Y-m-d H:i:s'}><br>
        <{$nu|default:'dodo'}><br>
        <{$string|msubstr:5:10}>
        <{mailto address='php@xlxz.org' text='lianix' subject='email title'}>
        <{html_image file="img/1.jpg"}>
<select name=customer_id>
    <{html_options values=$cust_ids selected=$customer_id output=$cust_names}>
</select>
    </body>
</html>

option.php

<?php
    include 'init.php';
$array=array(
    'bj'=>'bj',
    'sh'=>'sh',
    'tj'=>'tj',
    'cq'=>'cq',
    'sc'=>'sc',
);
$tpl->assign('option',$array);
$tpl->register_function('myoption','myOption');
function myOption($args){
    echo '<select name="'.$args['name'].'">';

    $i=0;
    foreach($args['param'] as $key=>$value){

        if($i==$args['selected']){

            $selected='selected';
        }else{
            $selected='';
        }
        $i++;
        echo '<option value="'.$key.'" '.$selected.'>'.$value.'</option>';
    }
    echo '</select>';
}
$tpl->display('home/op.html');
?>

home/op.html

<{myoption param="$option" name="area" selected=2}>