时时商务社区
标题:
Zend Framework实现Zend_View集成Smarty模板系统的方法
[打印本页]
作者:
yj1281
时间:
2018-2-14 05:38
本文实例讲述了Zend Framework实现Zend_View集成Smarty模板系统的方法。分享给大家供大家参考,具体如下:
Zend_View抽象出了Zend_View_Interface,可以让我们集成不同的视图解决方案,例如可以集成smarty。要在zend中使用其他视图系统作为视图,只要实现Zend_View_Interface接口即可。
Zend_View_Interface的接口定义:
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);
/**
* 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();
/**
* Processes a view script and returns the output.
*
* @param string $name The script name to process.
* @return string The script output.
*/
public function render($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
24 directories, 134 files
/zf_demo1/library/Lq/View/Smarty.php
_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 $path string
* 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 $path string
* @param $prefix string
* Unused
* @return void
*/
public function setBasePath($path, $prefix = 'Zend_View') {
return $this->setScriptPath ( $path );
}
/**
* Alias for setScriptPath
*
* @param $path string
* @param $prefix string
* Unused
* @return void
*/
public function addBasePath($path, $prefix = 'Zend_View') {
return $this->setScriptPath ( $path );
}
/**
* Assign a variable to the template
*
* @param $key string
* The variable name.
* @param $val mixed
* The variable value.
* @return void
*/
public function __set($key, $val) {
$this->_smarty->assign ( $key, $val );
}
/**
* Retrieve an assigned variable
*
* @param $key string
* 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 $key string
* @return boolean
*/
public function __isset($key) {
return (null !== $this->_smarty->get_template_vars ( $key ));
}
/**
* Allows unset() on object properties to work
*
* @param $key string
* @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 $spec string|array
* The assignment strategy to use (key or array of key
* => value pairs)
* @param $value mixed
* (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 $name string
* The template to process.
* @return string The output.
*/
public function render($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
setScriptPath('/www/zf_demo1/application/views/scripts');
return $smarty;
}
}
/zf_demo1/application/controllers/IndexController.php
_helper->getHelper('viewRenderer')->setNoRender();
$this->view = $this->getInvokeArg ( 'bootstrap' )->getResource ( 'smarty' );
$this->view->book = 'Hello World! ';
$this->view->author = 'by smarty';
$this->view->render('index/index.tpl');
}
}
/zf_demo1/application/views/scripts/index/index.tpl
Insert title here
{$book}
{$author}
如果需要配置smarty可以打开/zf_demo1/library/smartylib/Smarty.class.php文件进行相应配置例如
/**
* Initialize new Smarty object
*
*/
public function __construct()
{
// selfpointer needed by some other class methods
$this->smarty = $this;
if (is_callable('mb_internal_encoding')) {
mb_internal_encoding(Smarty:
_CHARSET);
}
$this->start_time = microtime(true);
// set default dirs
$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相关内容感兴趣的读者可查看本站专题:《
Zend FrameWork框架入门教程
》、《
php优秀开发框架总结
》、《
Yii框架入门及常用技巧总结
》、《
ThinkPHP入门教程
》、《
php面向对象程序设计入门教程
》、《
php+mysql数据库操作入门教程
》及《
php常见数据库操作技巧汇总
》
希望本文所述对大家PHP程序设计有所帮助。
您可能感兴趣的文章:
Zend Framework教程之视图组件Zend_View用法详解
Zend Framework开发入门经典教程
php入门教程之Zend Studio设置与开发实例
Zend Framework实现自定义过滤器的方法
Zend Framework过滤器Zend_Filter用法详解
Zend Framework入门教程之Zend_Config组件用法详解
Zend Framework入门教程之Zend_Registry组件用法详解
Zend Framework使用Zend_Loader组件动态加载文件和类用法详解
Zend Framework处理Json数据方法详解
Zend Framework入门教程之Zend_View组件用法示例
欢迎光临 时时商务社区 (http://bbs.4435.cn/)
Powered by Discuz! X3.2