PHP高级 Smarty 第45天

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');
?>