Zend Framework 的view 组件是Zend_View。这个view 组件的功能是将action函数中的代码和显示页面的代码分开写。
Zend_View 工作原理
Zend_View 的基本使用方法是:
$view = new Zend_View();
$view->setScriptPath('/path/to/scripts');
echo $view->render('script.php');
很明显,如果我们把这段代码放到每一个action函数里面,将会产生很多不是很有意义的重复代码。我们希望在其他地方对view 进行初始化,然后在每个action 函数里面访问那些已经初始化的view 对象。Zend Framework 为此提供了一个叫 ViewRenderer 的 Action Helper。它负责在controller($this->view) 中初始化view 属性,并在action执行后渲染 view 代码。
对于渲染过程,首先 ViewRenderer 创建 Zend_View 对象,该对象会在 views/scripts/{controller name} 目录中查找和 action 名字相同,后缀为.phtml 待渲染的的view 脚本。也就是查找渲染的view 脚本为 views/scripts/{controller name}/{action_name}.phtml,要呈现的内容被添加到Response 对象的body中。Response 对象用于收集所有的 HTTP headers,body content
以及使用MVC模型产生的异常。然后前台控制器在最后调用的body content后面发送headers。这整个render的过程,Zend_Tool 在创建项目、或使用zf create controller 和 zf create action 添加controllers控制器、action 的时候,就已经帮我们完成了。
通用的HTML 代码:Layouts
很明显在views 文件中会有很多通用的HTML 代码,比如页面上重复的header 部分和footer部分,甚至sidebar边栏等。这是一个很常见的问题,Zend 框架使用 Zend_Layout 解决这个问题。Zend_Layout 可以允许我们将通用的header、footer和其他代码移动到布局视图文件代码中,这个布局视图代码中包含为要执行的action指定的view 代码。
布局文件默认放在application/layouts/ 目录,不过 Zend_Application 允许我们配置Zend_Layout这个资源。我们使用Zend_Tool 创建布局视图代码,它同时还知道如何正确地更新 application.ini 文件。在zftest 目录中我们执行下面的命令:
zf enable layout
现在Zend_Tool 已经创建了 application/layouts/scripts 文件夹,并在里面创建了一个layout.phtml 文件,同样也更新了application.ini文件,注意到是在[production]部分添加了一行:
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"
在controller action 方法结束之后,也就是整个调用循环的最后,Zend_Layout 将会渲染指定的layout。Zend_Tool 启用layout时,创建的是一个最基础的布局文件,只有一行代码用以显示action的view脚本:
<?php echo $this->layout()->content; ?>
下面我们添加网站必须的一些代码,打开layouts.phtml 文件用下面的代码替换:
zf-tutorial/application/layouts/scripts/layout.phtml
<?php
$this->headMeta()->appendHttpEquiv('Content-Type', 'text/html;charset=utf-8');
$this->headTitle()->setSeparator(' - ');
$this->headTitle('Zend Framework Tutorial');
echo $this->doctype(); ?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<?php echo $this->headMeta(); ?>
<?php echo $this->headTitle(); ?>
</head>
<body>
<div id="content">
<h1><?php echo $this->escape($this->title); ?></h1>
<?php echo $this->layout()->content; ?>
</div>
</body>
</html>
这个布局文件包含非常标准的“外包”的HTML 代码。因为这是一个普通的PHP 文件,我们可以在里面写php代码。里面有一个$this变量,它是在bootstrapping过程中创建的view 对象的一个实例。我们可以使用它来获取已经赋值给view 的数据,以及调用方法。这个方法(即view helpers)返回我们可以输出的字符串。
首先我们为web网页的head部分配置一些view helpers 方法,然后输出正确的doctype。在<body>
部分,我们创建一个div及包含title的<h1>
标签。为了获取当前action要显示的view 代码,我们使用echo $this->layout()->content;
这个layout() view helper的内容占位符。这表明action的view 代码是在layout的view代码之前执行的。
在渲染任何view 脚本之前,我们要为网页设置好doctype。因为action的 view脚本更早执行,它必须知道现在使用的是哪一个doctype。对于Zend_Form也是如此。那么在哪里设置 doctype 呢?打开 application.ini文件,在[production]部分添加一行:
resources.view.doctype = "XHTML1_STRICT"
doctype() 这个view helper 现在就可以输出正确的doctype了,然后 Zend_Form 等组件生成和它相兼容的HTML 代码。
分享到:
相关推荐
本文实例讲述了Zend Framework基本页面布局方法。分享给大家供大家参考,具体如下: Zend Framework 的页面布局模块——Zend_Layout——既可以跟 MVC 一起使用,也可以单独使用。本文只讨论与 MVC 一起使用的情况。 ...
您的标记和内容存储在views/文件夹中,布局位于views/layouts ,尽管这两个值都可以在config/config.php更改。 由于渲染引擎是 PHP,您可以使用任何您喜欢的控制结构和运算符。 安装 composer install 初始设置 ...
1.首先修改application配置文件resources.layout.layoutPath = APPLICATION_PATH “/layouts/scripts”指定布局文件的位置 2.然后最简单的方法就是修改引导文件 bootstrap.php文件添加一个自动执行的方法:protected...
android 窗口布局 layouts 下的各种控件 RelativeLayout gridLayout linerLayout frameLayout
layouts 根目录下的所有文件都属于个性化布局文件,可以在页面组件中利用 layout 属性来引用。 pages文件下组件的layout属性值为layout文件下的所对应的布局组件的名称 请确保在布局文件里面增加 <nuxt> 组件用于...
Layer Visualizer A simple web-based 3D layer...Also included is a layout XML tree visualizer, useful for teaching layouts. Check the example code (live demo) or template code (live demo) to get started.
布局视图的分离,源码FreeFlow,Android布局引擎把布局从View容器中分离出来,以管理滚动视图和视图的重用。随着数据和布局的更改,使用FreeFlow能轻松地创建自定义布局和出色的动画过渡效果。A layout engine for ...
Android library that adds a curve at the below of image views and relative layouts. CrescentoImageView and CrescentoContainer are the image view and relative layout respectively. You can change the ...
Extend the standard UI widget framework by creating Custom views Add complex rendering, animations, and interactions to your views Optimize performance and decrease battery usage Implement custom ...
Thymeleaf Examples: Layouts This is an example project containing code used in the "Thymeleaf Layouts" tutorial. The project was created using Spring MVC 4 Quickstart Maven archetype: ...
i3-layouts是一个小程序,可在i3工作区上强制执行动态布局。 i3-layouts具有6种可配置的布局: vstack :一个主窗口,带有垂直的窗口堆栈。 hstack :一个主窗口,带有水平堆叠的窗口。 spiral :每个新窗口都...
Construction of complex layouts on Android, major layouts available on the platform, as nest them to permit more complex graphical structures are used and how to extend them to give more ...
composer require tatemz/genesis-layouts dev-master如何使用创世纪布局特征Genesis Layouts 分为两部分,post(或post-type)布局和页面布局。 帖子布局最好被描述为在循环内作为标记输出的任何帖子类型。 当然,...
A Lightweight Evaluation Framework for Table Layouts in MapReduce Based Query Systems
Android-Layouts part
cwac-layouts,CWAC布局:自定义容器,简明编码.zip
允许Trello列表垂直或网格显示。...Trello的列表布局扩展程序在Chrome工具栏上添加了一个按钮,可通过单击该图标将Trello板布局从水平切换为网格,再切换为垂直。 支持语言:English (United States)
- SwiftUI 原生视图、容器、自定义视图的使用和组合; - SwiftUI 动画加持; - SwiftUI 基本概念、设计理念以及哲学的示例融合; 内容包括: ├── Adaptive-Views ├── App-State-In-SwiftUI ├── Blending ...
Netgen Layouts标准块和布局该软件包为Netgen Layouts提供了一组最常用的块和布局,用于构建内容丰富的网站。 这是安装Netgen Layouts的起点。 阅读有关如何将完整的Netgen Layouts安装到基于Symfony的应用程序的。 ...
该项目包括3个部分: 布局提供程序,管理窗口和布局的状态布局客户端,公开用于应用程序的API,以控制快照和停靠以及保存和还原Layouts演示应用程序,展示了OpenFin Layouts的不同功能依存关系使用布局服务的应用...