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