Zend Framework框架Smarty扩展实现方法
本文实例讲述了ZendFramework框架Smarty扩展实现方法。分享给大家供大家参考,具体如下:
今天总结一下ZF框架中扩展Smarty模板的方法,在ZF帮助文档中已经有比较详细的介绍,在这我稍微多说一些。
一.将smarty的核心文件包放在lib文件夹下,文件包中要包括(internals/,plugins/,Config_File.class.php,Smarty.class.php,Smarty_Compiler.class.php,debug.tpl).
二.在Zend/View下添加文件:Smarty.php,文件的内容如下:
<?php
/**
*Zend_View_Interface
*/
require_once'Zend/View/Interface.php';
/**
*Smarty
*/
require_once("smarty/Smarty.class.php");
/**
*创建Smarty视图
*/
classZend_View_SmartyimplementsZend_View_Interface
{
/**
*Smartyobject
*@varSmarty
*/
protected$_smarty;
/**
*Constructor
*
*@paramstring$tmplPath
*@paramarray$extraParams
*@returnvoid
*/
publicfunction__construct($tmplPath=null,$extraParams=array())
{
$this->_smarty=newSmarty;
if(null!==$tmplPath){
$this->setScriptPath($tmplPath);
}
foreach($extraParamsas$key=>$value){
$this->_smarty->$key=$value;
}
}
/**
*Returnthetemplateengineobject
*
*@returnSmarty
*/
publicfunctiongetEngine()
{
return$this->_smarty;
}
/**
*Setthepathtothetemplates
*
*@paramstring$pathThedirectorytosetasthepath.
*@returnvoid
*/
publicfunctionsetScriptPath($path)
{
if(is_readable($path)){
$this->_smarty->template_dir=$path;
return;
}
thrownewException('Invalidpathprovided');
}
/**
*setsmarty缓存
*@authorlengfeng
*/
publicfunctionsetCompilePath($path){
if(is_readable($path)){
$this->_smarty->compile_dir=$path;
return;
}
thrownewException('Invalidpathprovided');
}
/**
*setsmarty编译后文档
*@authorlengfeng
*/
publicfunctionsetCachePath($path){
if(is_readable($path)){
$this->_smarty->cache_dir=$path;
return;
}
thrownewException('Invalidpathprovided');
}
/**
*Retrievethecurrenttemplatedirectory
*
*@returnstring
*/
publicfunctiongetScriptPaths()
{
returnarray($this->_smarty->template_dir);
}
/**
*AliasforsetScriptPath
*
*@paramstring$path
*@paramstring$prefixUnused
*@returnvoid
*/
publicfunctionsetBasePath($path,$prefix='Zend_View')
{
return$this->setScriptPath($path);
}
/**
*AliasforsetScriptPath
*
*@paramstring$path
*@paramstring$prefixUnused
*@returnvoid
*/
publicfunctionaddBasePath($path,$prefix='Zend_View')
{
return$this->setScriptPath($path);
}
/**
*Assignavariabletothetemplate
*
*@paramstring$keyThevariablename.
*@parammixed$valThevariablevalue.
*@returnvoid
*/
publicfunction__set($key,$val)
{
$this->_smarty->assign($key,$val);
}
/**
*Retrieveanassignedvariable
*
*@paramstring$keyThevariablename.
*@returnmixedThevariablevalue.
*/
publicfunction__get($key)
{
return$this->_smarty->get_template_vars($key);
}
/**
*Allowstestingwithempty()andisset()towork
*
*@paramstring$key
*@returnboolean
*/
publicfunction__isset($key)
{
return(null!==$this->_smarty->get_template_vars($key));
}
/**
*Allowsunset()onobjectpropertiestowork
*
*@paramstring$key
*@returnvoid
*/
publicfunction__unset($key)
{
$this->_smarty->clear_assign($key);
}
/**
*Assignvariablestothetemplate
*
*Allowssettingaspecifickeytothespecifiedvalue,ORpassinganarray
*ofkey=>valuepairstosetenmasse.
*
*@see__set()
*@paramstring|array$specTheassignmentstrategytouse(keyorarrayofkey
*=>valuepairs)
*@parammixed$value(Optional)Ifassigninganamedvariable,usethis
*asthevalue.
*@returnvoid
*/
publicfunctionassign($spec,$value=null)
{
if(is_array($spec)){
$this->_smarty->assign($spec);
return;
}
$this->_smarty->assign($spec,$value);
}
/**
*Clearallassignedvariables
*
*ClearsallvariablesassignedtoZend_Vieweithervia{@linkassign()}or
*propertyoverloading({@link__get()}/{@link__set()}).
*
*@returnvoid
*/
publicfunctionclearVars()
{
$this->_smarty->clear_all_assign();
}
/**
*Processesatemplateandreturnstheoutput.
*
*@paramstring$nameThetemplatetoprocess.
*@returnstringTheoutput.
*/
publicfunctionrender($name)
{
return$this->_smarty->fetch($name);
}
/**
*设置是否生成缓存
*如果没有参数,默认为true
*/
publicfunctionsetCache($bool){
if(isset($bool)){
$this->_smarty->caching=$bool;
return;
}
}
}
三.在app文件夹下创建cache,compile文件夹
四.在config.ini配置文件中加入
dir.compile=../app/compile dir.cache=../app/cache
三,四两步可以参见前面关于zendfreamwork框架搭建网站相关教程
五.在application.php文件中添加
/**
*初始化smarty视图
*
*/
privatefunction_initSmartyView()
{
$view=newZend_View_Smarty();
$view->setBasePath($this->_pathConfig->dir->viewBase);
$view->setScriptPath($this->_pathConfig->dir->viewBase."/scripts");
$view->setCompilePath($this->_pathConfig->dir->compile);
$view->setCachePath($this->_pathConfig->dir->cache);
$smarty=$view->getEngine();
$smarty->caching=false;
$smarty->debugging=true;
$smarty->compile_check=true;
$smarty->left_delimiter="<{";//定义标示符
$smarty->right_delimiter="}>";
$registry=Zend_Registry::getInstance();
$registry->set('smartyview',$smarty);//smarty对象
$registry->set('sview',$view);
}
并在函数init()中加入
$this->_initSmartyView();
六.在Controller中调用
因为已经将对象注册,所以可以如下调用:
$view=Zend_Registry::getInstance()->get("smartyview");
//注意这是smarty对象,使用smarty的那些语法,比如$view->assign("user","root");
$view=Zend_Registry::getInstance()->get("sview");
//这是zf的view对象,按zf中的那些方法用,不用改变。
//按这样,你如果要将以前写的代码改为用smaty,后台不用变了,只需要将视图文件改变就行了
更多关于zend相关内容感兴趣的读者可查看本站专题:《ZendFrameWork框架入门教程》、《php优秀开发框架总结》、《Yii框架入门及常用技巧总结》、《ThinkPHP入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家基于ZendFramework框架的PHP程序设计有所帮助。