3.4 规划layout
layout一经开启,就自动生效了,我们打开layout/script/layout.phtml文件,输入以下代码:
application/layout/script/layout.phtml <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link href="/skins/default/css/layout.css"rel="stylesheet"type="text/css" /> <link href="/skins/default/css/style.css" rel="stylesheet" type="text/css" /> </head> <body> <div id = "wrap"> <?php echo $this->partial('header.phtml'); ?> <div id = "main"> <!--sidebar开始--> <div id = "sidebar"></div> <!--sidebar结束--> <div id = "content"> <?php echo $this->layout()->content ?> </div> </div> <?php echo $this->partial('footer.phtml'); ?> </div> </body> </html>
该文件的主要内容由HTML代码构成,只有三个地方嵌入了PHP代码,其中有两处输出了名为$this->partial()的方法,分别将header.phtml和footer.phtml作为它的参数,另外一处输出了$this->layout()->content。先不忙去问这些是什么意思,我们接着把header.phtml和footer.phtml这两个文件也创建出来,它们和layout.phtml有同样的路径。
在layout/script目录下创建header.phtml文件,输入以下代码:
application/layout/script/header.phtml <div id = "header"> <div id = "logo"><img src="/skins/default/images/logo.png"></div></div>
在layout/script目录下创建footer.phtml文件,输入以下代码:
application/layout/script/footer.phtml <div id = "footer"> 2011 All rights reserved. kehuanedu.com copyright可幻教育集团 | 联系我们 | 合作者 </div>
此时刷新浏览器,网站看上去应该是如图3-2所示的样子。

图3-2 使用layout模板布局后的首页
现在请大家重新仔细看一遍layout.phtml,弄清楚首页显示的各部分对应HTML里的哪些代码,尤其要弄明白“Hello,World!”和“人,诗意在栖居大地……”两句话的代码出处。
很显然,$this->partial('header.phtml')起了PHP中类似require或include的作用,footer.phtml也是这么出来的,“Hello,World!”和“人,诗意在栖居大地……”则出自$this->layout()->content,它的内容是由Index控制器中的index方法及其视图共同提供的。
$this->layout()->content就是这个模板提供的动态区域,所有由MVC生成的网页内容,都会经由这个位置呈现出来,而它具体应显示什么内容,是由前端控制器根据用户的请求和框架的访问规则来调用相应的控制器方法给出的。
3.4.1 应用不同的layout
为了使网站看上去丰富有变化,你大可以制作几个不同的布局模板来应用在不同的页面上,这只需在相应控制器里进行设置即可,如下面的代码所示:
$this->_helper->layout->setLayout('yourNewLayout');
当然也可以使用以下代码来关闭布局模板:
$this->_helper->layout->disableLayout();
这些,我们会在后面的内容中一一用到,届时请注意。
3.4.2 避免过度设计
如果你曾经用Joomla或Drupal一类的CMS系统来搭建过网站,那么一定会对其模板的实现机制印象深刻。
但是我们之所以用Zend Framework,目的就是为了使网站的开发和使用更灵活,更便于控制,所以没必要为了使操作更傻瓜化而费很多心思去构建一个能满足全站所有页面显示需求的layout。既然大多数方法都会有一个对应的view,所以我会在这些view里做文章,只把一些共性的元素放在layout中。