PHP高级 Smarty 第45天

2012-11-17 21:41:42 0  category: 第二阶段php

Smarty模版引擎


初使化Smarty


Libs文件夹下的文件和文件夹:


Internals   主要存放对应的核心解析的代码


Plugins  存放了smarty当中帮你写好的一系列的方法和块函数等


Config_File.class.php配置文件的解释类


debug.tpl调式模版


Smarty.class.phpsmarty核心类


Smarty_Compiler.class.phpsmarty的解析类


初始化一批参数:


/模版目录


$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='}>';


最好将文件路径定义成为常量,并且为绝对路径:


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


注意:


模版文件在模版目录下面划分的时候,最好也按照文件夹的方式来划分,不要一次性全部排列到页面中了。


这样的话看起来更好看,找起来更加方例。


例如:admin 后台的就专门放到admin文件夹下面去,用户的模版专门放到user目录下面去。


因为smarty在操作的时候,只管打开这个文件,读取里面的内容即可,所以后缀是什么无所谓。只要里面存的内容是对的就行。


.tpl  .txt  .php  .dat  .rmvb


分配的时候,可以分配:


整型 字符串 浮点  并且还可以进行运算


布尔值


资源分配没意义,页面当中无法显示资源。只在PHP当中来处理资源


分配空也没意义,用户看不到。


注意:


里面的变量严格区分大小写。


关联数组的分配方式是 $变量.下标名


1.html

<html>
<head>
<title>{$title}</title>
</head>
<body>
<img src="{$img}"/>
<p>{$content}</p>
</body>
</html>


xs.php


<?php
function __autoload($classname)
{
include $classname . '.class.php';
}
$img = 'img/dn.jpg';
$title = '这是美女呀';
$content= '是呀哎呀';

$smarty = new mysmarty;
$smarty->assign('img',$img);
$smarty->assign('title',$title);
$smarty->assign('content',$content);
$smarty->display('1.html');
?>


mysmarty.class.php


<?php
class mysmarty
{
private $vars;

public function assign( $key, $value )
{
$this->vars[$key]=$value;
}
public function display( $tplFile )
{
$fpfile = $tplFile;
$cacheFile = 'cache/' . $fpfile . '.php';

if ( !file_exists( $cacheFile ) ) {
$content = file_get_contents( $tplFile );
$newcontent = $this->replace( $content );
file_put_contents( $cacheFile, $newcontent );
}
include $cacheFile;


}
protected function replace( $content )
{
$pattern = '/\{\$([a-zA-Z_]?[a-zA-Z0-9]+)\}/';
$replace = '<?php echo $this->vars[\\1];?>';
return preg_replace( $pattern, $replace, $content );
}
}
?>


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='}>';
?>


xs.php


<?php

include 'init.php';


class person{
var $name='mysql';
var $sex='php';
var $say='nginx';

function say(){
echo $this->say.'php';
}
}
//分配字符串是阔以地
$tpl->assign('sj','freebsd,nginx,mysql');
//分配整型
$tpl->assign('fp',123);
//分配浮点
$tpl->assign('fd',3.1415926);
$tpl->assign('bool',true);
//分配数组
$erwei=array(array('li','dong'),array('chen','shu'));
$tpl->assign('ew',$erwei);
//分配关联数组
$re=array('qj'=>'php.postgresql','jh'=>'nginx');
$hy=array(
'cf'=>array(
'yx'=>'mysql',
'yy'=>'www.xlxz.org',
'mp'=>'piao.xlxz.php',
),
'fc'=>array(
'iph'=>'eyeos',
'xl'=>'sasasasa',
'tr'=>'tttxx',
'在好',
),
);
$tpl->assign('hy',$hy);
$tpl->assign('re',$re);
$img=array('wy.jpg','1.jpg');
$tpl->assign('im',$img);
//分配对象
$p=new person;
$tpl->assign('ah',$p);
$tpl->display('home/index.tpl');
?>