- 浏览: 34817 次
- 性别:
- 来自: 安徽省
最近访客 更多访客>>
文章分类
最新评论
-
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 861目录 理解和使用Zend表单装饰器:介绍 装饰器基础 装 ... -
开始使用 Zend_Layout
2010-07-20 19:44 1219目录 Zend_Layout介绍 使用Zend_Layou ... -
Zend Framework中的插件(Learning Zend Framework翻译3)
2010-07-20 16:19 966目录 介绍 使用插件 结论 介绍Zend Framework ... -
在Zend Framework中自动加载(Learning Zend Framework翻译2)
2010-07-20 15:40 2866目录 介绍 目标与设计 ... -
Zend Framework 1.10.4手册(ZF的快速启动五)
2010-07-20 14:23 1263为了使我们的留言本有用,我们需要一个可以提交新条目的表单。 ... -
Zend Framework 1.10.4手册(ZF的快速启动四)
2010-07-20 13:05 1788在我们开始之前,让我们思考这样一些问题:这些类将放在什么地方 ... -
Zend Framework 1.10.4手册(ZF的快速启动三)
2010-07-19 16:25 1593你可能注意到在前面一节提到视图脚本是 HTML 片断——不是 ... -
Zend Framework 1.10.4手册(ZF的快速启动二)
2010-07-19 11:27 1709为了创建您的项目 ... -
Zend Framework 1.10.4手册(ZF的快速启动一)
2010-07-19 11:20 1298Zend Framework Zend Framework ... -
Zend_Application
2010-07-15 11:13 1142注:适合ZF1.10 Zend_Appl ...
相关推荐
本教程将深入探讨Zend_View的使用方法、工作原理及其与其他组件的交互。 首先,让我们了解Zend_View的基本结构。在Zend Framework的库目录中,`Zend/View`包含了所有与视图相关的类。核心类`View.php`是视图组件的...
集成完成后,你可以在你的MVC应用程序中使用自定义的视图类,而不是默认的Zend_View。这样,你就可以充分利用Smarty的特性,同时享受Zend Framework带来的便利。 总结起来,通过实现`Zend_View_Interface`,我们...
不支持PDO 、MYSQLI的空间也可以用ZEND框架了 解包后到 Zend 的框架目录 library\Zend\Db 在PHP程序里 $db = Zend_Db::factory('Mysql', $params); 即把原来的 PDO_MYSQL 等改成 Mysql
- **组件参考**:详述每个组件的功能、用法和API,如Zend_Db用于数据库操作,Zend_View用于视图渲染。 - **最佳实践**:提供开发建议和优化技巧,帮助提升代码质量和性能。 - **示例代码**:包含丰富的代码示例,...
主要介绍了Zend Framework教程之分发器Zend_Controller_Dispatcher用法,结合实例形式详细分析了分发器Zend_Controller_Dispatcher的结构,功能,使用技巧与相关注意事项,需要的朋友可以参考下
当我们想要直接在代码中定义配置信息时,可以使用Zend_Config类来实现。例如,我们有一个配置数组定义了Web服务器地址和数据库连接信息,通过创建Zend_Config对象,配置信息就可以转换成对象属性的形式,这样就可以...
下面将详细阐述`Zend_Controller_Plugin`的使用方法和核心概念。 1. **插件基础** `Zend_Controller_Plugin_Abstract`是所有插件类的基类,提供了几个关键方法供子类重写以实现特定功能。这些方法包括: - `route...
例如,在给定的文件内容中,演示了如何使用Zend_Filter组件中的Zend_Filter_StringToLower过滤器类。Zend_Filter_StringToLower类可以将输入的字符串转换为全部小写字母。使用方法是在PHP脚本中首先引入需要的过滤器...
`Zend_Acl`使用树状结构来组织资源,这种结构使得权限管理更加直观和高效: - **添加资源**:可以通过调用`Zend_Acl`对象的`add()`方法来添加资源。 - **资源继承**:资源支持单继承,即一个资源只能继承自一个父...
Zend_db数据库操作课件
6. **视图脚本和辅助方法**:了解 `Zend_View` 如何工作,编写视图脚本,以及创建自定义的视图助手来增强模板功能。 7. **服务和API**:学习如何利用 `Zend_Service` 和 `Zend_Http` 访问外部API,集成第三方服务,...
•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 •...
此外,`query()`方法还支持参数绑定,即在查询中使用占位符,然后传递一个数组来替换这些占位符。这不仅提高了查询的效率,也进一步增强了安全性。 通过以上介绍,我们可以看出`Zend_Db_Adapter`不仅简化了数据库...
- **Zend_View**:视图脚本引擎,用于渲染视图模板,与控制器和模型分离。 **3. 服务和API集成** - **Zend_Gdata**:与Google Data API集成,如Gmail、YouTube等。 - **Zend_Service_Amazon**:与Amazon Web ...
例如,可以单独使用 `Zend_Db` 进行数据库操作,`Zend_View` 处理视图渲染,或者 `Zend_Controller` 实现路由和控制器功能。 **4. 对象关系映射(ORM):** Zend Framework 包含了 `Zend_Db` 和 `Zend_Doctrine`,...
使用Zend_Controller_Request时需要考虑几个注意事项: 1. 当设置请求属性时,应当使用set方法,而不是直接赋值,以便触发相关的逻辑处理。 2. 如果设置动作名称为null,需要使用setParam方法重新设置动作键对应的...
在IT行业中,邮件发送是常见的通信方式之一,而 Zend Framework 是一个广泛使用的PHP开发框架,其中 Zend_Mail 组件是用来处理邮件发送的。本篇将深入探讨“zend_mail乱码处理”的主题,以及如何解决这个问题。 ...
- **PHP**:使用内置的 `libcurl` 或 Zend Framework 中的 `zend_controller_request` 和 `zend_http`。 - **JavaScript**:使用 `XMLHttpRequest` 进行 AJAX 请求。 - **命令行工具**:使用 `curl` 命令。 - **...