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程序设计有所帮助。