程序员人生 网站导航

Zend Framework教程-Zend_Helpers-视图助手-常见的视图助手-Doctype、HeadLink、HeadMeta、He

栏目:ZendFramework时间:2013-12-02 10:07:43
以下是官方提供的文档说明,并带有例子说明。已经很详细。这里不再详细解释。

文档类型助手(Doctype Helper)

有效的HTML和XHTML文档应当包括一个 DOCTYPE 声明。但是文档类型声明很难记忆,而且会影响到文档中的特定元素的解析(例如,在 <script> 和 <style> 元素中转义的CDATA)。

Doctype 助手允许指定下列类型之一:

  • XHTML11

  • XHTML1_STRICT

  • XHTML1_TRANSITIONAL

  • XHTML1_FRAMESET

  • XHTML_BASIC1

  • HTML4_STRICT

  • HTML4_LOOSE

  • HTML4_FRAMESET

你也可以指定一个自己定制的带有良好结构的文档类型。

Doctype助手是 占位符助手 的一个具体的实现。

Example #8 Doctype 助手的基本用法

在任何时候都可以指定 doctype。然而,依赖 doctype 输出的助手只在你设置后才认识它,所以最简单的用法是在 bootstrap 脚本中指定:

$doctypeHelper = new Zend_View_Helper_Doctype();$doctypeHelper->doctype('XHTML1_STRICT');

然后在布局脚本中输出:

<?php echo $this->doctype() ?>

Example #9 获取 Doctype

如果需要知道文档类型,可以在由调用助手返回的对象中调用getDoctype()

<?php$doctype = $view->doctype()->getDoctype();?>

很常见地,你需要知道doctype是否XHTML;那么,isXhtml()方法已经足够:

