在前面的一节中,我们学习了关于 placeholder() 视图帮助器,以及如何使用它来合并定制的内容。在本节中,我们会研究一下 Zend Framework 内置的占位符,以及如何使用它们来创建更复杂的复合模板。
大部分的内置占位符是为了在你的模板内容中的 <head> 部分产生内容——一个你不能通过你的应用程序的视图脚本直接操作的区域,但是它是你想施加影响的。举例来说:你可能希望每一个页面的标题包含一定的内容,但是这些内容是基于控制器和/或行为的;你可能希望基于你所在的应用程序的不同的部分来指定 CSS 文件;你可能需要在不同的时间载入不同的 JavaScript 脚本;或者你希望设置 DocType 声明。
Zend Framework 为这些情形内置了占位符,甚至更多。
设置 DocType
DocType 声明要想记住是很麻烦的,同时,它被包括进你的文档以确保浏览器正确呈现你的内容是最基本的。doctype() 视图帮助器允许你使用简单的字符串记忆术来指定希望的 DocType;另外,其它的帮助器将会查询 doctype() 帮助器来确保输出和被请求的 DocType 一致。
举一个例子,如果你想使用 XHTML1 Strict DTD,你可以简单的指定:
在可选的记忆短语中,你会找到这些常用的类型:
你可以赋值给类型然后在一个单独的调用中呈现声明:
然而,更好的办法是在你的 bootstrap 里面指定类型,然后在你的模板中呈现它。试着把以下添加到你的 bootstrap 类中:
然后,在你的模板脚本中,在文件的顶部简单的输出帮助器就可以了:
这将确保你的关注 DocType 的视图帮助器呈现合适的标记,确保模板在呈现之前设置好类型,同时提供了一个单独改变 DocType 类型的地方。
指定页面标题
经常,一个网站会把网站名字或者公司名字包括在页面标题内,然后基于所处网站内的位置再添加额外的信息。举例来说,zend.com 网站所有页面的标题都包含有 Zend.com 这个字符串,在它之前添加基于页面的信息:Zend Server - Zend.com。在 Zend Framework 内部,headTitle() 视图帮助器可以帮助简化这个工作。
最简单的,headTitle() 帮助器允许你为 >title< 标签合并内容;当你输出它,它然后收集基于片断被添加的顺序的信息。你可以使用 prepend() 和 append() 来控制顺序,使用 setSeparator() 方法来为各个片断之间提供一个分割符。
典型的,你应该在你的 bootstrap 中指定对于所有页面都适用的片断,和我们如何定义 doctype 是一样的。在这个例子中,我们会定义一个 _initPlaceholders() 方法来操作许多的占位符,然后指定一个初始的标题和一个分割符。
在一个视图脚本中,我们可能想添加另外一个片断:
在我们的模板中,我们将简单的输出 headTitle() 帮助器:
这将会产生以下的输出:
用 headLink 指定样式表
好的 CSS 开发者会经常为整个网站创建一个通用的风格样式表,和为指定的部门或者网页创建各自的风格样式表,有条件的载入后者,这样可以减少每一次请求所需要传递的数据数量。headLink() 占位符在你的应用程序中制造这样有条件的细微的风格样式组合。
为了完成这个工作,headLink() 定义了大量的虚拟的方法(通过重载)来使过程变得细微。我们将要关注的是 appendStylesheet() 和 prependStylesheet()。这两个分别接受4个参数,$href(到风格样式表的相对路径),$media(MIME 类型,默认是 text/css),$conditionalStylesheet(用来评估使用哪个风格样式表而指定的条件),和 $extras(一个索引数组的键和值对,通常用来指定 media 的一个外键)。在大多数例子中,你只要简单的指定第一个参数,到风格样式表的相对路径。
在我们的例子中,我们将假设全部的网页需要加载位于 /styles/site.css 的风格样式表(相对于文档根目录);我们会在我们的 _initPlaceholders() bootstrap 方法中指定它。
之后,在一个控制器或者特定行为的视图脚本中,我们可以添加更多的风格样式:
在我们的模板视图脚本中,再一次,我们只需要简单的输出占位符:
这将会产出以下的输出:
使用 headScript 添加脚本
另外一个防止页面载入时间过长的常用策略是只有在必要的时候才载入 JavaScript。这就是说,你可能需要几个层次的脚本:一个是网站逐渐展开的菜单,另外一个是特定网页内容。在这些情形中,headScript() 提供了解决办法。
和 headLink() 帮助器类似,headScript() 提供了把脚本附加和前置到收集物上的功能,然后输出整套内容。它提供了可以指定自己加载的脚本文件或者精确的 JaveScript 扩展性能。你还有通过 captureStart() / captureEnd() 来采集 JavaScript 的选择,这将允许你只要简单内联 JavaScript,而不是向你的服务器请求额外的调用。
如同 headLink(),headScript() 通过以一种当指定合并的事物的时候方便的方式重载提供了虚拟的方法,通用的方法包括 prependFile(),appendFile(),prependScript(),和 appendScript()。开头的两个允许你指定在 <script> 标签中 $src 属性引用的文件;后两个将会接受提供的内容,并把这些内容在一个 <script> 标签中按文本 JavaScript 呈现。
在这个例子中,我们将指定一个脚本,/js/site.js 这个脚本将在每一个页面加载;为了达到这个,我们要更新我们的 _initPlaceholders() bootstrap 方法。
在一个视图脚本内,我们可能然后把一个额外的脚本文件增加到源,或者把一些 JavaScript 抓取到我们的文档中。
在我们的模板脚本中,我们然后简单的输出这个占位符,就象我们对其它的占位符做的一样:
这将产生以下输出:
<script type="text/javascript"
src="/js/site.js
"></script>
<script type="text/javascript"
src="/js/user-list.js
"></script>
<script>
site = {
baseUrl: "<?php
echo $this->
baseUrl()
?>
"
};
</script>
注意:关联脚本变体类型
许多浏览器直到在 <head> 标签中所引用的全部脚本和风格样式表加载完毕之前会经常不显示页面内容。如果你有一些这样的指令,它会早影响到某人多快可以开始真正浏览网页。
针对这个,其中的一个办法是在你的文档的 <body> 标签关闭之前发表你的 <script> 标签。(此方法被Y! Slow project 特别指定)。 Zend Framework 通过两种办法来支持这个:
你可以在你的模板脚本中的任何你想的位置呈现 headScript() 标签;不要因为名字有 head 就意味它只能在那个位置呈现。
另外,你可以使用 inlineScript() 帮助器,这是 headScript() 简单变体,保留了相同的行为,但是使用了一个独立的注册。
分享到:
相关推荐
- **Zend_View**:视图脚本引擎,用于渲染视图模板,与控制器和模型分离。 **3. 服务和API集成** - **Zend_Gdata**:与Google Data API集成,如Gmail、YouTube等。 - **Zend_Service_Amazon**:与Amazon Web ...
13. **Zend_View**:MVC模式中的“视图”部分,负责呈现和格式化数据。 14. **Zend_XmlRpc**:实现XML-RPC协议,支持创建XML-RPC客户端和服务器。 15. **Zend_Acl**:提供访问控制列表(ACL),实现角色对资源的...
在本文中,我们将深入探讨如何在Zend Framework中实现Zend_View与Smarty模板系统的集成。首先,我们需要理解这两个组件的基本概念。 **Zend Framework** 是一个广泛使用的PHP框架,它提供了构建MVC(模型-视图-控制...
本教程将深入探讨Zend_View的使用方法、工作原理及其与其他组件的交互。 首先,让我们了解Zend_View的基本结构。在Zend Framework的库目录中,`Zend/View`包含了所有与视图相关的类。核心类`View.php`是视图组件的...
不支持PDO 、MYSQLI的空间也可以用ZEND框架了 解包后到 Zend 的框架目录 library\Zend\Db 在PHP程序里 $db = Zend_Db::factory('Mysql', $params); 即把原来的 PDO_MYSQL 等改成 Mysql
此外,`query()`方法还支持参数绑定,即在查询中使用占位符,然后传递一个数组来替换这些占位符。这不仅提高了查询的效率,也进一步增强了安全性。 通过以上介绍,我们可以看出`Zend_Db_Adapter`不仅简化了数据库...
使用Zend_Controller_Request时需要考虑几个注意事项: 1. 当设置请求属性时,应当使用set方法,而不是直接赋值,以便触发相关的逻辑处理。 2. 如果设置动作名称为null,需要使用setParam方法重新设置动作键对应的...
在Zend Framework中,`Zend_Controller_Plugin`是一个强大的机制,允许开发者在应用程序的不同阶段插入自定义的行为,以扩展和增强其功能。插件系统提供了一种灵活的方式,可以在请求生命周期的关键点进行干预,如...
在本教程中,我们将深入了解Zend Framework框架中的Zend_Config组件,这是一款专门用于处理应用配置信息的工具。通过实例讲解,我们将会掌握Zend_Config组件的基本用法,并学习如何操作不同类型配置文件的方法。 ...
另一方面,要在另一个项目中使用`Zend_XmlRpc_Client`,我们需要创建一个新的实例,指定服务器的URL。然后,通过`getProxy`方法获取代理对象,使用`__call`方法来调用远程服务器的方法。在示例中,我们尝试发送一封...
3. **Zend_View**:负责呈现视图,与控制器分离,支持模板引擎,方便布局和样式控制。 4. **Zend_Form**:处理表单验证和渲染,提供了丰富的验证规则和元素类型。 5. **Zend_Auth**和**Zend_Acl**:处理用户认证和...
5. **Zend_View**:视图脚本引擎,负责将数据渲染成 HTML 或其他格式的输出。 6. **Zend_Session**:处理会话数据,提供会话管理功能。 7. **Zend_Cache**:实现缓存机制,提高应用性能。 8. **Zend_Mail**:处理...
2. **Zend_View**:视图层组件,帮助开发者实现数据和显示逻辑的分离。 3. **Zend_Db**:数据库抽象层,支持多种数据库系统,提供统一的接口进行数据库操作。 4. **Zend_Session**:会话管理,提供安全的会话处理和...
- **组件参考**:详述每个组件的功能、用法和API,如Zend_Db用于数据库操作,Zend_View用于视图渲染。 - **最佳实践**:提供开发建议和优化技巧,帮助提升代码质量和性能。 - **示例代码**:包含丰富的代码示例,...
- **IntroductiontoGetopt**:介绍了如何使用 `Zend_Console_Getopt` 组件来解析命令行参数。 - **DeclaringGetoptRules**: - **DeclaringOptionswiththeShortSyntax**:使用短语法声明选项。 - **...
3. **Zend_View**:视图引擎,用于渲染HTML和其他输出内容,支持模板语法和助手方法,简化视图层的开发。 4. **Zend_Form**:处理用户输入和验证,提供了强大的表单构建和验证功能,包括各种预定义的元素、验证规则...
- **使用Zend_Auth**:提供具体的使用示例和指南。 - **用数据库表认证**: - **高级使用**:深入探讨如何将认证结果持久化至数据库表中。 - **摘要式认证**: - **规范(Specifics)**:详细介绍摘要式认证的...
7. **Zend_View**:视图层组件,负责渲染输出,与控制器解耦,使视图逻辑保持简洁。 8. **Zend_Session** 和 **Zend_Cookie**:提供会话管理和cookie处理,为用户状态管理提供便利。 9. **Zend_Translate**:提供...
2. **Zend_View**:负责渲染视图,支持模板引擎,提供视图助手。 3. **Zend_Model**:数据访问层,提供了数据库操作、ActiveRecord模式等。 4. **Zend_Db**:数据库抽象层,提供数据库适配器、查询构建器等。 5. ...
主要介绍了Zend Framework教程之分发器Zend_Controller_Dispatcher用法,结合实例形式详细分析了分发器Zend_Controller_Dispatcher的结构,功能,使用技巧与相关注意事项,需要的朋友可以参考下