- 浏览: 33911 次
- 性别:
- 来自: 安徽省
最近访客 更多访客>>
文章分类
最新评论
-
Neao:
不错,确实是这样,非常感谢。
在下补充一下安装过程中可能出 ...
源码安装Mysql,补装innodb引擎方法
目录
Zend_View 占位符:介绍
占位符的基本使用
标准占位符
视图标准的小结
Zend_View 占位符:介绍
在前面的一章中,我们主要的看了 Two Step View 模式,它允许你在一个全网站的模板中嵌入独立的应用程序的视图。在那一章的结尾,然而,我们讨论到了一些不足:
- 你如何改变页面标题?
- 你如何把另外的脚本或者风格样式表注入全网站模板中?
- 你如何创建一个横幅以及如何展示它?如果有些内容对于横幅来说是无条件的,有些内容则是有条件的?
这些问题将由 Composite View 来回答。那个模式的一个办法是为全网站模板提供提示或者内容。在 Zend Framework 中,这将通过专门的视图帮助器名叫 占位符 达到。占位符允许你合并内容,然后把合并的内容展示在其它地方。
占位符基本用法
Zend Framework 定义了一个通用的 placeholder() 视图帮助器你可以用来定制你所需要的占位符。它也提供大量专门的经常所需功能的占位符应用,例如指定 DocType 声明,文档的标题,以及更多。
所有的占位符在总体上运行是一致的。他们是容器,这样以便你能把它们当作收集物来执行。使用它们,你可以做到:
- 附加或者预加物体到收集物上
- 用一个单独的值来取代整个收集物。
- 指定一个字符串,当呈现收集物的时候用它来前置输出
- 指定一个字符串,当呈现收集物的时候用它来分割事物
- 把内容采集到收集物中
- 呈现合并的内容
典型的,你不用参数就可以调用这个帮助器,它将返回一个你可以操作的容器。然后你可以输出这个容器来呈现它,或者调用它的方法来配置和填充它。如果容器是空的,呈现它会简单的返回一个空的字符串;否则,内容将会根据你配置的规则被合并。
举例说明,让我们创建一个由一些块内容组成的横幅。你极可能提前知道各个块的结构,让我们假设此例中它看起来是这样的:
-
<div class="sidebar">
-
<div class="block">
-
<p>
-
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus
-
consectetur aliquet odio ac consectetur. Nulla quis eleifend
-
tortor. Pellentesque varius, odio quis bibendum consequat, diam
-
lectus porttitor quam, et aliquet mauris orci eu augue.
-
</p>
-
</div>
-
<div class="block">
-
<ul>
-
<li><a href="/some/target">Link</a></li>
-
<li><a href="/some/target">Link</a></li>
-
</ul>
-
</div>
-
</div>
基于控制器和行为,内容会有所不同,但是结构是一样的。这我们首先为我们的 bootstrap 以一种资源方法来建立横幅。
-
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
-
{
-
// ...
-
-
protected function _initSidebar()
-
{
-
$this->bootstrap('View');
-
$view = $this->getResource('View');
-
-
$view->placeholder('sidebar')
-
// "prefix" -> markup to emit once before all items in collection
-
->setPrefix("<div class=\"sidebar\">\n <div class=\"block\">\n")
-
// "separator" -> markup to emit between items in a collection
-
->setSeparator("</div>\n <div class=\"block\">\n")
-
// "postfix" -> markup to emit once after all items in a collection
-
->setPostfix("</div>\n</div>");
-
}
-
-
// ...
-
}
上面定义了一个占位符,横幅,没有事物。但是它按照我们的要求创建了这个占位符基本的标记结构。
现在,这我们假设全部行为的用户控制器,我们想在顶部出现一个包括一些信息的块。我们可以通过两种方法来完成:(a)我们可以在控制器的 preDispatch() 方法上增加内容,或者(b)我们可以从 preDispatch() 方法内部中呈现一个视图脚本。我们使用(b)计划,因为它遵循一个更多合适的注意力分离(把和视图相关的逻辑和功能留在一个视图脚本内)。
我们会这个视图脚本命名为 user/_sidebar.phtml,用以下内容填满它:
-
<?php $this->placeholder('sidebar')->captureStart() ?>
-
<h4>User Administration</h4>
-
<ul>
-
<li><a href="<?php $this->url(array('action' => 'list')) ?>">
-
List</a></li>
-
<li><a href="<?php $this->url(array('action' => 'create')) ?>">
-
Create</a></a></li>
-
</ul>
-
<?php $this->placeholder('sidebar')->captureEnd() ?>
以上的例子使用了占位符的内容采集功能。默认的,内容被当作一个新事物附加到容器内,让我们合并内容。这个例子为了创建标记,使用了视图帮助器和静态 HTML,内容然后被采集然后附加进占位符本身。
为了唤醒以上视图脚本,我们要把以下内容写进我们的 preDispatch() 方法中:
-
class UserController extends Zend_Controller_Action
-
{
-
// ...
-
-
public function preDispatch()
-
{
-
// ...
-
-
$this->view->render('user/_sidebar.phtml');
-
-
// ...
-
}
-
-
// ...
-
}
注意我们没有采集被呈现的值,这没有必要,因为那个视图整个正在被采集进一个占位符内。
现在,让我们假设我们的在同一个控件器中的 视图 行为需要呈现一些信息。在 user/view.phtml 视图脚本中,我们可能有以下的代码片断:
-
$this->placeholder('sidebar')
-
->append('<p>User: ' . $this->escape($this->username) . '</p>');
这个例子使用了 append() 方法,把一些简单的标记传递给它来合并。
最后,让我们修改我们的模板视图,并让它呈现占位符:
-
<html>
-
<head>
-
<title>My Site</title>
-
</head>
-
<body>
-
<div class="content">
-
</div>
-
</body>
-
</html>
对于没有被横幅占位符填充的控制器和行为而言,不会输出内容,而对于被填充的而言,然而,输出占位符将会按照我们在 bootstrap 中制定的规则,我们在整个应用程序内合并的内容来呈现内容。对于 /user/view 行为这个个案,个假设一个用户名为 matthew,我们将按照以下来获得横幅的内容(为了易于阅读,已经做了格式化):
-
<div class="sidebar">
-
<div class="block">
-
<h4>User Administration</h4>
-
<ul>
-
<li><a href="/user/list">List</a></li>
-
<li><a href="/user/create">Create</a></a></li>
-
</ul>
-
</div>
-
<div class="block">
-
<p>User: matthew</p>
-
</div>
-
</div>
通过结合占位符和模板脚本,你可以做大量的事情;尝试它们,阅读相关章节来获取更多信息。
标准占位符
在前面的一节中,我们学习了关于 placeholder() 视图帮助器,以及如何使用它来合并定制的内容。在本节中,我们会研究一下 Zend Framework 内置的占位符,以及如何使用它们来创建更复杂的复合模板。
大部分的内置占位符是为了在你的模板内容中的 部分产生内容——一个你不能通过你的应用程序的视图脚本直接操作的区域,但是它是你想施加影响的。举例来说:你可能希望每一个页面的标题包含一定的内容,但是这些内容是基于控制器和/或行为的;你可能希望基于你所在的应用程序的不同的部分来指定 CSS 文件;你可能需要在不同的时间载入不同的 JavaScript 脚本;或者你希望设置 DocType 声明。
Zend Framework 为这些情形内置了占位符,甚至更多。
设置 DocType
DocType 声明要想记住是很麻烦的,同时,它被包括进你的文档以确保浏览器正确呈现你的内容是最基本的。doctype() 视图帮助器允许你使用简单的字符串记忆术来指定希望的 DocType;另外,其它的帮助器将会查询 doctype() 帮助器来确保输出和被请求的 DocType 一致。
举一个例子,如果你想使用 XHTML1 Strict DTD,你可以简单的指定:
$this->doctype('XHTML1_STRICT');
在可选的记忆短语中,你会找到这些常用的类型:
XHTML 1.0 Strict
XHTML 1.0 Transitional
HTML 4.01 Strict
HTML 4.01 Loose
HTML 5
你可以赋值给类型然后在一个单独的调用中呈现声明:
echo $this->doctype('XHTML1_STRICT');
然而,更好的办法是在你的 bootstrap 里面指定类型,然后在你的模板中呈现它。试着把以下添加到你的 bootstrap 类中:
-
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
-
{
-
protected function _initDocType()
-
{
-
$this->bootstrap('View');
-
$view = $this->getResource('View');
-
$view->doctype('XHTML1_STRICT');
-
}
-
}
然后,在你的模板脚本中,在文件的顶部简单的输出帮助器就可以了:
-
<html>
-
<!-- ... -->
这将确保你的关注 DocType 的视图帮助器呈现合适的标记,确保模板在呈现之前设置好类型,同时提供了一个单独改变 DocType 类型的地方
指定页面标题
经常,一个网站会把网站名字或者公司名字包括在页面标题内,然后基于所处网站内的位置再添加额外的信息。举例来说,zend.com 网站所有页面的标题都包含有 Zend.com 这个字符串,在它之前添加基于页面的信息:Zend Server – Zend.com。在 Zend Framework 内部,headTitle() 视图帮助器可以帮助简化这个工作。
最简单的,headTitle() 帮助器允许你为 >title< 标签合并内容;当你输出它,它然后收集基于片断被添加的顺序的信息。你可以使用 prepend() 和 append() 来控制顺序,使用 setSeparator() 方法来为各个片断之间提供一个分割符。
典型的,你应该在你的 bootstrap 中指定对于所有页面都适用的片断,和我们如何定义 doctype 是一样的。在这个例子中,我们会定义一个 _initPlaceholders() 方法来操作许多的占位符,然后指定一个初始的标题和一个分割符。
之后,在一个控制器或者特定行为的视图脚本中,我们可以添加更多的风格样式
发表评论
-
理解和使用 Zend 表单装饰器(一)
2010-07-23 20:06 841目录 理解和使用Zend表单装饰器:介绍 装饰器基础 装 ... -
开始使用 Zend_Layout
2010-07-20 19:44 1195目录 Zend_Layout介绍 使用Zend_Layou ... -
Zend Framework中的插件(Learning Zend Framework翻译3)
2010-07-20 16:19 938目录 介绍 使用插件 结论 介绍Zend Framework ... -
在Zend Framework中自动加载(Learning Zend Framework翻译2)
2010-07-20 15:40 2833目录 介绍 目标与设计 ... -
Zend Framework 1.10.4手册(ZF的快速启动五)
2010-07-20 14:23 1237为了使我们的留言本有用,我们需要一个可以提交新条目的表单。 ... -
Zend Framework 1.10.4手册(ZF的快速启动四)
2010-07-20 13:05 1762在我们开始之前,让我们思考这样一些问题:这些类将放在什么地方 ... -
Zend Framework 1.10.4手册(ZF的快速启动三)
2010-07-19 16:25 1568你可能注意到在前面一节提到视图脚本是 HTML 片断——不是 ... -
Zend Framework 1.10.4手册(ZF的快速启动二)
2010-07-19 11:27 1672为了创建您的项目 ... -
Zend Framework 1.10.4手册(ZF的快速启动一)
2010-07-19 11:20 1268Zend Framework Zend Framework ... -
Zend_Application
2010-07-15 11:13 1106注:适合ZF1.10 Zend_Appl ...
相关推荐
不支持PDO 、MYSQLI的空间也可以用ZEND框架了 解包后到 Zend 的框架目录 library\Zend\Db 在PHP程序里 $db = Zend_Db::factory('Mysql', $params); 即把原来的 PDO_MYSQL 等改成 Mysql
本文实例讲述了Zend Framework教程之视图组件Zend_View用法。分享给大家供大家参考,具体如下: Zend_View是Zend Framework的视图组件,MVC中的视图层。 Zend_View也是应用的直接对用户展示的页面。这里介绍一下Zend...
Zend_Studio和Zend_DebuggerZend_Debugger的安装
Zend_XmlRpc使用实例,zend 轻松实现webservice功能,对外接口
•Getting Started Zend_View Placeholders •Understanding and Using Zend Form Decorators •Getting Started with Zend_Session, Zend_Auth, and Zend_Acl •Getting Started with Zend_Search_Lucene •...
Zend_framework_in_REST.pdf
Zend_db数据库操作课件
Zend_Framework_zh(2011.07.18).chm
一个简单的zend_acl和Zend_auth的应用。对于初学zf框架的人有一定的帮助。
Zend_Framework 手册 中文版 中文是部分翻译 版本是截止目前最新的,当然在不久的将来肯定会被更新掉,下载的朋友注意了。
Zend_Framework_EN_20090313,Zend_Framework_EN_20090313
zend_studio详细使用教程.doc
使用步骤:首先在Controller中建立一个Zend_View实例,并将需要的变量传递给它;之后,Controller通知Zend_View显示一个特定的视图, 生成View输出的内容。 实例之控制器代码脚本: <?php //使用模型来获取书籍...
zend_studio使用
Zend_Framework_ZH_20090313.chm,Zend_Framework_ZH_20090313.chm
zend_studio详细使用教程
这个是一个关于zend_soap的实例,非常的有用,而且是已经可以用的,本人已经经过测试,绝对没有问题,具体的访问路径需要改下,根据个人的虚拟主机设定的地址更改
Zend_Framework_Zh20090702版(zf1.8) 5 Zend_Framework_Zh20090702版(zf1.8)同官方网站 http://www.framework.zend.com/manual/zh/ Zend_Framework_Zh20
3.1.4. 使用Zend_Auth 3.2. 数据库表认证 3.2.1. 简介 3.2.2. 高级使用:持久一个 DbTable 结果对象 3.2.3. 高级用法示例 3.3. 摘要式认证 3.3.1. 简介 3.3.2. 规范(Specifics) 3.3.3. 身份(Identity) ...
Zend_Mail邮件发送,zend 自带邮件插件使用