zend框架混合使用zend视图和smarty视图

zend框架混合使用zend视图和smarty视图

为了自由使用视图,实践摸索出一套办法。

zend自带了php视图,后缀是phtml,还有一些常用的帮助类等,假如分模块,结构类似

# cd application
# tree
Java代码 复制代码 收藏代码
  1. .
  2. |-- application
  3. | |-- configs
  4. | | `-- application.ini
  5. | |-- modules/
  6. | | |-- bbs
  7. | | | |-- controllers
  8. | | | | |-- BbsapplyController.php
  9. | | | | |-- BbstopicController.php
  10. | | | | `-- IndexController.php
  11. | | | |-- models
  12. | | | `-- views
  13. | | | |-- helpers
  14. | | | |-- scripts
  15. | | | `-- templates
  16. | | | |-- Bbsapply
  17. | | | | |-- index.tpl
  18. | | | | `-- view.tpl
  19. | | | |-- Bbstopic
  20. | | | | |-- index1.tpl
  21. | | | | |-- index2.tpl
  22. | | | | `-- index.tpl
  23. | | | `-- index
  24. | | | `-- index.tpl
  25. | | `-- default
  26. | | |-- controllers
  27. | | | |-- IndexController.php
  28. | | | |-- NewsController.php
  29. | | |-- models
  30. | | `-- views
  31. | | |-- helpers
  32. | | |-- scripts
  33. | | | `-- index
  34. | | | |-- index.phtml
  35. | | | `-- index2.phtml
  36. | | `-- templates
  37. | | `-- news
  38. | | |-- category.tpl
  39. | | `-- index.tpl
  40. | `-- templates
  41. | |-- common1.tpl
  42. | |-- common2.tpl
  43. | `-- common3.tpl
  44. |-- library
  45. | |-- Lib1.php
  46. | |-- Lib2.php
  47. | |-- Dao
  48. | | |-- Lib1.php
  49. | | `-- Lib2.php
  50. | |-- Smarty
  51. | | |-- Config_File.class.php
  52. | | |-- Smarty.class.php
  53. | | |-- Smarty_Compiler.class.php
  54. | | |-- Templater.php
  55. | | |-- debug.tpl
  56. | | |-- internals
  57. | | | |-- core.assemble_plugin_filepath.php
  58. | | | |-- core.assign_smarty_interface.php
  59. | | | `-- core.write_file.php
  60. | | `-- plugins
  61. | | |-- block.textformat.php
  62. | | |-- compiler.assign.php
  63. | | |-- function.assign_debug_info.php
  64. | | `-- shared.make_timestamp.php
  65. | |-- Templater
  66. | | `-- plugins
  67. | | |-- function.pagelinks.php
  68. | | |-- function.wysiwyg.php
  69. | | `-- modifier.title1.php
  70. | `-- Zend
  71. | |-- Acl
  72. | |-- Amf
  73. | |-- Auth
  74. | |-- Barcode
  75. | |-- ......
  76. | `-- ......
  77. |-- script
  78. | `-- migrate
  79. | `-- script1.php
  80. `-- documentroot
  81. |-- design
  82. | |-- demo1.html
  83. | `-- demo2.html
  84. |-- images
  85. | |-- bg.png
  86. | |-- index.png
  87. | |-- blank.gif
  88. | |-- captcha.png
  89. | `-- small.png
  90. |-- css
  91. | |-- 1.css
  92. | `-- 2.css
  93. |-- js
  94. | `-- lib
  95. | |-- jquery-1.4.2.min.js
  96. | `-- jquery-ui-1.8.6.custom.min.js
  97. `-- index.php
