实例演示二

学习目标

通过这个简单的实例,更好地了解布局视图(layout)、挂件(widget)的运用,更深刻地理解DoitPHP的视图机制。

创建文件

1、创建IndexController(建议使用DoitPHP Tools),文件路径:application/controllers/IndexController.php。内容如下:

  1. /**
  2. * DoitPHP 演示实例二
  3. *
  4. * @author tommy
  5. * @copyright Copyright (C) www.doitphp.com All rights reserved.
  6. * @version $Id: Index.php 1.0 2013-11-29 18:55:39Z tommy $
  7. * @package Controller
  8. * @since 1.0
  9. */
  10.  
  11. class IndexController extends Controller {
  12.  
  13. /**
  14. * 文章列表页(首页)
  15. *
  16. * @access public
  17. * @return void
  18. */
  19. public function indexAction() {
  20. $articleUrl = $this->getActionUrl('article');
  21. $this->assign('articleUrl', $articleUrl);
  22. $this->display();
  23. }
  24.  
  25. /**
  26. * 文章内容页
  27. *
  28. * @access public
  29. * @return void
  30. */
  31. public function articleAction() {
  32. //获取文章Id
  33. $articleId = $this->get('id', 1);
  34. $this->assign('articleId', $articleId);
  35. $this->display();
  36. }
  37.  
  38. /**
  39. * 前函数(数据初始化)
  40. *
  41. * @access protected
  42. * @return boolean
  43. */
  44. protected function init() {
  45.  
  46. //设置布局视图
  47. $this->setLayout('main');
  48. }
  49. }

2、创建布局视图main.php, 文件路径为:application/views/layouts/main.php。内容如下:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>演示实例二:视图机制</title>
  6. </head>
  7.  
  8. <body>
  9. <table border="0" cellspacing="0" cellpadding="0">
  10. <tr>
  11. <td height="90" colspan="2" align="center">DoitPHP演示实例二</td>
  12. </tr>
  13. <tr>
  14. <td height="40" colspan="2"><?php $this->widget('mainMenu'); ?></td>
  15. </tr>
  16. <tr>
  17. <td width="760" height="580" align="left" valign="top">
  18. <?php echo $viewContent; ?>
  19. </td>
  20. <td width="200" align="center" bgcolor="#CCCCCC">广告位</td>
  21. </tr>
  22. <tr>
  23. <td height="60" colspan="2" align="center">版权信息 2017 </td>
  24. </tr>
  25. </table>
  26. </body>
  27. </html>
  28.  
  29. 3、创建挂件mainMenuWidget,文件路径为:application/widgets/mainMenuWidget.php,内容如下:
  30. /**
  31. * 主菜单(挂件)
  32. *
  33. * @author tommy
  34. * @copyright Copyright (C) www.doitphp.com 2016 All rights reserved.
  35. * @version $Id: mainMenu 1.0 2016-12-23 02:12:02Z tommy $
  36. * @package Widget
  37. * @since 1.0
  38. */
  39.  
  40. class mainMenuWidget extends Widget {
  41.  
  42. /**
  43. * main method
  44. *
  45. * @access public
  46. *
  47. * @param array $params 参数
  48. *
  49. * @return void
  50. */
  51. public function renderContent($params = null) {
  52.  
  53. $this->assign(array(
  54. 'actionName' => Doit::getActionName(),
  55. ));
  56.  
  57. $this->display();
  58. }
  59.  
  60. }

其视图文件为:mainMenu.php, 文件路径为:application/views/widgets/mainMenu.php,内容如下:

  1. <?php if($actionName == 'index'){ ?>
  2. <span style="color:#336699"><strong>首页</strong></span>
  3. <?php } else { ?>
  4. <a href="<?php echo $this->getActionUrl('index'); ?>">首页</a>
  5. <?php } ?>
  6.  
  7. <?php if($actionName == 'article'){ ?>
  8. <span style="color:#336699"><strong>文章</strong></span>
  9. <?php } else { ?>
  10. <a href="<?php echo $this->getActionUrl('article'); ?>">文章</a>
  11. <?php } ?>

创建视图文件,从IndexController的内容看,有两个Action类方法,故需要创建两个视图文件,路径分别为:application/views/index/index.php, application/views/index/article.php。index.php文件内容如下:

  1. <ul>
  2. <li><a href="<?php echo $articleUrl; ?>/?id=1">文章1</a></li>
  3. <li><a href="<?php echo $articleUrl; ?>/?id=2">文章2</a></li>
  4. <li><a href="<?php echo $articleUrl; ?>/?id=3">文章3</a></li>
  5. </ul>

article.php文件内容如下:

  1. <div>文章ID:<span style="color:#c40000;"><?php echo $articleId; ?></span></div>

到这里这个实例已经完成了,在浏览器地址栏里访问这个项目的入口文件,你会看页首页为一个文章列表内容。点击文章列表,再点击下主菜单那些链接。细细体会,你就会领悟到布局视图、挂件的妙用。

练习题

将IndexController中的indexAction类方法中的$this->display(), 如果改成$this->render();后,运行看下输出的页面内容是什么?这时就你会知道 Controller基类中提供的视图操作类方法:display()、render()它们之间的区别了。

原文: http://www.doitphp.com/index/documentation/?articleid=29