PHP :: Savant

Posted on 31st January 2005 by Nio in 程序人生

Savant 是使用 PHP 语言编写的轻量级面向对象模板系统,目前已经发布了 2.3.3 版本。

Smarty 模板系统不同,Savant 默认并不对模板进行编译,而是使用 PHP 作为其模板语言,所以你不必去学习新的模板标签即可使用 Savant。

Savant 拥有面向对象系统的模板插件 (template plugins) 输出过滤 (output filters),你可以很快捷方便地往其中添加行为动作。

Savant 还有一套可扩展的错误处理系统。由于使用最小化的外挂错误类,他支持 PEAR_Error、 PEAR_ErrorStack 以及 PHP5 异常。你还可以加入自己的错误处理类来支持喜欢的错误框架系统。Savant 在其标准类中提供了错误处理程序的挂接点。

另外,你还可以自定义模板标签解析器,并将其挂接到 Savant 中。这意味着你可以根据自己的喜好去创建标签,只要你的解析器可以将其转换成 PHP 脚本,Savant 也就可以使用此标签。和错误处理一样,Savant 也提供了模板标签解析器的挂接点,可以很方便地挂接自己编写的解析器。

以简单的书本为例,Model Logic 代码 (books.php) 为:

<?php
// 包含 Savant2 类文件,同时创建对象实例。
require_once 'Savant2.php';
$tpl =& new Savant2();

// 创建标题。
$name = "Some Of My Favorite Books";

// 生成书本作者及书名的数组。
$booklist = array(
    array(
        'author' => 'Hernando de Soto',
        'title' => 'The Mystery of Capitalism'
    ),
    array(
        'author' => 'Neal Stephenson',
        'title' => 'Cryptonomicon'
    ),
    array(
        'author' => 'Milton Friedman',
        'title' => 'Free to Choose'
    )
);

// 模板变量赋值。
$tpl->assign('title', $name);
$tpl->assign('books', $booklist);

// 显示模板。
$tpl->display('books.tpl.php');
?>

View Logic 代码 (books.tpl.php) 为:

<html>
    <head>
        <title><?php echo $this->title ?></title>
    </head>

    <body>     
        <?php if (is_array($this->books)): ?>           
            <!-- A table of some books. -->
            <table>
                <tr>
                    <th>Author</th>
                    <th>Title</th>
                </tr>                
                <?php foreach ($this->books as $key => $val): ?>
                    <tr>
                        <td><?php echo $val['author'] ?></td>
                        <td><?php echo $val['title'] ?></td>
                    </tr>
                <?php endforeach; ?>                
            </table>            
        <?php else: ?>            
            <p>There are no books to display.</p>            
        <?php endif; ?>        
    </body>
</html>

可以看到,在模板文件中并不使用类似 [i]{tag}[/i] 的标签,而是直接用 PHP 输出模板变量,只是使用了 [i]$this[/i],这种方式对于推广应用是很有帮助的,因为你不必像学习 Smarty 的语法那样去学习模板标签的用法,编写模板文件就和编写 PHP 文件一样见到方便。

更多教程示例可以参见Getting Started

1 Comment »

  1. 相应的,美工得懂PHP

    Comment by Cevin — February 24, 2009 @ 4:25 am

Leave a comment