`
ranfow
  • 浏览: 29679 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

用Smarty作为Zend Framework的视图

    博客分类:
  • PHP
阅读更多

一个优秀模板与一个优秀框架的结合。
首先用Smarty实现View的接口。
Smarty.php:

<?php
/**
 * Smarty.php
 * Smarty视图类
 * created by ranfow(ranfow@qq.com)
 * 2008-08-19
 */
require_once 'Zend/View/Interface.php';
require_once 'Smarty/Smarty.class.php';

class Zend_View_Smarty implements Zend_View_Interface
{
    /**
     * Smarty object
     * @var Smarty
     */
    protected $_smarty;

    /**
     * Constructor
     *
     * @param string $tmplPath
     * @param array $extraParams
     * @return void
     */
    public function __construct($tmplPath = null, $extraParams = array())
    {
        $this->_smarty = new Smarty;

        if (null !== $tmplPath) {
            $this->setScriptPath($tmplPath);
        }

        foreach ($extraParams as $key => $value) {
            $this->_smarty->$key = $value;
        }
    }

    /**
     * Return the template engine object    
     *
     * @return Smarty
     */
    public function getEngine()
    {
        return $this->_smarty;
    }

    /**
     * Set the path to the templates
     *
     * @param string $path The directory to set as the path.
     * @return void
     */
    public function setScriptPath($path)
    {
        if (is_readable($path)) {
            $this->_smarty->template_dir = $path;
            return;
        }

        throw new Exception('Invalid path provided');
    }

    /**
     * Retrieve the current template directory
     *
     * @return string
     */
    public function getScriptPaths()
    {
        return array($this->_smarty->template_dir);
    }

    /**
     * Alias for setScriptPath
     *
     * @param string $path
     * @param string $prefix Unused
     * @return void
     */
    public function setBasePath($path, $prefix = 'Zend_View')
    {
        return $this->setScriptPath($path);
    }

    /**
     * Alias for setScriptPath
     *
     * @param string $path
     * @param string $prefix Unused
     * @return void
     */
    public function addBasePath($path, $prefix = 'Zend_View')
    {
        return $this->setScriptPath($path);
    }

    /**
     * Assign a variable to the template
     *
     * @param string $key The variable name.
     * @param mixed $val The variable value.
     * @return void
     */
    public function __set($key, $val)
    {
        $this->_smarty->assign($key, $val);
    }

    /**
     * Retrieve an assigned variable
     *
     * @param string $key The variable name.
     * @return mixed The variable value.
     */
    public function __get($key)
    {
        return $this->_smarty->get_template_vars($key);
    }

    /**
     * Allows testing with empty() and isset() to work
     *
     * @param string $key
     * @return boolean
     */
    public function __isset($key)
    {
         return (null !== $this->_smarty->get_template_vars($key));
    }

    /**
     * Allows unset() on object properties to work
     *
     * @param string $key
     * @return void
     */
    public function __unset($key)
    {
        $this->_smarty->clear_assign($key);
    }

    /**
     * Assign variables to the template
     *
     * Allows setting a specific key to the specified value, OR passing an array
     * of key => value pairs to set en masse.
     *
     * @see __set()
     * @param string|array $spec The assignment strategy to use (key or array of key
     * => value pairs)
     * @param mixed $value (Optional) If assigning a named variable, use this
     * as the value.
     * @return void
     */
    public function assign($spec, $value = null)
    {
        if (is_array($spec)) {
            $this->_smarty->assign($spec);
            return;
        }

        $this->_smarty->assign($spec, $value);
    }

    /**
     * Clear all assigned variables
     *
     * Clears all variables assigned to Zend_View either via {@link assign()} or
     * property overloading ({@link __get()}/{@link __set()}).
     *
     * @return void
     */
    public function clearVars()
    {
        $this->_smarty->clear_all_assign();
    }

    /**
     * Processes a template and returns the output.
     *
     * @param string $name The template to process.
     * @return string The output.
     */
    public function render($name)
    {
        return $this->_smarty->fetch($name);
    }
    
    /**
     * Processes a template and display it to the browser.
     *
     * @param string $name The template to process.
     */
    public function display($name)
    {
            return $this->_smarty->display($name);
    }
}

初始化:

$smarty = new Zend_View_Smarty("./templates", array (
    "compile_dir"     => "./templates_c",
    "cache_dir"       => "./cache",
    "config_dir"      => "./config",
    "left_delimiter"  => "{{",
    "right_delimiter" => "}}"
));

模板index.tpl:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>{{$title}}</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </head>
    <body>
    {{$name}}
    </body>
</html>

赋值、解释并输出:

......
$smarty->title = 'test';
$smarty->name = 'ranfow';
 // $smarty->display('index.tpl');       // 这种为直接输出
 $rendered = $smarty->render('index.tpl');
 echo $rendered;
......
分享到:
评论

相关推荐

    php-smarty 还有zend framework

    而Zend Framework则作为整个应用的架构基础,负责处理请求、路由、模型与数据交互,以及视图的渲染(可以与Smarty结合使用)。开发者可以利用Zend Framework的强大功能来构建复杂的业务逻辑,同时使用Smarty来提供...

    Zend Framework+smarty用法实例详解

    7. 集成Smarty模板引擎:在index.php中配置Zend Framework的前端控制器,使用setParam方法关闭框架自带的视图渲染器,并将Smarty库文件放置在合适的目录中。 8. 开发视图文件:在模板目录中创建Smarty模板文件,...

    Zend Framework实现Zend_View集成Smarty模板系统的方法

    总结起来,通过实现`Zend_View_Interface`,我们可以轻松地将Smarty模板引擎整合到Zend Framework项目中,实现视图层的灵活扩展。这种灵活性是Zend Framework设计的一部分,它允许开发者选择最适合他们项目的视图...

    ZendFramework整合Smarty简易方法

    本文将详细介绍如何在Zend Framework项目中集成并使用Smarty模板引擎。 #### 二、准备工作 在开始整合之前,请确保已经安装了以下组件: - PHP环境 - Zend Framework - Smarty模板引擎 确保以上环境都已安装完毕...

    基于zend Framework的购物车系统的实现

    4. **视图**:通过模板引擎,如 Smarty 或 Zend View,渲染购物车页面,显示商品列表、购物车内容、订单详情等。 5. **数据库交互**:使用 Zend_Db 组件,实现对 MySQL 数据库的操作,创建相应的数据表,如商品表、...

    zendframework+smarty+ajax经典实例

    在《zendframework+smarty+ajax经典实例》中,Ajax的应用可能体现在chapter-09.zip和chapter-11.zip,涵盖了如何在Smarty模板中嵌入Ajax代码,以及如何与Zend Framework的控制器交互,实现实时数据交换。 此外,...

    已配置好的多模块多模板Zend Framework

    【描述】"最近项目要用Zend Framework,在网上找了很多资料才配置好,虽然有很多不足,但还是发出来分享一下。" 配置多模块多模板的Zend Framework并不简单,通常需要对MVC(模型-视图-控制器)架构有深入理解。...

    Zend Framework 1.8 Web Application Development

    - **模块化设计**:Zend Framework 的组件可以独立使用或组合在一起,为开发者提供了高度的灵活性。 - **遵循 PHP 和 Web 标准**:该框架严格遵循 PHP 和 Web 标准,如 PHP 编程最佳实践、SOAP、Atom、RSS、JSON、...

    php zend framework code

    PTML 可能是指 `Zend Framework` 中的视图脚本标记语言,类似于 Smarty 或其他模板引擎。它允许开发者将 PHP 代码与 HTML 结合,以创建动态页面。PTML 通过分离表现层和逻辑层,使开发者可以专注于布局和设计,而...

    zendframework中文手册2010

    综上所述,"zendframework中文手册2010"提供了全面的 Zend Framework 学习资源,无论是初学者还是经验丰富的开发者,都能从中受益,提升PHP编程技能。通过深入学习和实践,可以有效地利用 Zend Framework 构建高质量...

    zend frmarwork + smarty 的整合

    描述中提到,这是一个作者自整理的完整实例项目,通过整合Smarty,去掉了Zend Framework中的默认视图层,完全使用Smarty来处理视图渲染。这表明项目着重展示了如何在Zend Framework中替代原有的视图系统,利用Smarty...

    PHP5应用实例详解:使用Zend Framework & smarty构筑真正的MVC模式应用 源码

    本实例教程专注于使用PHP5结合两个强大的框架——Zend Framework和Smarty,来构建基于MVC(Model-View-Controller)模式的应用程序。MVC模式是软件工程中的一种设计模式,它将业务逻辑、数据和用户界面分离,提高了...

    Smarty jquery_api Zend_Framework_zh

    标题 "Smarty jquery_api Zend_Framework_zh" 涵盖了三个关键的IT技术:Smarty、jQuery API和Zend Framework,这些都是Web开发中非常重要的组件。这些技术的中文版本表示它们是针对中文用户群体,方便国内开发者学习...

    Beginning Zend Framework [PHP] (Apress 2009).pdf

    作为一款广泛使用的PHP框架,Zend Framework在Web开发领域扮演着重要的角色。本书通过系统性的讲解,帮助读者掌握如何使用Zend Framework来构建专业级的Web应用程序。 #### 二、Zend Framework简介 ##### 2.1 定义...

    Zend Framework框架Smarty扩展实现方法

    这样,Zend Framework在渲染视图时就会使用Smarty作为其模板引擎。这个设置可以让开发者利用Smarty提供的模板变量、模板继承、自定义函数等特性,同时享受Zend Framework的MVC架构优势。 在集成过程中,还需注意几...

    (zf2)zend framework 2官方文档pdf

    #### 十二、Zend Framework Tool (ZFTool) ZFTool是一个辅助工具,可以方便地管理和执行ZF2应用程序的各种任务。 ##### 12.1 通过Composer安装 - 添加`zf/tool`作为项目依赖。 - 运行安装命令。 ##### 12.2 手动...

    Zend_Framework_mvc设计模式

    此外,还可以选择使用其他模板引擎,如Smarty或PHPTAL等。 ##### 控制器(Controller) 控制器是处理用户请求的核心组件。在Zend Framework中,控制器通常由`Zend_Controller_Action`类实现。控制器负责解析用户的...

    基于Zend Framework 制作的博客

    在本项目中,"基于Zend Framework+smarty 制作的博客"是一个适合初学者实践和学习的案例。它融合了这两个强大的工具,展示了如何利用它们创建一个功能完备的博客系统。 1. ** Zend Framework 的核心概念:** - **...

    zend+framework技术大全前十章

    在这一章,我们将学习 Zend\View 视图渲染系统,包括如何编写模板、使用视图助手以及如何实现布局。还将介绍如何使用PHP模板引擎如Smarty或Twig,以提升视图的可读性和可维护性。 ### 第九章:缓存与性能优化 了解 ...

Global site tag (gtag.js) - Google Analytics