Zend Framework实现Zend_View集成Smarty模板系统的方法
本文实例讲述了ZendFramework实现Zend_View集成Smarty模板系统的方法。分享给大家供大家参考,具体如下:
Zend_View抽象出了Zend_View_Interface,可以让我们集成不同的视图解决方案,例如可以集成smarty。要在zend中使用其他视图系统作为视图,只要实现Zend_View_Interface接口即可。
Zend_View_Interface的接口定义:
<?php /** *InterfaceclassforZend_Viewcompatibletemplateengineimplementations * *@categoryZend *@packageZend_View *@copyrightCopyright(c)2005-2011ZendTechnologiesUSAInc.(http://www.zend.com) *@licensehttp://framework.zend.com/license/new-bsdNewBSDLicense */ interfaceZend_View_Interface { /** *Returnthetemplateengineobject,ifany * *Ifusingathird-partytemplateengine,suchasSmarty,patTemplate, *phplib,etc,returnthetemplateengineobject.Usefulforcalling *methodsontheseobjects,suchasforsettingfilters,modifiers,etc. * *@returnmixed */ publicfunctiongetEngine(); /** *Setthepathtofindtheviewscriptusedbyrender() * *@paramstring|arrayThedirectory(-ies)tosetasthepath.Notethat *theconcreteviewimplentationmaynotnecessarilysupportmultiple *directories. *@returnvoid */ publicfunctionsetScriptPath($path); /** *Retrieveallviewscriptpaths * *@returnarray */ publicfunctiongetScriptPaths(); /** *Setabasepathtoallviewresources * *@paramstring$path *@paramstring$classPrefix *@returnvoid */ publicfunctionsetBasePath($path,$classPrefix='Zend_View'); /** *Addanadditionalpathtoviewresources * *@paramstring$path *@paramstring$classPrefix *@returnvoid */ publicfunctionaddBasePath($path,$classPrefix='Zend_View'); /** *Assignavariabletotheview * *@paramstring$keyThevariablename. *@parammixed$valThevariablevalue. *@returnvoid */ publicfunction__set($key,$val); /** *Allowstestingwithempty()andisset()towork * *@paramstring$key *@returnboolean */ publicfunction__isset($key); /** *Allowsunset()onobjectpropertiestowork * *@paramstring$key *@returnvoid */ publicfunction__unset($key); /** *Assignvariablestotheviewscriptviadifferingstrategies. * *Suggestedimplementationistoallowsettingaspecifickeytothe *specifiedvalue,ORpassinganarrayofkey=>valuepairstoseten *masse. * *@see__set() *@paramstring|array$specTheassignmentstrategytouse(keyorarrayofkey *=>valuepairs) *@parammixed$value(Optional)Ifassigninganamedvariable,usethis *asthevalue. *@returnvoid */ publicfunctionassign($spec,$value=null); /** *Clearallassignedvariables * *ClearsallvariablesassignedtoZend_Vieweithervia{@linkassign()}or *propertyoverloading({@link__get()}/{@link__set()}). * *@returnvoid */ publicfunctionclearVars(); /** *Processesaviewscriptandreturnstheoutput. * *@paramstring$nameThescriptnametoprocess. *@returnstringThescriptoutput. */ publicfunctionrender($name); }
集成Smarty的基本实现如下:
smarty下载地址
http://www.smarty.net/files/Smarty-3.1.7.tar.gz
目录结构
root@coder-671T-M:/www/zf_demo1#tree
.
├──application
│ ├──Bootstrap.php
│ ├──configs
│ │ └──application.ini
│ ├──controllers
│ │ ├──ErrorController.php
│ │ └──IndexController.php
│ ├──models
│ └──views
│ ├──helpers
│ └──scripts
│ ├──error
│ │ └──error.phtml
│ └──index
│ ├──index.phtml
│ └──index.tpl
├──docs
│ └──README.txt
├──library
│ ├──Lq
│ │ └──View
│ │ └──Smarty.php
│ └──smartylib
│ ├──debug.tpl
│ ├──plugins
│ │ ├──...........................
│ │ └──variablefilter.htmlspecialchars.php
│ ├──SmartyBC.class.php
│ ├──Smarty.class.php
│ └──sysplugins
│ ├──..........................
│ └──smarty_security.php
├──public
│ └──index.php
├──temp
│ └──smarty
│ └──templates_c
│ └──73d91bef3fca4e40520a7751bfdfb3e44b05bdbd.file.index.tpl.php
└──tests
├──application
│ └──controllers
│ └──IndexControllerTest.php
├──bootstrap.php
├──library
└──phpunit.xml
24directories,134files
/zf_demo1/library/Lq/View/Smarty.php
<?php require_once'smartylib/Smarty.class.php'; classLq_View_SmartyimplementsZend_View_Interface{ /** *Smartyobject * *@varSmarty */ protected$_smarty; /** *Constructor * *@param$tmplPathstring *@param$extraParamsarray *@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 * *@param$pathstring *Thedirectorytosetasthepath. *@returnvoid */ publicfunctionsetScriptPath($path){ if(is_readable($path)){ $this->_smarty->template_dir=$path; return; } thrownewException('Invalidpathprovided'); } /** *Retrievethecurrenttemplatedirectory * *@returnstring */ publicfunctiongetScriptPaths(){ returnarray($this->_smarty->template_dir); } /** *AliasforsetScriptPath * *@param$pathstring *@param$prefixstring *Unused *@returnvoid */ publicfunctionsetBasePath($path,$prefix='Zend_View'){ return$this->setScriptPath($path); } /** *AliasforsetScriptPath * *@param$pathstring *@param$prefixstring *Unused *@returnvoid */ publicfunctionaddBasePath($path,$prefix='Zend_View'){ return$this->setScriptPath($path); } /** *Assignavariabletothetemplate * *@param$keystring *Thevariablename. *@param$valmixed *Thevariablevalue. *@returnvoid */ publicfunction__set($key,$val){ $this->_smarty->assign($key,$val); } /** *Retrieveanassignedvariable * *@param$keystring *Thevariablename. *@returnmixedThevariablevalue. */ publicfunction__get($key){ return$this->_smarty->get_template_vars($key); } /** *Allowstestingwithempty()andisset()towork * *@param$keystring *@returnboolean */ publicfunction__isset($key){ return(null!==$this->_smarty->get_template_vars($key)); } /** *Allowsunset()onobjectpropertiestowork * *@param$keystring *@returnvoid */ publicfunction__unset($key){ $this->_smarty->clear_assign($key); } /** *Assignvariablestothetemplate * *Allowssettingaspecifickeytothespecifiedvalue,ORpassinganarray *ofkey=>valuepairstosetenmasse. * *@see__set() *@param$specstring|array *Theassignmentstrategytouse(keyorarrayofkey *=>valuepairs) *@param$valuemixed *(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. * *@param$namestring *Thetemplatetoprocess. *@returnstringTheoutput. */ publicfunctionrender($name){ ob_start(); echo$this->_smarty->fetch($name); unset($name); } }
/zf_demo1/application/configs/application.ini
[production] includePaths.library=APPLICATION_PATH"/../library" bootstrap.path=APPLICATION_PATH"/Bootstrap.php" bootstrap.class="Bootstrap" appnamespace="Application" autoloadernamespaces.lq="Lq_" pluginpaths.Lq_View_Smarty="Lq/View/Smarty" resources.frontController.controllerDirectory=APPLICATION_PATH"/controllers" resources.frontController.params.displayExceptions=1 phpSettings.display_startup_errors=1 phpSettings.display_errors=1
/zf_demo1/application/Bootstrap.php
<?php classBootstrapextendsZend_Application_Bootstrap_Bootstrap{ /** *InitializeSmartyview */ protectedfunction_initSmarty(){ $smarty=newLq_View_Smarty(); $smarty->setScriptPath('/www/zf_demo1/application/views/scripts'); return$smarty; } }
/zf_demo1/application/controllers/IndexController.php
<?php classIndexControllerextendsZend_Controller_Action{ publicfunctioninit(){ /* *Initializeactioncontrollerhere */ } publicfunctionindexAction(){ $this->_helper->getHelper('viewRenderer')->setNoRender(); $this->view=$this->getInvokeArg('bootstrap')->getResource('smarty'); $this->view->book='HelloWorld!'; $this->view->author='bysmarty'; $this->view->render('index/index.tpl'); } }
/zf_demo1/application/views/scripts/index/index.tpl
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <metahttp-equiv="Content-Type"content="text/html;charset=UTF-8"> <title>Inserttitlehere</title> </head> <body> {$book} {$author} </body> </html>
如果需要配置smarty可以打开/zf_demo1/library/smartylib/Smarty.class.php文件进行相应配置例如
/** *InitializenewSmartyobject * */ publicfunction__construct() { //selfpointerneededbysomeotherclassmethods $this->smarty=$this; if(is_callable('mb_internal_encoding')){ mb_internal_encoding(Smarty::$_CHARSET); } $this->start_time=microtime(true); //setdefaultdirs $this->setTemplateDir('/www/zf_demo1/temp/smarty'.DS.'templates'.DS) ->setCompileDir('/www/zf_demo1/temp/smarty'.DS.'templates_c'.DS) ->setPluginsDir(SMARTY_PLUGINS_DIR) ->setCacheDir('/www/zf_demo1/temp/smarty'.DS.'cache'.DS) ->setConfigDir('/www/zf_demo1/temp/smarty'.DS.'configs'.DS); $this->debug_tpl='file:'.dirname(__FILE__).'/debug.tpl'; if(isset($_SERVER['SCRIPT_NAME'])){ $this->assignGlobal('SCRIPT_NAME',$_SERVER['SCRIPT_NAME']); } }
更多关于zend相关内容感兴趣的读者可查看本站专题:《ZendFrameWork框架入门教程》、《php优秀开发框架总结》、《Yii框架入门及常用技巧总结》、《ThinkPHP入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。