擴(kuò)展 Dreamweaver:自定義第三方標(biāo)簽的解析
因?yàn)樽罱恢痹谧?Dreamweaver 插件的開發(fā),中文的資料非常少,自己英文又差,查看英文資料的時(shí)候不由頭昏腦脹。迫不得已把其中一些重要的內(nèi)容翻譯成中文之后,看的時(shí)候才覺得爽快不少。本節(jié)選自 Dreamweaver 8 附帶的《Extending Dreamweaver 8》,翻譯的時(shí)候參考了一下俠客島翻譯的《Dreamweaver 4 中文幫助》。不過老實(shí)不客氣地說,我有點(diǎn)懷疑那個(gè)幫助的某些部分是用金山快譯之類的軟件翻譯的,反正讀起來比英文還難懂。
服務(wù)器端技術(shù),比如ASP、Macromedia ColdFusion,JSP,以及 PHP 在 HTML 文件里面使用特殊的非 HTML 語法,服務(wù)器在這些代碼的基礎(chǔ)上創(chuàng)建和提供 HTML 格式的內(nèi)容。當(dāng) Dreamweaver 檢測(cè)到非 HTML 標(biāo)簽,Dreamweaver 會(huì)調(diào)用第三方標(biāo)簽的定義文件來比較它們,這些文件指定 Dreamweaver 如何讀取和顯示這些標(biāo)簽。
舉個(gè)例子,在標(biāo)準(zhǔn)的 HTML 語言之外,ASP 文件還包含了供服務(wù)器解析的 ASP 代碼。ASP 代碼看起來和 HTML 標(biāo)簽類似,它由一對(duì)標(biāo)簽,開始的 <% 和關(guān)閉的 %>,來作標(biāo)記。在 Dreamweaver 的 Configuration/ThirdPartyTags 文件夾里有一個(gè)名為 Tags.xml 的文件,這個(gè)文件就是用來描述包括 ASP 在內(nèi)的各種第三方標(biāo)簽規(guī)范的,并定義了 Dreamweaver 如何來顯示這些代碼。使用這種方法,ASP 代碼在 Tags.xml 中已經(jīng)被規(guī)范了,所以 Dreamweaver 不會(huì)再試著在 <%...%>之間解析任何代碼。不過在設(shè)計(jì)視圖里面,它會(huì)顯示一個(gè)圖標(biāo)以表示這是 ASP 代碼。你可以定義自己的標(biāo)簽,并且能為每套標(biāo)簽創(chuàng)建一個(gè)新的標(biāo)簽庫文件,來指定 Dreamweaver 如何讀取和顯示你的標(biāo)簽。
注意:這部分說明了如何定義 Dreamweaver 顯示一個(gè)自定義標(biāo)簽的方法,但是沒有描述如何編輯自定義標(biāo)簽的內(nèi)容或是屬性。如何創(chuàng)建屬性檢查器來檢查和修改自定義標(biāo)簽的屬性,請(qǐng)查看屬性檢查器以獲得相關(guān)信息。
每個(gè)標(biāo)簽庫文件都會(huì)定義一個(gè)或者多個(gè)自定義標(biāo)簽的名稱、類型、內(nèi)容模式、顯示規(guī)范和圖標(biāo)。你可以創(chuàng)建任意數(shù)量的標(biāo)簽庫文件,但是它們必須位于 Configuration/ThirdPartyTags 文件夾以便被 Dreamweaver 讀取和處理。標(biāo)簽庫文件使用 .xml 文件擴(kuò)展名。
提示:如果你同時(shí)進(jìn)行著好幾個(gè)不同網(wǎng)站的工作(假定當(dāng)你是個(gè)自由職業(yè)者的時(shí)候),你可以把所有的標(biāo)簽規(guī)范定義在一個(gè)文件里面,并存放在一個(gè)特殊的站點(diǎn)上,將來由其他人維護(hù)這個(gè)站點(diǎn)的時(shí)候,你就可以完整地把包含自定義圖標(biāo)和屬性檢查器在內(nèi)的標(biāo)簽庫移交給他。
你需要使用一個(gè)名為 tagspec 的 XML 標(biāo)簽來定義一個(gè)標(biāo)簽規(guī)范。舉例來說,下面的代碼表示一個(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 來定義兩種標(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)容也沒有關(guān)閉標(biāo)簽。如果 happy 也是一個(gè)字符串界定的標(biāo)簽,那它的定義規(guī)范里面必須包括 start_string 與 end_string 兩個(gè)屬性。ASP 標(biāo)簽都是字符串界定的標(biāo)簽,它們從 <% 開始,到 %> 結(jié)束,也沒有關(guān)閉標(biāo)簽。
下面的信息羅列了 tagspec 標(biāo)簽的各個(gè)屬性和有效值。帶有星號(hào)(“*”)的屬性表示不適用于字符串界定的標(biāo)簽,可選屬性則使用了大括號(hào)({})來標(biāo)識(shí);不難推斷,其他沒有使用大括號(hào)標(biāo)識(shí)的都屬于必要的屬性。
<tagspec>
說明
關(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)樗麄兛偸强盏。有效值包?"empty" 和 "nonempty"。
render_contents 確定在設(shè)計(jì)視圖中,該標(biāo)簽顯示內(nèi)容,還是代之以特定的圖標(biāo)。該屬性僅對(duì)非空標(biāo)簽是必要的,對(duì)于空標(biāo)簽則不生效(空標(biāo)簽本身沒有內(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"。
content_model 描述這個(gè)標(biāo)簽?zāi)馨姆N內(nèi)容,還有這個(gè)標(biāo)簽?zāi)懿迦氲?HTML 文件的什么地方。有效值包括 "block_model","head_model","marker_model",以及"script_model":
·block_model 表示該標(biāo)簽可以包含 div、p之類的塊狀對(duì)象,并且該標(biāo)簽只可以出現(xiàn)在 body 區(qū)域,或者是插入到其他的 body-content 標(biāo)簽內(nèi),比如 div、layer 以及 td 等。
·head_model 表示該標(biāo)簽只能包含文字而且只能出現(xiàn)在 HEAD 范圍內(nèi)。
·marker_model 表示該標(biāo)簽?zāi)馨魏斡行У?HTML 代碼,并且可以放在 HTML 文件內(nèi)的任何位置。Dreamweaver 內(nèi)置的 HTML 檢驗(yàn)程序?qū)⒑雎远x為 marker_model 的標(biāo)簽。不過,檢驗(yàn)程序不會(huì)忽略這些標(biāo)簽包含的內(nèi)容;所以,盡管標(biāo)簽本身可以隨處放置,但是它的內(nèi)容卻可能導(dǎo)致 HTML 的某些地方產(chǎn)生錯(cuò)誤。例如,純文本不能出現(xiàn)(除去合法的 head 元素)在文檔的 head 區(qū)域,所以你不能把一個(gè)包含純文本的 marker_model 標(biāo)簽放在 head 區(qū)域(如果你要這么做,那你必須把這個(gè)標(biāo)簽的內(nèi)容模式由 marker_model 替換為 head_model)。使用 marker_model 的標(biāo)簽將會(huì)在一行內(nèi)顯示(位于 p 或者 div 這樣的塊狀元素內(nèi)——舉個(gè)例子,在一個(gè)段落里面),如果想讓這個(gè)標(biāo)簽內(nèi)顯示它自己的段落,前后都留出空行,那么建議不要使用這個(gè)模式。
·script_model 讓這個(gè)標(biāo)簽可以放置在文檔內(nèi) HTML 標(biāo)簽之間的任何位置。當(dāng) Dreamweaver 檢測(cè)到使用該模式的標(biāo)簽,將忽略該標(biāo)簽的所有內(nèi)容。使用這種標(biāo)記(比如某些 ColdFusion 標(biāo)簽)后 Dreamweaver 將不會(huì)解析。
start_string 指定一個(gè)分隔符作為字符串界定的標(biāo)簽的起始點(diǎn)。字符串界定的標(biāo)簽可以被放置在任何可以插入注釋的地方。對(duì)于start_string 和 end_string 之間的代碼,Dreamweaver 既不會(huì)去解析,也不會(huì)去編碼或者是作鏈接。當(dāng) end_string 已經(jīng)被定義的時(shí)候,這個(gè)屬性是必需的。
end_string 指定一個(gè)分隔符作為字符串界定的標(biāo)簽的結(jié)束點(diǎn)。同樣,當(dāng) start_string 已經(jīng)被定義的時(shí)候,這個(gè)屬性是必需的。
detect_in_attribute 指定是否要忽略 start_string 和 end_string 之間的所有代碼(或者是在開始和結(jié)束標(biāo)簽之間,如果這兩個(gè)字符串沒有被定義),不管這些代碼之間插入屬性還是值。它的默認(rèn)值是 "false",不過一般情況下字符串界定的標(biāo)簽應(yīng)該把這個(gè)值設(shè)置為 "true"。例如,ASP 標(biāo)簽規(guī)范指定 detect_in_attribute="true",這樣就算 ASP 標(biāo)簽內(nèi)部有包含屬性值的引號(hào),也將被 Dreamweaver 忽略。
parse_attributes 表示是否要解析該標(biāo)簽的屬性。如果設(shè)置為 "true"(默認(rèn)值),Dreamweaver 將解析這些屬性;如果設(shè)置為 "false",Dreamweaver 將把引號(hào)外部的“>”出現(xiàn)之前的所有代碼代碼全部忽略。例如, 諸如 cfif 諸如的標(biāo)簽應(yīng)該將這個(gè)屬性設(shè)置為 "false"(因?yàn)樵?<cfif a is 1> 這樣的標(biāo)簽里面,Dreamweaver 無法將其作為一對(duì)屬性名稱/值的組合來解析)。
icon 指定匹配該標(biāo)簽的圖標(biāo)的路徑和文件名。該屬性對(duì)于空標(biāo)簽是必要的,另外對(duì)那些內(nèi)容不能顯示在文檔窗口的設(shè)計(jì)視圖中的非空標(biāo)簽也同樣是必要的。
icon_width 指定圖標(biāo)的像素寬度。
icon_height 指定圖標(biāo)的像素高度。
equivalent_tag 為 ColdFusion 里某些和表單關(guān)聯(lián)的標(biāo)簽指定簡單的 HTML 等價(jià)物。其他標(biāo)簽不能使用該屬性。
is_visual 指定該標(biāo)簽是否在頁面上可見。例如,ColdFusion 標(biāo)簽 cfgraph 沒有指定 is_visual 的值(因此使用默認(rèn)值 "true"),ColdFusion 標(biāo)簽 cfset 指定了 is_visual 的值為 "false"。在預(yù)設(shè)對(duì)話框的“不可見元素”一欄內(nèi),你可以控制服務(wù)器標(biāo)簽的可見性;可視化服務(wù)器標(biāo)簽與不可視化服務(wù)器標(biāo)簽的可見性可以分開設(shè)置。
server_model,如果設(shè)置了該屬性,表示 tagspec 標(biāo)簽僅可應(yīng)用于屬于指定服務(wù)器模式的頁面。如果沒有設(shè)置,則 tagspec 可以應(yīng)用于所有頁面。例如,ASP 和 JSP 的定界符是一樣的,但是適用 JSP 的 tagspec 標(biāo)簽指定了服務(wù)器模式為 "JSP",所以當(dāng) Dreamweaver 在 JSP 頁面檢測(cè)到特定的定界符,它會(huì)顯示一個(gè) JSP 的圖標(biāo);當(dāng)在非 JSP 頁面檢測(cè)到相同的代碼,它會(huì)顯示 ASP 圖標(biāo)。
內(nèi)容
無(空標(biāo)簽)。
容器
無。
示例
<tagspec tag_name="happy" tag_type="nonempty" render_contents="false" content_model="marker_model" icon="happy.gif" icon_width="18" icon_height="18"></tagspec>
自定義標(biāo)簽在設(shè)計(jì)視圖如何顯示
自定義標(biāo)簽在文檔窗口的設(shè)計(jì)視圖中顯示的方式,決定于 tagspec 標(biāo)簽的 tag_type 屬性和 render_contents 屬性的值(請(qǐng)參看自定義第三方標(biāo)簽的解析)。如果 tag_type 的值為 "empty",就顯示 icon 屬性定義的指定圖標(biāo)。如果 tag_type 的值為 "nonempty",但是 render_contents 的值為 "false",也會(huì)像空標(biāo)簽?zāi)菢语@示圖標(biāo)。下面的例子演示了我們剛才定義的 happy 標(biāo)簽的一個(gè)實(shí)例如何插入到 HTML 代碼中:
<p>This is a paragraph that includes an instance of the <code>happy</code>tag (<happy>Joe</happy>).</p>
因?yàn)樵跇?biāo)簽規(guī)范里, render_contents 已經(jīng)被設(shè)置為 "false",所以 happy 標(biāo)簽(單詞 joe)將不被顯示,開始和關(guān)閉標(biāo)簽包括它們之間的內(nèi)容將被替換成一個(gè)簡單的圖標(biāo)。
對(duì)于一個(gè) render_contents 值為 "true" 的非空標(biāo)簽,設(shè)計(jì)視圖不會(huì)將其顯示為圖標(biāo),而是顯示開始標(biāo)簽與關(guān)閉標(biāo)簽之間的內(nèi)容(比如標(biāo)簽之間的文本,就像這樣: <mytag>這里是開始與關(guān)閉標(biāo)簽之間的內(nèi)容</mytag>)。如果在菜單選項(xiàng)中,查看 > 可視化助理 > 不可見元素已經(jīng)被選中,那么這些內(nèi)容將會(huì)使用“代碼顏色”參數(shù)指定的第三方標(biāo)簽顏色來高亮顯示(“代碼顏色”僅應(yīng)用于標(biāo)簽庫文件定義的標(biāo)簽)
如何更改第三方標(biāo)簽的高亮顏色:
1、選擇菜單選項(xiàng)中的編輯 > 首選參數(shù),然后選擇“代碼顏色”欄。 2、點(diǎn)擊第三方標(biāo)簽顏色框以顯示顏色選擇器。 3、選擇一種顏色,然后點(diǎn)擊“確定”并關(guān)閉預(yù)設(shè)對(duì)話框。關(guān)于如何選擇顏色,另請(qǐng)參看使用 Dreamweaver。
避免改寫第三方標(biāo)簽
Dreamweaver 會(huì)在 HTML 代碼中校正某些特定的錯(cuò)誤,詳細(xì)信息請(qǐng)參考使用 Dreamweaver。默認(rèn)情況下,Dreamweaver 禁止在特定文件擴(kuò)展名的文件中更改 HTML 代碼,這些文件名包括 .asp(ASP)、.cfm(ColdFusion)、.jsp(JSP),以及 .php(PHP)。這樣的默認(rèn)設(shè)置是為了保證 Dreamweaver 不會(huì)意外地修改任何包含在非 HTML 標(biāo)簽里面的代碼。你可以更改 Dreamweaver 的默認(rèn)改寫行為,以便在打開這類文件的時(shí)候改寫 HTML 代碼,并且你也可以在 Dreamweaver 禁止改寫的文件類型列表里面加入其他的文件類型。
當(dāng)你把某些特殊字符輸入到屬性檢查器的時(shí)候,Dreamweaver 會(huì)把它們編碼成數(shù)值。一般來說,讓 Dreamweaver 執(zhí)行這種編碼是最好的,因?yàn)檫@些特殊字符在跨越不同的平臺(tái)和瀏覽器的時(shí)候,將可能被更好地顯示。不過,因?yàn)檫@種編碼會(huì)影響第三方標(biāo)簽,所以當(dāng)你在編輯包括第三方標(biāo)簽的文件時(shí),你可能要更改 Dreamweaver 的編碼行為。
允許 Dreamweaver 在更多類型的文件中改寫 HTML:
1、選擇菜單選項(xiàng)中的編輯 > 首選參數(shù),然后選擇“代碼改寫”欄 2、選擇下面的任何一項(xiàng): ·修正非法嵌套標(biāo)簽或未結(jié)束標(biāo)簽 ·刪除多余的結(jié)束標(biāo)簽 3、執(zhí)行下面的一項(xiàng): ·從“從不改寫代碼:在帶有擴(kuò)展的文件中”的文件擴(kuò)展名列表里面刪除一個(gè)或多個(gè)。 ·取消“從不改寫代碼:在帶有擴(kuò)展的文件中”選項(xiàng)。請(qǐng)注意:這樣會(huì)導(dǎo)致 Dreamweaver 可以在任何類型的文件中改寫 HTML 代碼。
添加 Dreamweaver 禁止改寫的文件類型:
1、選擇菜單選項(xiàng)中的編輯 > 首選參數(shù),然后選擇“代碼改寫”欄 2、選擇下面的任何一項(xiàng): ·修正非法嵌套標(biāo)簽或未結(jié)束標(biāo)簽 ·刪除多余的結(jié)束標(biāo)簽 3、確認(rèn)“從不改寫代碼:在帶有擴(kuò)展的文件中”項(xiàng)已被選中,把新的文件擴(kuò)展名加入文本框的列表中。
如果新的文件類型不會(huì)顯示在“文件 > 打開”對(duì)話框的彈出菜單內(nèi),你可能需要把它增加到 Configuration/Extensions.txt 文件夾里面。詳細(xì)信息,請(qǐng)參看改變默認(rèn)的文件類型。
關(guān)閉 Dreamweaver 的編碼選項(xiàng):
1、選擇菜單選項(xiàng)中的編輯 > 首選參數(shù),然后選擇“代碼改寫”欄 2、取消兩個(gè)“特殊字符編碼”選項(xiàng)中的任何一個(gè)。
關(guān)于“代碼改寫”參數(shù)選擇的其他信息,請(qǐng)參看使用 Dreamweaver。
經(jīng)典討論帖: http://www.95time.cn/bbs/NewsDetail.asp?id=2450679
出處:藍(lán)色理想
責(zé)任編輯:moby
◎進(jìn)入論壇網(wǎng)頁制作、網(wǎng)站綜合版塊參加討論
|