有效的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}?>
HTML的 <link>
標簽越來越多地用于為你的站點鏈接不同資源:stylesheet, feed, favicon, trackback等。HeadLink
助手提供了一個簡單的接口用來創建和聚合這些元素以供稍后在你的布局腳本里獲取和輸出。
HeadLink
助手有以下特殊的方法用來添加 stylesheet 鏈接:
appendStylesheet($href, $media, $conditionalStylesheet)
offsetSetStylesheet($index, $href, $media, $conditionalStylesheet)
prependStylesheet($href, $media, $conditionalStylesheet)
setStylesheet($href, $media, $conditionalStylesheet)
$media
值缺省為 'screen',但可以為任何有效的媒體(media)值。$conditionalStylesheet
是布爾值,將用于解析時來決定是否有特殊的注釋應該被包括以防止在特定的平臺上加載stylesheet。
另外,HeadLink
助手有特殊的方法用來添加 'alternate' 鏈接到它的堆棧:
appendAlternate($href, $type, $title)
offsetSetAlternate($index, $href, $type, $title)
prependAlternate($href, $type, $title)
setAlternate($href, $type, $title)
headLink()
助手方法允許指定所有的必要的屬性給 <link>
元素, 也允許指定替代 - 是否新元素替換所有其他的,前置(棧頂),或追加(棧底)。
HeadLink
助手是 占位符助手 的一個具體實現。
Example #10 HeadLink 助手的基本用法
任何時候可以指定headLink
,典型地,將在布局腳本里指定全局鏈接,并在應用程序視圖腳本里指定特定的鏈接。在布局腳本里的 <head> 部份,用echo來輸出。
<?php // 在視圖腳本中設置鏈接:$this->headLink()->appendStylesheet('/styles/basic.css') ->headLink(array('rel' => 'favicon', 'href' => '/img/favicon.ico'), 'PREPEND') ->prependStylesheet('/styles/moz.css', 'screen', true);?><?php // 解析鏈接:?><?= $this->headLink() ?>
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() ?>
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
當包含腳本內嵌在 HTMLbody
里時,應當使用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()
。
在 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()
。
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() ?>
上一篇 php和js交互一例