. 
|-- application
|   |-- configs
|   |   `-- application.ini
|   |-- modules/
|   |   |-- bbs
|   |   |   |-- controllers
|   |   |   |   |-- BbsapplyController.php
|   |   |   |   |-- BbstopicController.php
|   |   |   |   `-- IndexController.php
|   |   |   |-- models
|   |   |   `-- views
|   |   |       |-- helpers
|   |   |       |-- scripts
|   |   |       `-- templates
|   |   |           |-- Bbsapply
|   |   |           |   |-- index.tpl
|   |   |           |   `-- view.tpl
|   |   |           |-- Bbstopic
|   |   |           |   |-- index1.tpl
|   |   |           |   |-- index2.tpl
|   |   |           |   `-- index.tpl
|   |   |           `-- index
|   |   |               `-- index.tpl
|   |   `-- default
|   |       |-- controllers
|   |       |   |-- IndexController.php
|   |       |   |-- NewsController.php
|   |       |-- models
|   |       `-- views
|   |           |-- helpers
|   |           |-- scripts
|   |           |   `-- index
|   |           |       |-- index.phtml
|   |           |       `-- index2.phtml
|   |           `-- templates
|   |               `-- news
|   |                   |-- category.tpl
|   |                   `-- index.tpl
|   `-- templates
|       |-- common1.tpl
|       |-- common2.tpl
|       `-- common3.tpl
|-- library
|   |-- Lib1.php
|   |-- Lib2.php
|   |-- Dao
|   |   |-- Lib1.php
|   |   `-- Lib2.php
|   |-- Smarty
|   |   |-- Config_File.class.php
|   |   |-- Smarty.class.php
|   |   |-- Smarty_Compiler.class.php
|   |   |-- Templater.php
|   |   |-- debug.tpl
|   |   |-- internals
|   |   |   |-- core.assemble_plugin_filepath.php
|   |   |   |-- core.assign_smarty_interface.php
|   |   |   `-- core.write_file.php
|   |   `-- plugins
|   |       |-- block.textformat.php
|   |       |-- compiler.assign.php
|   |       |-- function.assign_debug_info.php
|   |       `-- shared.make_timestamp.php
|   |-- Templater
|   |   `-- plugins
|   |       |-- function.pagelinks.php
|   |       |-- function.wysiwyg.php
|   |       `-- modifier.title1.php
|   `-- Zend
|       |-- Acl
|       |-- Amf
|       |-- Auth
|       |-- Barcode
|       |-- ......
|       `-- ......
|-- script
|   `-- migrate
|       `-- script1.php
`-- documentroot
    |-- design
    |   |-- demo1.html
    |   `-- demo2.html
    |-- images
    |   |-- bg.png
    |   |-- index.png
    |   |-- blank.gif
    |   |-- captcha.png
    |   `-- small.png
    |-- css
    |   |-- 1.css
    |   `-- 2.css
    |-- js
    |   `-- lib
    |       |-- jquery-1.4.2.min.js
    |       `-- jquery-ui-1.8.6.custom.min.js
    `-- index.php


4个根目录的父目录由版本管理同步,
application 框架程序
library 类库,需要放在php.ini的include_path里,其中含了smarty和Zend框架的类库。
script 一些脚本
documentroot apache的文档根目录

把smarty的模板根目录定位到application,主要是为了有一些smarty公用的模板有地方可放。

为方便起见,zend视图完全按照zend的要求,连后缀都不改,目录结构都不改。
zend视图默认的是"模块名/views/scripts/控制器名/动作名.phtml"
smarty模板则相应使用"模块名/views/templates/控制器名/动作名.tpl"

假设有两个模块,缺省模块和论坛的bbs模块,在目录中可以看出,缺省模块的index控制器使用了zend视图,别的统统使用smarty视图。


application/documentroot/index.php
引导文件的部分代码
Java代码 复制代码 收藏代码
  1. defined('APPLICATION_PATH')
  2. || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
  3. //创建前端控制器对象,
  4. $front_controller = Zend_Controller_Front::getInstance();
  5. $front_controller->addModuleDirectory(APPLICATION_PATH . '/modules');
  6. //分发
  7. $front_controller->dispatch();
defined('APPLICATION_PATH')
    || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
//创建前端控制器对象, 
$front_controller = Zend_Controller_Front::getInstance();
$front_controller->addModuleDirectory(APPLICATION_PATH . '/modules');
//分发
$front_controller->dispatch();



如果使用zend视图,则控制器类什么都不做。

在需要使用smarty的控制器里,例如
application/modules/default/controllers/NewsController.php
Java代码 复制代码 收藏代码
  1. //缺省模块的新闻控制器
  2. class NewsController extends Zend_Controller_Action
  3. {
  4. function init(){
  5. $viewRenderer = $this->getHelper('viewRenderer');
  6. $viewRenderer->setView(new Smarty_Templater())
  7. ->setViewBasePathSpec(APPLICATION_PATH )
  8. ->setViewScriptPathSpec('modules/:module/views/templates/:controller/:action.:suffix')
  9. ->setViewSuffix('tpl')
  10. ->initView();
  11. $this->view = $this->_helper->viewRenderer->view;
  12. parent::init();
  13. }
  14. /**
  15. * 缺省模块的新闻控制器的index行为,使用samrty模板
  16. */
  17. public function indexAction()
  18. {
  19. $this->view->greeting = "Hello,World!";
  20. }
    //缺省模块的新闻控制器
    class NewsController extends Zend_Controller_Action
    {
        function init(){
            $viewRenderer = $this->getHelper('viewRenderer');
            
            $viewRenderer->setView(new Smarty_Templater())
                         ->setViewBasePathSpec(APPLICATION_PATH )
                         ->setViewScriptPathSpec('modules/:module/views/templates/:controller/:action.:suffix')
                         ->setViewSuffix('tpl')
                         ->initView();
            $this->view = $this->_helper->viewRenderer->view;                         
                        
            parent::init();
        }
        /**
         * 缺省模块的新闻控制器的index行为,使用samrty模板
         */
        public function indexAction()
        {
            $this->view->greeting = "Hello,World!";
        }


application/modules/default/views/templates/news/index.tpl
Java代码 复制代码 收藏代码
  1. {$greeting}
{$greeting}


就这样,整个世界都清净了。

你可能感兴趣的:(zend框架混合使用zend视图和smarty视图)