Zend Framework 入门(4)—页面布局

作者:互联网

2009-05-30

网络编程教程

Zend Framework 的页面布局模块——Zend_Layout——既可以跟 MVC 一起使用,也可以单独使用。本文只讨论与 MVC 一起使用的情况。

1. 布局脚本

在 application/views 下创建一个layouts 的文件夹。主布局脚本 layout.phtml 代码如下:
doctype('XHTML1_STRICT') ?>



headTitle() ?>
$this->headLink()->appendStylesheet("/styles/main.css");
// add more links ...
?>
headLink() ?>










partial('leftcolumn.phtml') ?>



layout()->content ?>




除了layout.phtml 之外,还需要编写 header.phtml,leftcolumn.phtml,footer.phtml,以及 main.css 等文件。

Zend Framework 的文档中用一个视图表示了页面布局的应用。

2. 设置页面布局

在 MVC 下设置页面布局非常简单,编辑 html/index.php,加入下面两行代码:

/** Setuplayout*/
require_once 'Zend/Layout.php';
Zend_Layout::startMvc($rootPath . '/application/views/layouts');

注意:在启动页面布局后,要调整已有的各个页面,把不需要的 html 元素,如

<body> 等去掉。另外,可以通过 $this->headTitle() 来设置页面的题头。</p> <p>改变页面的布局也很简单,只需在控制器中用下面的代码即可:</p> <p>$this->_helper->layout->setLayout('new_layout');</p> <p>如果一个控制器所有动作都使用同一个页面布局,可以通过控制器的初始化函数来设置:</p> <p>public function init() {<br>parent::init();</p> <p>$this->_helper->layout->setLayout('new_layout');<br>}</p></span> </div> <div class="lastanext flexRow"> <a class="lastart flexRow" href="/wz/106.html" ><span>上一篇:</span><span>Ajax+PHP简单入门教程</span></a> <a class="nextart flexRow" href="/wz/108.html" ><span>下一篇:</span><span>Zend Framework 入门(3)—错误处理</span></a> </div> </div> <div class="dtl-xgtj"> <div class="jb-titles flexRow"> <div class="jbtle-left flexRow"><b></b><p>相关推荐</p></div> </div> <div class="tjlist flexRow"> <div class="tj-item "> <div class="tjitemd"> <div class="tjimd-top flexRow"> <a class="imdta flexRow" href="/wz/365631.html" > <img src="https://images.jiaoben.net/uploads/20260417/logo_69e1ebbf94fdb1.jpeg" > </a> <div class="imdt-right flexColumn"> <a class="imdtra flexRow overflowclass" href="/wz/365631.html" >MyBatis、MyBatis-Plus、JPA、MyBatisGX 写法比较:同一个需求,四种解法</a> <a class="imdtrap flexRow overflowclass" href="/wz/365631.html" > MyBatis、MyBatis-Plus、JPA、MyBatisGX 写法比较:同一个需求,四种解法 场景 1:一个"普通"的用户管理需求 产品经理说,用户模块需要支持: 新增用户 查询用户详情(带出 </a> </div> </div> <div class="tjimd-down flexRow"> <div class="imdd-tab flexRow"> <p class="imddt-time flexRow"><b></b><span>2026-04-17</span></p> </div> <a href="/wz/365631.html" class="imdd-more flexRow flexcenter" >立即查看</a> </div> </div> </div> <div class="tj-item "> <div class="tjitemd"> <div class="tjimd-top flexRow"> <a class="imdta flexRow" href="/wz/365623.html" > <img src="https://images.jiaoben.net/uploads/20260417/logo_69e1eb3a2def91.jpeg" > </a> <div class="imdt-right flexColumn"> <a class="imdtra flexRow overflowclass" href="/wz/365623.html" >【从0到1构建一个ClaudeAgent】并发-后台任务</a> <a class="imdtrap flexRow overflowclass" href="/wz/365623.html" > 有些操作很慢,Agent 不能干等着。例如**长时间编译/构建**:`make`, `mvn c </a> </div> </div> <div class="tjimd-down flexRow"> <div class="imdd-tab flexRow"> <p class="imddt-time flexRow"><b></b><span>2026-04-17</span></p> </div> <a href="/wz/365623.html" class="imdd-more flexRow flexcenter" >立即查看</a> </div> </div> </div> <div class="tj-item "> <div class="tjitemd"> <div class="tjimd-top flexRow"> <a class="imdta flexRow" href="/wz/365565.html" > <img src="https://images.jiaoben.net/uploads/20260417/logo_69e1dc6c2e9ec1.jpeg" > </a> <div class="imdt-right flexColumn"> <a class="imdtra flexRow overflowclass" href="/wz/365565.html" >java2AI系列:SpringAI 通过 Function Calling 接入外部系统</a> <a class="imdtrap flexRow overflowclass" href="/wz/365565.html" > 在做企业级的RAG时,需要投喂外部系统的数据给模型,以生成更符合需要的回答。我们都知道模型的知识是有限的,在训练完成后,它的参数就固定了。大多数的模型,目前还无法自主更新知识库,即不知道训练数据以外的 </a> </div> </div> <div class="tjimd-down flexRow"> <div class="imdd-tab flexRow"> <p class="imddt-time flexRow"><b></b><span>2026-04-17</span></p> </div> <a href="/wz/365565.html" class="imdd-more flexRow flexcenter" >立即查看</a> </div> </div> </div> <div class="tj-item "> <div class="tjitemd"> <div class="tjimd-top flexRow"> <a class="imdta flexRow" href="/wz/365521.html" > <img src="https://images.jiaoben.net/uploads/20260417/logo_69e1cf9d697db1.jpeg" > </a> <div class="imdt-right flexColumn"> <a class="imdtra flexRow overflowclass" href="/wz/365521.html" >深度剖析:Java 并发三大量难题 —— 死锁、活锁、饥饿全解</a> <a class="imdtrap flexRow overflowclass" href="/wz/365521.html" > 本文深入剖析Java并发中三大顽疾:死锁(线程永久阻塞)、活锁(线程忙等无效运行)、饥饿(低优先级线程长期得不到资源)。厘清其本质区别、触发条件、实战案例及jstack/Arthas等排查方案。 </a> </div> </div> <div class="tjimd-down flexRow"> <div class="imdd-tab flexRow"> <p class="imddt-time flexRow"><b></b><span>2026-04-17</span></p> </div> <a href="/wz/365521.html" class="imdd-more flexRow flexcenter" >立即查看</a> </div> </div> </div> </div> </div> </div> <div class="cd-right dtlcd-right"> <div class="dtl-ht"> <div class="jb-titles flexRow"> <div class="jbtle-left flexRow"><b></b><p>专题</p></div> </div> <div class="dtlht-list "> <div class="htl-item flexRow"> <div class="htmitem-left"> <div class="htiteml-top flexRow"> <a href="/wz/zt-69351.html" >#数据可视化</a> <span></span> </div> <a class="htiteml-down flexRow" href="/wz/zt-69351.html" >数据可视化(Data Visu</a> </div> <p class="htmitem-right flexRow flexcenter gz" data-id="69351" >+ 收藏</p> </div> <div class="htl-item flexRow"> <div class="htmitem-left"> <div class="htiteml-top flexRow"> <a href="/wz/zt-69342.html" >#自然语言处理</a> <span></span> </div> <a class="htiteml-down flexRow" href="/wz/zt-69342.html" >自然语言处理(Natural</a> </div> <p class="htmitem-right flexRow flexcenter gz" data-id="69342" >+ 收藏</p> </div> <div class="htl-item flexRow"> <div class="htmitem-left"> <div class="htiteml-top flexRow"> <a href="/wz/zt-68363.html" >#Excel公式</a> <span></span> </div> <a class="htiteml-down flexRow" href="/wz/zt-68363.html" >Excel公式就是:用函数 +</a> </div> <p class="htmitem-right flexRow flexcenter gz" data-id="68363" >+ 收藏</p> </div> <div class="htl-item flexRow"> <div class="htmitem-left"> <div class="htiteml-top flexRow"> <a href="/wz/zt-68355.html" >#Excel技巧</a> <span></span> </div> <a class="htiteml-down flexRow" href="/wz/zt-68355.html" >Excel是日常生活中必不可</a> </div> <p class="htmitem-right flexRow flexcenter gz" data-id="68355" >+ 收藏</p> </div> <div class="htl-item flexRow"> <div class="htmitem-left"> <div class="htiteml-top flexRow"> <a href="/wz/zt-68081.html" >#蛋仔派对</a> <span></span> </div> <a class="htiteml-down flexRow" href="/wz/zt-68081.html" >蛋仔派对最新官方活动、关卡速</a> </div> <p class="htmitem-right flexRow flexcenter gz" data-id="68081" >+ 收藏</p> </div> <div class="htl-item flexRow"> <div class="htmitem-left"> <div class="htiteml-top flexRow"> <a href="/wz/zt-68000.html" >#人工智能</a> <span></span> </div> <a class="htiteml-down flexRow" href="/wz/zt-68000.html" >人工智能(AI),简单说,就</a> </div> <p class="htmitem-right flexRow flexcenter gz" data-id="68000" >+ 收藏</p> </div> </div> </div> <div class=" dtl-zt"> <div class="jb-titles flexRow"> <div class="jbtle-left flexRow"><b></b><p>最新数据</p></div> </div> <div class="wkch-downs"> <div class="weekch-top flexRow"> <a class="wktpa flexRow" href="/wz/113.html" > <img src="/jiaoben/image/noimg.png" > </a> <div class="wktpa-right flexColumn"> <a class="wktpara flexRow overflowclass" href="/wz/113.html" >PHP的GD库函数大全</a> <a class="wktparp flexRow overflowclass" href="/wz/113.html" > GetImageSize作用 </a> </div> </div> <div class="weekch-list"> <div class="weekch-con flexRow"> <div class="weekch-icon flexRow"><b></b></div> <a href="/wz/112.html" class="weekcha flexRow flexcenter overflowclass" >PHP经验集锦</a> </div> <div class="weekch-con flexRow"> <div class="weekch-icon flexRow"><b></b></div> <a href="/wz/111.html" class="weekcha flexRow flexcenter overflowclass" >国外主流PHP框架比较</a> </div> <div class="weekch-con flexRow"> <div class="weekch-icon flexRow"><b></b></div> <a href="/wz/110.html" class="weekcha flexRow flexcenter overflowclass" >Zend Framework 入门(1)—快速上手</a> </div> <div class="weekch-con flexRow"> <div class="weekch-icon flexRow"><b></b></div> <a href="/wz/109.html" class="weekcha flexRow flexcenter overflowclass" >Zend Framework 入门(2)—多国语言支持</a> </div> <div class="weekch-con flexRow"> <div class="weekch-icon flexRow"><b></b></div> <a href="/wz/105.html" class="weekcha flexRow flexcenter overflowclass" >php6介绍和php6安装手册-PHP6下载</a> </div> <div class="weekch-con flexRow"> <div class="weekch-icon flexRow"><b></b></div> <a href="/wz/104.html" class="weekcha flexRow flexcenter overflowclass" >PHP 6安装方法</a> </div> <div class="weekch-con flexRow"> <div class="weekch-icon flexRow"><b></b></div> <a href="/wz/103.html" class="weekcha flexRow flexcenter overflowclass" >精通PHP的十大要点</a> </div> <div class="weekch-con flexRow"> <div class="weekch-icon flexRow"><b></b></div> <a href="/wz/102.html" class="weekcha flexRow flexcenter overflowclass" >PHP5.3新特性介绍</a> </div> <div class="weekch-con flexRow"> <div class="weekch-icon flexRow"><b></b></div> <a href="/wz/101.html" class="weekcha flexRow flexcenter overflowclass" >PHP开发人员应熟悉的五个概念</a> </div> </div> </div> </div> <div class=" dtl-wz"> <div class="jb-titles flexRow"> <div class="jbtle-left flexRow"><b></b><p>相关文章</p></div> </div> <div class="blog-list"> <a href="/wz/334532.html" class="bloga flexRow over"><p class="overflowclass">别再死记API了!用一条商业街彻底搞懂Array</p><div class="blogtime"><span>03/</span>26</div></a> <a href="/wz/13299.html" class="bloga flexRow over"><p class="overflowclass">浅解伪静态在phpWind中的应用</p><div class="blogtime"><span>08/</span>19</div></a> <a href="/wz/13298.html" class="bloga flexRow over"><p class="overflowclass">phpWind:服务器安全技巧七则</p><div class="blogtime"><span>08/</span>19</div></a> <a href="/wz/13297.html" class="bloga flexRow over"><p class="overflowclass">论坛架设有诀窍 phpWind配置技巧三则</p><div class="blogtime"><span>08/</span>19</div></a> <a href="/wz/12940.html" class="bloga flexRow over"><p class="overflowclass">PHP分页小代码</p><div class="blogtime"><span>07/</span>19</div></a> <a href="/wz/12660.html" class="bloga flexRow over"><p class="overflowclass">PHP企业级应用之常见缓存技术篇</p><div class="blogtime"><span>05/</span>24</div></a> <a href="/wz/12659.html" class="bloga flexRow over"><p class="overflowclass">PHP缓存技术的使用技巧分享</p><div class="blogtime"><span>05/</span>24</div></a> <a href="/wz/12658.html" class="bloga flexRow over"><p class="overflowclass">浅谈PHP缓存技术之三</p><div class="blogtime"><span>05/</span>24</div></a> <a href="/wz/12657.html" class="bloga flexRow over"><p class="overflowclass">浅谈PHP缓存技术之二</p><div class="blogtime"><span>05/</span>24</div></a> <a href="/wz/12656.html" class="bloga flexRow over"><p class="overflowclass">浅谈PHP缓存技术之一</p><div class="blogtime"><span>05/</span>24</div></a> </div> </div> <div class="cdr-ai"> <div class="jb-titles flexRow"> <div class="jbtle-left flexRow"><b></b><p>AI精选 </p></div> <a class="jbtitle-more flexRow" href="/category/list_344_1.html" title=""><span>更多</span><b></b></a> </div> <div class="ai-list"> <div class="ail-top flexRow"> <a href="/wz/366175.html" title="" class="ailta "> <img src="https://images.jiaoben.net/uploads/20260417/logo_69e224cf789341.jpg" > <p ><span>赛博朋克 K-Pop 动画</span></p></a> <a href="/wz/366174.html" title="" class="ailta "> <img src="https://images.jiaoben.net/uploads/20260417/logo_69e224c9eb4481.jpg" > <p ><span>冰川星球大逃亡</span></p></a> </div> <div class="ail-down"> <a class="ali-con flexRow" href="/wz/366173.html" title=""> <div class="alicon-left flexRow"><span>精选</span></div> <p class="aliconp overflowclass">皮克斯/迪士尼风格 X (Twitter) 个人资料卡片提示</p> </a> <a class="ali-con flexRow" href="/wz/366167.html" title=""> <div class="alicon-left flexRow"><span>精选</span></div> <p class="aliconp overflowclass">蝴蝶群化作空灵舞者循环动画</p> </a> <a class="ali-con flexRow" href="/wz/366165.html" title=""> <div class="alicon-left flexRow"><span>精选</span></div> <p class="aliconp overflowclass">抱着泰迪熊的男士写实肖像</p> </a> <a class="ali-con flexRow" href="/wz/366163.html" title=""> <div class="alicon-left flexRow"><span>精选</span></div> <p class="aliconp overflowclass">滑雪旅行自拍视角提示</p> </a> <a class="ali-con flexRow" href="/wz/366152.html" title=""> <div class="alicon-left flexRow"><span>精选</span></div> <p class="aliconp overflowclass">天鹅绒运动服中的超逼真肖像</p> </a> <a class="ali-con flexRow" href="/wz/366136.html" title=""> <div class="alicon-left flexRow"><span>精选</span></div> <p class="aliconp overflowclass">外卖配送狂奔电影感提示词</p> </a> <a class="ali-con flexRow" href="/wz/365746.html" title=""> <div class="alicon-left flexRow"><span>精选</span></div> <p class="aliconp overflowclass">MCP协议设计与实现-第13章 Streamable HTTP:远程流式传输</p> </a> <a class="ali-con flexRow" href="/wz/365745.html" title=""> <div class="alicon-left flexRow"><span>精选</span></div> <p class="aliconp overflowclass">从零开发一个 MCP 服务器 + OpenCode Skill:让 AI 学会审查你的代码</p> </a> </div> </div> </div> <div class="cdr-blog"> <div class="jb-titles flexRow"> <div class="jbtle-left flexRow"><b></b><p>脚本推荐</p></div> </div> <div class="blog-list"> <a href="/wz/zt-49225.html" title="" class="bloga flexRow over"><p class="overflowclass">SeeDance 2.0 Video Creator专区</p></a> <a href="/wz/zt-49224.html" title="" class="bloga flexRow over"><p class="overflowclass">OpenClaw AI专区</p></a> <a href="/wz/zt-49223.html" title="" class="bloga flexRow over"><p class="overflowclass">cowork专区</p></a> <a href="/wz/zt-49222.html" title="" class="bloga flexRow over"><p class="overflowclass">claude code skills专区</p></a> </div> </div> </div> </div> </div> </div> </main> <script> $(function() { // “+ 收藏”按钮点击事件 $(document).on('click', '.htmitem-right, .ztop-right', function(e) { // 仅针对包含 “+ 收藏” 文字的按钮 if ($(this).text().indexOf('+ 收藏') === -1) return; e.preventDefault(); const id = $(this).data('id'); if (!id) { layer.msg('该项暂无有效ID,无法收藏'); return; } // 构造收藏 URL: 当前域名 + /wz/zt- + id + / const bookmarkUrl = window.location.origin + '/wz/zt-' + id + '.html'; // 获取收藏标题 (优先从同级元素获取话题名称,否则使用页面标题) let bookmarkTitle = $(this).closest('.htl-item, .zttopd').find('a:first, span.overflowclass').text().trim() || document.title; if (bookmarkTitle.startsWith('#')) bookmarkTitle = bookmarkTitle.substring(1); // 浏览器收藏逻辑 (带 Fallback) try { if (window.sidebar && window.sidebar.addPanel) { // Firefox < 23 window.sidebar.addPanel(bookmarkTitle, bookmarkUrl, ""); } else if (window.external && ('AddFavorite' in window.external)) { // IE window.external.AddFavorite(bookmarkUrl, bookmarkTitle); } else { // Chrome, Safari, Firefox 23+, etc. const isMac = /Mac/i.test(navigator.userAgent); const keyStr = isMac ? 'Command + D' : 'Ctrl + D'; layer.confirm('由于浏览器安全限制,请使用 <b>' + keyStr + '</b> 手动添加收藏。<br><br>收藏地址:<br><small>' + bookmarkUrl + '</small>', { title: '收藏提示', btn: ['复制链接', '知道了'], yes: function(index) { copyToClipboard(bookmarkUrl).then(() => { layer.msg('链接已复制,请手动添加到收藏夹'); }).catch(() => { layer.msg('复制失败,请手动选择复制'); }); layer.close(index); } }); } } catch (err) { layer.msg('收藏失败,请手动添加'); } }); // 兼容非 HTTPS 的复制函数 function copyToClipboard(text) { if (navigator.clipboard && window.isSecureContext) { return navigator.clipboard.writeText(text); } else { let textArea = document.createElement("textarea"); textArea.value = text; textArea.style.position = "fixed"; textArea.style.left = "-999999px"; textArea.style.top = "-999999px"; document.body.appendChild(textArea); textArea.focus(); textArea.select(); return new Promise((res, rej) => { document.execCommand('copy') ? res() : rej(); textArea.remove(); }); } } }); </script> <footer> <div class="foot "> <div class="foot-top flexRow"> <div class="foot-left"> <div class="ftl-top flexRow"><span class="flexRow flexcenter">脚本</span>在线</div> <p class="ftl-down"> 智能赋能梦想,脚本构筑现实。我们致力于链接AI智能指令 与传统自动化,为您提供一站式、高效率的脚 本资产与生成 服务。 </p> </div> <div class="foot-right flexRow"> <div class="ftr-list flexColumn"> <p>核心板块</p> <span>AI脚本库</span> <span>自动化仓库</span> <span>脚本实验室</span> </div> <div class="ftr-list flexColumn"> <p>关于我们</p> <a href="/category/list_229_1.html" >最新游戏</a> <span>商务合作</span> <span>隐私政策</span> </div> <div class="ftr-list flexColumn"> <p>社区支持</p> <span >API文档</span> <a href="/category/list_334_1.html" >攻略资讯</a> <span>违规举报</span> </div> </div> </div> <div class="foot-down flexColumn"> <p>© 2026 jiaoben.net | 脚本在线 | 联系:jiaobennet2026@163.com</p> <p>备案:<a style="color: #7F7F7F;" href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">湘ICP备18025217号-11</a> </p> </div> </div> </footer> <div style="display:none;"> <script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?5d3cfe1f36b1988029fe82a0d475b20d"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> </div> </body> </html>