PHP高级 Smarty 第46天

2012-11-17 22:06:35 0  category: 第二阶段php

如何分配函数?


$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}>