smarty学习笔记(01)——小模板

smarty应用场景,看如下代码,是刚学习php时常见的写作方式:

1.php代码连接数据库
2.php取出数据
3.php和html混杂输出

/****
//模拟取出数据库
$conn = mysql_connet();
$sql = select * from...
****/

php跟html分离

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <p><?php echo '<p>', $content; '</p>' ?>
</body>
</html>
<?php 
/****
//模拟取出数据库
$conn = mysql_connet();
$sql = select * from...
****/
$title = '两会召开';
$content = '好会议,好房子,好奶粉';

include('./01temp.html');

?>

此时,以上html里的php只负责恶臭,且只echo数据,因此,可以说,我们已经完成业务(取数据,操作数据的过程)与表现html布局,css分离。即controller与view的分离。
如果看着模板里的<?php 标签还不舒服,可以使用smarty,进一步分离。把php代码换成{}的形式。

学习smarty的意义:1.因为模板用的非常广泛。2.体会模板的思想。

smarty的两个大版本:3 和 2.6
区别:2.6是php4时代的写作风格。smarty3是纯面向对象的写作风格。
模板类的第一步:把标签解析php输出语句。模板文件–>php文件。为了目录清晰,我们吧模板和编译后的结果,放在不同的目录里,用2个属性来记录2个目录。

<?php 
//mini.php
class mini {
    public $template_dir = ' '; // 模板文件所在的位置
    public $compile_dir = ' '; // 模板编译后存放

    // 定义一个数组,用来接收外部的变量
    public $_tpl_var = array();

    public function assign($key,$value){
        $this->_tpl_var[$key] = $value;
    }
    /*
        string $template 模板名
        作用:调用compile来编译模板名,并自动引入
    */
    public function display($template){
        $comp = $this -> compile($template);
        include($comp); // 把页面的全局变量赋到对象内部,比如属性上,对象的方法访问属性就没问题了。

    }

    /****
        string $template 模板文件名
        return String
        流程:把指定的模板内容都出来,再编译成php
    ****/

    public function compile ($template){

        // 读出模板内容
        $temp = $this ->template_dir . '/' . $template;
        $source = file_get_contents($temp);
        // echo $source;

        //再把编译后的内容保存php文件
        $comp = $this -> compile_dir . '/' . $template . '.php';

        // 判断模板是否已经存在
        if(file_exists($comp) && filemtime($temp)< filemtime($comp)){
            return $comp;
        }

        // 替换模板内容
        $source = str_replace('{$','<?php echo $this->_tpl_var[ \'', $source ); //原来的,要替换的,目标字符串
        $source = str_replace('}','\']; ?>',$source);
        // echo $source;


        file_put_contents($comp,$source); // 把$source里的东西放到$comp里面去

        return $comp;
    }
}


?>
<?php 
// 04.php
include('./mini.php');

$mini = new mini();

$mini -> template_dir = './templates';
$mini -> compile_dir = './compile';

$title = '两会召开';
$content = '好会议,好房子,好奶粉';

// echo $mini->compile('04temp.html');

// include($mini->compile('04temp.html'));

$mini->assign('title',$title);
// print_r($mini->_tpl_var); exit;
$mini->assign('content',$content);

$mini->display('04temp.html');
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{$title}</title>
</head>
<body>
    <p>
        {$content}
    </p>
</body>
</html>

总结:
1.把需要显示的全局变量,赋值,塞到对象内部属性上,一个数组里
2. 编译模板,把<$标签>,解析成相应的php echo 代码
3.引入编译后的php文件

使用smarty的步骤:
1.smarty是一个类,要使用,需先实例化
2.assign赋值
3.display[编译到输出]

smarty之辩:
1.编译模板,浪费时间
2.要把变量再重新赋值到对象的属性上,又增大了开销。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值