实例演示二
学习目标
通过这个简单的实例,更好地了解布局视图(layout)、挂件(widget)的运用,更深刻地理解DoitPHP的视图机制。
创建文件
1、创建IndexController(建议使用DoitPHP Tools),文件路径:application/controllers/IndexController.php。内容如下:
- /**
- * DoitPHP 演示实例二
- *
- * @author tommy
- * @copyright Copyright (C) www.doitphp.com All rights reserved.
- * @version $Id: Index.php 1.0 2013-11-29 18:55:39Z tommy $
- * @package Controller
- * @since 1.0
- */
- class IndexController extends Controller {
- /**
- * 文章列表页(首页)
- *
- * @access public
- * @return void
- */
- public function indexAction() {
- $articleUrl = $this->getActionUrl('article');
- $this->assign('articleUrl', $articleUrl);
- $this->display();
- }
- /**
- * 文章内容页
- *
- * @access public
- * @return void
- */
- public function articleAction() {
- //获取文章Id
- $articleId = $this->get('id', 1);
- $this->assign('articleId', $articleId);
- $this->display();
- }
- /**
- * 前函数(数据初始化)
- *
- * @access protected
- * @return boolean
- */
- protected function init() {
- //设置布局视图
- $this->setLayout('main');
- }
- }
2、创建布局视图main.php, 文件路径为:application/views/layouts/main.php。内容如下:
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title>演示实例二:视图机制</title>
- </head>
- <body>
- <table border="0" cellspacing="0" cellpadding="0">
- <tr>
- <td height="90" colspan="2" align="center">DoitPHP演示实例二</td>
- </tr>
- <tr>
- <td height="40" colspan="2"><?php $this->widget('mainMenu'); ?></td>
- </tr>
- <tr>
- <td width="760" height="580" align="left" valign="top">
- <?php echo $viewContent; ?>
- </td>
- <td width="200" align="center" bgcolor="#CCCCCC">广告位</td>
- </tr>
- <tr>
- <td height="60" colspan="2" align="center">版权信息 2017 </td>
- </tr>
- </table>
- </body>
- </html>
- 3、创建挂件mainMenuWidget,文件路径为:application/widgets/mainMenuWidget.php,内容如下:
- /**
- * 主菜单(挂件)
- *
- * @author tommy
- * @copyright Copyright (C) www.doitphp.com 2016 All rights reserved.
- * @version $Id: mainMenu 1.0 2016-12-23 02:12:02Z tommy $
- * @package Widget
- * @since 1.0
- */
- class mainMenuWidget extends Widget {
- /**
- * main method
- *
- * @access public
- *
- * @param array $params 参数
- *
- * @return void
- */
- public function renderContent($params = null) {
- $this->assign(array(
- 'actionName' => Doit::getActionName(),
- ));
- $this->display();
- }
- }
其视图文件为:mainMenu.php, 文件路径为:application/views/widgets/mainMenu.php,内容如下:
- <?php if($actionName == 'index'){ ?>
- <span style="color:#336699"><strong>首页</strong></span>
- <?php } else { ?>
- <a href="<?php echo $this->getActionUrl('index'); ?>">首页</a>
- <?php } ?>
- <?php if($actionName == 'article'){ ?>
- <span style="color:#336699"><strong>文章</strong></span>
- <?php } else { ?>
- <a href="<?php echo $this->getActionUrl('article'); ?>">文章</a>
- <?php } ?>
创建视图文件,从IndexController的内容看,有两个Action类方法,故需要创建两个视图文件,路径分别为:application/views/index/index.php, application/views/index/article.php。index.php文件内容如下:
- <ul>
- <li><a href="<?php echo $articleUrl; ?>/?id=1">文章1</a></li>
- <li><a href="<?php echo $articleUrl; ?>/?id=2">文章2</a></li>
- <li><a href="<?php echo $articleUrl; ?>/?id=3">文章3</a></li>
- </ul>
article.php文件内容如下:
- <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