擴(kuò)展 Dreamweaver:自定義第三方標(biāo)簽的解析
因?yàn)樽罱恢痹谧?Dreamweaver 插件的開發(fā),中文的資料非常少,自己英文又差,查看英文資料的時(shí)候不由頭昏腦脹。迫不得已把其中一些重要的內(nèi)容翻譯成中文之后,看的時(shí)候才覺(jué)得爽快不少。本節(jié)選自 Dreamweaver 8 附帶的《Extending Dreamweaver 8》,翻譯的時(shí)候參考了一下俠客島翻譯的《Dreamweaver 4 中文幫助》。不過(guò)老實(shí)不客氣地說(shuō),我有點(diǎn)懷疑那個(gè)幫助的某些部分是用金山快譯之類的軟件翻譯的,反正讀起來(lái)比英文還難懂。
服務(wù)器端技術(shù),比如asp、Macromedia ColdFusion,jsp,以及 php 在 HTML 文件里面使用特殊的非 HTML 語(yǔ)法,服務(wù)器在這些代碼的基礎(chǔ)上創(chuàng)建和提供 HTML 格式的內(nèi)容。當(dāng) Dreamweaver 檢測(cè)到非 HTML 標(biāo)簽,Dreamweaver 會(huì)調(diào)用第三方標(biāo)簽的定義文件來(lái)比較它們,這些文件指定 Dreamweaver 如何讀取和顯示這些標(biāo)簽。
舉個(gè)例子,在標(biāo)準(zhǔn)的 HTML 語(yǔ)言之外,ASP 文件還包含了供服務(wù)器解析的 ASP 代碼。ASP 代碼看起來(lái)和 HTML 標(biāo)簽類似,它由一對(duì)標(biāo)簽,開始的 <% 和關(guān)閉的 %>,來(lái)作標(biāo)記。在 Dreamweaver 的 Configuration/ThirdPartyTags 文件夾里有一個(gè)名為 Tags.xml 的文件,這個(gè)文件就是用來(lái)描述包括 ASP 在內(nèi)的各種第三方標(biāo)簽規(guī)范的,并定義了 Dreamweaver 如何來(lái)顯示這些代碼。使用這種方法,ASP 代碼在 Tags.xml 中已經(jīng)被規(guī)范了,所以 Dreamweaver 不會(huì)再試著在 <%...%>之間解析任何代碼。不過(guò)在設(shè)計(jì)視圖里面,它會(huì)顯示一個(gè)圖標(biāo)以表示這是 ASP 代碼。你可以定義自己的標(biāo)簽,并且能為每套標(biāo)簽創(chuàng)建一個(gè)新的標(biāo)簽庫(kù)文件,來(lái)指定 Dreamweaver 如何讀取和顯示你的標(biāo)簽。
注意:這部分說(shuō)明了如何定義 Dreamweaver 顯示一個(gè)自定義標(biāo)簽的方法,但是沒(méi)有描述如何編輯自定義標(biāo)簽的內(nèi)容或是屬性。如何創(chuàng)建屬性檢查器來(lái)檢查和修改自定義標(biāo)簽的屬性,請(qǐng)查看屬性檢查器以獲得相關(guān)信息。
每個(gè)標(biāo)簽庫(kù)文件都會(huì)定義一個(gè)或者多個(gè)自定義標(biāo)簽的名稱、類型、內(nèi)容模式、顯示規(guī)范和圖標(biāo)。你可以創(chuàng)建任意數(shù)量的標(biāo)簽庫(kù)文件,但是它們必須位于 Configuration/ThirdPartyTags 文件夾以便被 Dreamweaver 讀取和處理。標(biāo)簽庫(kù)文件使用 .xml 文件擴(kuò)展名。
提示:如果你同時(shí)進(jìn)行著好幾個(gè)不同網(wǎng)站的工作(假定當(dāng)你是個(gè)自由職業(yè)者的時(shí)候),你可以把所有的標(biāo)簽規(guī)范定義在一個(gè)文件里面,并存放在一個(gè)特殊的站點(diǎn)上,將來(lái)由其他人維護(hù)這個(gè)站點(diǎn)的時(shí)候,你就可以完整地把包含自定義圖標(biāo)和屬性檢查器在內(nèi)的標(biāo)簽庫(kù)移交給他。
你需要使用一個(gè)名為 tagspec 的 XML 標(biāo)簽來(lái)定義一個(gè)標(biāo)簽規(guī)范。舉例來(lái)說(shuō),下面的代碼表示一個(gè)名為 happy 的標(biāo)簽規(guī)范。
<tagspec tag_name="happy" tag_type="nonempty" render_contents="false" content_model="marker_model" icon="happy.gif" icon_width="18" icon_height="18"></tagspec>
你可以使用 tagspec 來(lái)定義兩種標(biāo)簽:
·HTML 格式的普通標(biāo)簽
happy 標(biāo)簽范例是一個(gè) HTML 格式的普通標(biāo)簽。它開始于 <happy> 標(biāo)簽,在開始標(biāo)簽與結(jié)束標(biāo)簽之間包含數(shù)據(jù),最后結(jié)束于</happy> 標(biāo)簽。
·字符串界定的標(biāo)簽
字符串界定的標(biāo)簽用一個(gè)字符串開始,用另一個(gè)字符串結(jié)束,它們和 HTML 空標(biāo)簽(諸如 img 之類)有類似之處,因?yàn)樗鼈兗炔话瑑?nèi)容也沒(méi)有關(guān)閉標(biāo)簽。如果 happy 也是一個(gè)字符串界定的標(biāo)簽,那它的定義規(guī)范里面必須包括 start_string 與 end_string 兩個(gè)屬性。ASP 標(biāo)簽都是字符串界定的標(biāo)簽,它們從 <% 開始,到 %> 結(jié)束,也沒(méi)有關(guān)閉標(biāo)簽。
下面的信息羅列了 tagspec 標(biāo)簽的各個(gè)屬性和有效值。帶有星號(hào)(“*”)的屬性表示不適用于字符串界定的標(biāo)簽,可選屬性則使用了大括號(hào)({})來(lái)標(biāo)識(shí);不難推斷,其他沒(méi)有使用大括號(hào)標(biāo)識(shí)的都屬于必要的屬性。
<tagspec>
說(shuō)明
關(guān)于第三方標(biāo)簽的預(yù)設(shè)信息
屬性
tag_name,{tag_type},{render_contents},{content_model},{start_string},{end_string},{detect_in_attribute},{parse_attributes},icon,icon_width,icon_height,{equivalent_tag},{is_visual},{server_model}
tag_name 表示自定義的名稱。對(duì)于字符串界定的標(biāo)簽,tag_name 僅用于檢測(cè)一個(gè)特定的屬性檢查器是否適用于這個(gè)標(biāo)簽。如果屬性檢查器的第一行在符合規(guī)范的位置(其實(shí)就是在第一行的聲明里面)包含了這個(gè)標(biāo)簽名并標(biāo)上星號(hào)(“*”),那么這個(gè)檢查器將被允許檢查該類型的標(biāo)簽。舉個(gè)例子,ASP 代碼的標(biāo)簽名就是 ASP,允許檢查 ASP 代碼的檢查器必須在第一行包含 *ASP*。關(guān)于屬性檢查器 API 的信息,請(qǐng)參看 屬性檢查器。
tag_type 確定這個(gè)標(biāo)簽是空的(像前面提到的 img 那樣),還是允許在開始與關(guān)閉標(biāo)簽之間放置內(nèi)容(像 code 標(biāo)簽?zāi)菢樱_@個(gè)屬性對(duì)于普通(非字符串界定的)標(biāo)簽是必要的,但是對(duì)字符串界定的標(biāo)簽不生效,因?yàn)樗麄兛偸强盏摹S行е蛋?"empty" 和 "nonempty"。
render_contents 確定在設(shè)計(jì)視圖中,該標(biāo)簽顯示內(nèi)容,還是代之以特定的圖標(biāo)。該屬性僅對(duì)非空標(biāo)簽是必要的,對(duì)于空標(biāo)簽則不生效(空標(biāo)簽本身沒(méi)有內(nèi)容可供顯示)。該屬性僅應(yīng)用于插入到屬性外部的標(biāo)簽,如果一個(gè)標(biāo)簽插入其他標(biāo)簽的屬性值內(nèi),它的內(nèi)容將不會(huì)顯示(這一段有點(diǎn)難理解,我想到的是 RealMedia、Flash 之類的 Object,里面的那些 param 標(biāo)簽?)。有效值為 "true" 或者是 "false"。
新聞熱點(diǎn)
疑難解答
圖片精選