<?phpif ($view->doctype()->isXhtml()) {    // do something differently}?>

HeadMeta 助手

HTML <meta>元素用来提供关于HTML文档的 meta 信息-如关键字,文档字符集,缓冲的 pragama 等。Meta标签可以是'http-equiv' 或 'name' 类型,必须包含'content'属性,并且也可以有 'lang' 或 'scheme' 修饰属性。

HeadMeta 助手提供下列方法来设置和添加 meta 标签:

  • appendName($keyValue, $content, $conditionalName)

  • offsetSetName($index, $keyValue, $content, $conditionalName)

  • prependName($keyValue, $content, $conditionalName)

  • setName($keyValue, $content, $modifiers)

  • appendHttpEquiv($keyValue, $content, $conditionalHttpEquiv)

  • offsetSetHttpEquiv($index, $keyValue, $content, $conditionalHttpEquiv)

  • prependHttpEquiv($keyValue, $content, $conditionalHttpEquiv)

  • setHttpEquiv($keyValue, $content, $modifiers)

$keyValue 参数用来定义'name'的值或'http-equive'键;$content 是'content' 键的值,$modifiers 是可选的包含'lang' 和/或 'scheme'键的联合数组。

也可以用 headMeta() 助手方法来设置 meta 标签:headMeta($content, $keyValue, $keyType = 'name', $modifiers = array(), $placement = 'APPEND')$keyValue 是指定在 $keyType 里的键的内容,$keyType 应该是'name' 或 'http-equiv'。$placement 可以是 'SET' (覆盖所有先前存储的值), 'APPEND' (添加到栈尾)或 'PREPEND'(添加到栈顶)。

HeadMeta 覆盖每个 append()offsetSet()、 prepend() 和 set() 来加强上面列出的特殊方法的用法。在内部,它存储每个条目为 stdClass 令牌,它稍后用 itemToString() 方法来序列化。这允许在堆栈的条目中执行检查,并可选地通过修改对象返回来修改这些条目。

HeadMeta助手是 占位符助手 的一个具体实现。

Example #11 HeadMeta 助手基本用法

你可以在任何时候指定一个新的meta标签。例如指定客户端缓冲规则或SEO关键字。

例如,如果想指定SEO关键字,要创建带有名为'keywords'和内容(在页面上和关键字有关联的)的meta名称标签:

<?php // setting meta keywords$this->headMeta()->appendName('keywords', 'framework php productivity');?>

如果想设置一些客户端缓冲规则,最好设置带有想执行的规则的 http-equiv 标签:

<?php // 禁止客户端缓存$this->headMeta()->appendHttpEquiv('expires', 'Wed, 26 Feb 1997 08:21:57 GMT')                 ->appendHttpEquiv('pragma', 'no-cache')                 ->appendHttpEquiv('Cache-Control', 'no-cache');?>

meta标签的另一个流行用法是设置内容类型,字符集和语言:

<?php // setting content type and character set$this->headMeta()->appendHttpEquiv('Content-Type', 'text/html; charset=UTF-8')                 ->appendHttpEquiv('Content-Language', 'en-US');?>

最后一个例子,可以使用"meta refresh" 来让页面转向,一个简单的办法来显示过渡消息:

<?php // 设置以下meta可使页面3秒钟后转向一个新的url$this->headMeta()->appendHttpEquiv('Refresh', '3;URL=http://www.some.org/some.html');?>

在布局脚本(layout)中放置所有meta标签后,简单地echo助手,把所有内容输出:

<?= $this->headMeta() ?>

HeadScript 助手

HTML <script> 元素用来提供内嵌的客户端脚本元素或链接到远程包含客户端脚本代码的资源。你可以用HeadScript 助手来管理它们。

HeadScript 助手支持下列方法来设置和添加脚本:

  • appendFile($src, $type = 'text/javascript', $attrs = array())

  • offsetSetFile($index, $src, $type = 'text/javascript', $attrs = array())

  • prependFile($src, $type = 'text/javascript', $attrs = array())

  • setFile($src, $type = 'text/javascript', $attrs = array())

  • appendScript($script, $type = 'text/javascript', $attrs = array())

  • offsetSetScript($index, $script, $type = 'text/javascript', $attrs = array())

  • prependScript($script, $type = 'text/javascript', $attrs = array())

  • setScript($script, $type = 'text/javascript', $attrs = array())

对于所有*File()方法,$src 是要加载的脚本的远程位置,常常以 URL 或路径的形式表示。 对于所有*Script()方法,$script是客户端你想用于元素中的脚本。

HeadScript也允许抓取脚本,然后放到其它地方,如果你想通过程序生成客户端脚本,这将很有用。下面的例子里有它的用法。

最后,你也可以用 headScript()方法 来快速地添加脚本元素,它的用法是: headScript($mode = 'FILE', $spec, $placement = 'APPEND')$mode 是指链接一个文件还是一个脚本,可以是'FILE' 或 'SCRIPT' ,$spec 是链接的脚本文件或脚本代码。$placement必须为'APPEND', 'PREPEND', 或'SET'其中之一.

HeadScript 覆盖 append(), offsetSet()prepend() 和 set() 中的每一个来加强上述特殊方法的用法。在内部,它存储每个条目为 stdClass 令牌,它在稍后用itemToString() 方法 serializes 。这允许在堆栈里检查条目,并可选地通过修改返回的对象来修改这些条目。

The HeadScript 助手是 占位符助手 的一个具体实现。

Note在HTML Body中使用 InlineScript 
当包含脚本内嵌在 HTML body里时,应当使用HeadScript 的兄弟助手,InlineScript。为了加速页面的加载,提高用户访问速度,特别是当使用第三方分析脚本(比如Google Analytics等流量统计系统的javascript文件 --Haohappy注),把脚本放在文档的最后是一个好的习惯。 

Note任意的属性缺省关闭 (Disabled)
缺省地,HeadScript 将只解析(render)由 W3C 赋予的 <script> 属性,包括 'type'、 'charset'、 'defer'、 'language' 和 'src' 。 然而,一些 javascript 框架,如? Dojo,利用定制的属性来修改行为。为了允许这样的属性,可以通过 setAllowArbitraryAttributes() 方法来打开(enable)它们: 

<?php$this->headScript()->setAllowArbitraryAttributes(true);?>


Example #12 HeadScript 助手基本用法

在任何时候可以指定一个新的脚本。如上所述,可以链接到外部资源文件或脚本自己。

<?php // adding scripts$this->headScript()->appendFile('/js/prototype.js')                   ->appendScript($onloadScript);?>

在客户端脚本编程中,顺序常常很重要,因为依赖的缘故,需要确保按特定的顺序来加载库,使用 append、 prepend 和 offsetSet 指令来帮助完成任务:

<?php // 按顺序放置脚本文件//设置偏移量来确保这个文件最后加载$this->headScript()->offsetSetScript(100, '/js/myfuncs.js');//使用scriptaculous效果文件,这时append动作使用索引101,接上行代码的索引$this->headScript()->appendScript('/js/scriptaculous.js');//但总是保证prototype文件首先加载$this->headScript()->prependScript('/js/prototype.js');?>

当准备好输出所有脚本到布局脚本,简单地 echo 这个助手:

<?= $this->headScript() ?>

Example #13 Capturing Scripts Using the HeadScript Helper

有时候,需要“编程式”地生成客户端脚本。你可以使用字符串串联、heredoc或类似的技术(字符串串联即$string1.$string2这种形式,heredoc即使用<<<操作符--Haohappy注),通常通过创建脚本和在PHP标签里做手脚会更容易些。HeadScript 可以实现这个功能,把一段JavaScript代码抓取到堆栈中暂存(道理同缓冲输出--Haohappy注):

<?php $this->headScript()->captureStart() ?>var action = '<?= $this->baseUrl ?>';$('foo_form').action = action;<?php $this->headScript()->captureEnd() ?>

下面是上例中的一些假设:

  • 脚本将追加到堆栈。如果需要替换或者追加到堆栈顶部,那么需要分别把 'SET' 或 'PREPEND' 作为第一个参数传递给 captureStart() 。

  • 脚本 MIME 类型假定为 'text/javascript',如果想指定一个不同的类型,需要把它作为第二个参数传递给 captureStart() 。

  • 如果需要为 <script> 标签指定附加属性, 把它们放入数组作为第三个参数传递给 captureStart() 。

HeadStyle 助手

在 HTML <head> 元素中 HTML <style> 元素用来包含 CSS stylesheets inline 。

Note使用 HeadLink 来链接 CSS 文件 
HeadLink 为包含外部 stylesheets 应该用来生成 <link> 元素。如果想定义自己的 stylesheets inline, 使用 HeadScript 。 

HeadStyle 助手支持下列方法来设置和添加 stylesheet 声明:

  • appendStyle($content, $attributes = array())

  • offsetSetStyle($index, $content, $attributes = array())

  • prependStyle($content, $attributes = array())

  • setStyle($content, $attributes = array())

对于所有情况,$content 是实际上的 CSS 声明。$attributes 是提供给 style 标签的任何额外的属性:lang、 title、 media 或 dir 都是允许的。

HeadStyle 也允许抓取样式声明,如果想用程序生成声明,然后在任何地方自由使用,这很有用。这个用法将在下面的例子给出。

最后,你也可以用 headStyle()方法 来快速地添加声明元素,它的用法: headStyle($content$placement = 'APPEND', $attributes = array()) 。$placement 是 'APPEND'、 'PREPEND' 或 'SET'。

HeadStyle 覆盖 append(), offsetSet()prepend() 和 set() 中的每一个来加强上述特殊方法的用法。 在内部,它存储每个条目为 stdClass 令牌,它在稍后用itemToString() 方法 serializes 。这允许在堆栈里检查条目,并可选地通过修改返回的对象来修改这些条目。

HeadStyle 助手是 占位符助手 的一个具体实现。

Example #14 HeadStyle 助手的基本用法

在任何时候都可以指定一个新的样式标签:

<?php // adding styles$this->headStyle()->appendStyle($styles);?>

对 CSS 来说,顺序非常重要,因为层叠的顺序(the order of the cascade),你需要确保样式表中的声明按特定的顺序加载。使用append、 prepend 和 offsetSet 指令可帮助你达到目的:

<?php // Putting styles in order// place at a particular offset:$this->headStyle()->offsetSetStyle(100, $customStyles);// place at end:$this->headStyle()->appendStyle($finalStyles);// place at beginning$this->headStyle()->prependStyle($firstStyles);?>

当准备好在布局脚本里输出所有样式声明,简单地 echo 助手:

<?= $this->headStyle() ?>

Example #15 用 HeadStyle 助手抓取样式声明

有时候需要用程序生成 CSS 样式声明。当你可以使用字符串串联,heredoc等等, 通常通过创建脚本和在PHP标签里做手脚会更容易些。HeadStyle 可以做这个,把它抓取到堆栈:

<?php $this->headStyle()->captureStart() ?>body {    background-color: <?= $this->bgColor ?>;}<?php $this->headStyle()->captureEnd() ?>


下面是一些假设:

  • 样式声明将追加到堆栈。如果需要替换或者加到堆栈顶部,那么需要分别把 'SET' 或 'PREPEND' 作为第一个参数传递给 captureStart() 。

  • 如果想指定任何另外的属性给 <style> 标签,通过数组把它们作为第二个参数传递给 captureStart() 。

HeadTitle 助手

HTML <title> 元素用来提供标题给HTML文档。HeadTitle 助手允许用程序生成和存储标题供以后解析和输出。

HeadTitle 助手是 占位符助手 的一个具体实现。 它覆盖 toString() 方法来确保生成 <title> 元素,并添加一个 headTitle() 方法来快速并容易地设置和标题元素的聚合。那个方法的 signature 是 headTitle($title, $setType = 'APPEND'),缺省地是追加到堆栈(聚合标题元素)的值,但你也可以指定 'PREPEND' ( 放栈顶 ) 或 'SET' ( 重写堆栈 )。

Example #16 HeadTitle 助手基本用法

你可以在任何时候指定一个标题标签。一般的用法可以让你在应用程序的每一个层次来设置标题段:站点、控制器、动作和潜在的资源。

<?php// setting the controller and action name as title segments://把控制器和动作的名称设置为标题的一部分$request = Zend_Controller_Front::getInstance()->getRequest();$this->headTitle($request->getActionName())     ->headTitle($request->getControllerName());// setting the site in the title; possibly in the layout script://添加标题内容,这种写法常用于布局脚本中$this->headTitle('Zend Framework');// setting a separator string for segments://为标题的各部分设置分隔符$this->headTitle()->setSeparator(' / ');?>

在布局脚本中准备好标题后,使用echo即可输出:

<!-- renders <action> / <controller> / Zend Framework --><?= $this->headTitle() ?>


------分隔线----------------------------
------分隔线----------------------------

最新技术推荐