使用華夏公益教科書/高階技巧
我們在標籤部分已經簡要地提到了模板。現在我們將深入瞭解它們的一些更高階的功能。模板、它們的功能以及它們的用途是一個巨大的討論話題,超出了本書的範圍。書籍 編輯維基文字 將包含比本書更多關於模板的資訊,但即使那也不是一個全面的資源。最好的學習方法是檢視其他模板的實際應用,或者向我們的一些活躍使用者尋求幫助,看看他們想出了什麼解決方案。
模板有幾個好處。首先,模板有助於將大型複雜的功能隱藏在頁面中。這意味著當新使用者貢獻頁面時,他們不需要先深入大量格式化內容。其次,模板可以用於將非常相似的標記應用於多個頁面(或單個頁面中的多個點),而無需複製貼上大量程式碼。最後,透過使用引數,模板可以幫助自動化許多原本需要手動執行的任務。
模板是包含頁面的特殊情況。要在當前頁面中包含或**轉入**一個頁面,語法為 {{namespace:page name}}。對於主名稱空間,您可以省略名稱空間部分,只使用 {{:page name}}。預設名稱空間是 Template:,因此僅輸入 {{page name}} 將嘗試包含 Template:page name,如果您使用模板,這很好。
嘗試在 沙盒 中包含一個頁面,例如,使用以下程式碼包含主頁
{{:Main Page}}
這就是建立書籍的印刷版本的做法。每個頁面按順序包含在印刷版本的頁面中。任何不應出現在印刷版本上的內容都放在包含頁面的程式碼中的 <noinclude> </noinclude> 之間,這將阻止它在頁面包含在另一個頁面時被包含。這用於隱藏導航連結和其他只有在線檢視書籍的人才感興趣的內容。相反,如果您希望某些內容僅對檢視印刷版本的人顯示,您可以使用 <includeonly> </includeonly>。
模板使用相同的概念,只是用於不同的目的,並具有一些附加功能。一個簡單的模板示例,它僅使用 {{page name}},可以是
{{incomplete}}
這將產生
這是一個標準模板的示例,只是為了節省時間。像這樣的標籤也可以用來生成不完整的書籍列表。如果您訪問 模板:不完整 並單擊工具箱中的“此頁面的連結”連結,頁面後面列出的“(包含)”是包含了模板的頁面。對於 {{不完整}} 模板,編輯人員可以使用它來獲取不完整頁面的列表。
當您鍵入 {{incomplete}} 時,您實際上是包含了 Template:incomplete 中的程式碼,它看起來像
'''The text in its current form is incomplete.'''
這很無聊。您可以使用 <includeonly> ... </includeonly> 來標記在轉入時應該出現但在模板頁面本身不應出現的模板部分。您可以使用 <noinclude> ... </noinclude> 來標記不應包含的部分。例如,您可以使用它將模板包含在一個類別中,但將包含了模板的頁面包含在另一個類別中。您還可以顯示關於正確使用模板的文件,這些文件不會出現在使用模板的每個地方。因此,如果您希望訪問 {{不完整}} 的模板頁面的人在“文字的當前形式不完整。”之後看到它的用途,您可以用以下程式碼替換程式碼
'''The text in its current form is incomplete.''' <noinclude> '''Purpose:''' :This template is used to designate a page as incomplete </noinclude>
這將向人們顯示
文字的當前形式不完整。
用途
- 此模板用於將頁面指定為不完整
當他們檢視模板頁面時,但當他們包含它時,只有 文字的當前形式不完整。
您也可以在類別方面耍點小聰明
<includeonly> '''The text in its current form is incomplete.''' [[Category:Pages that are incomplete]] </includeonly> <noinclude> '''Purpose:''' :This template is used to designate a page as incomplete [[Category:Templates that do tricky things]] </noinclude>
{{訊息框}} 模板稍微複雜一些,因為它使用引數。引數是模板在為包含它的頁面生成程式碼時使用的值。當您包含 Template:Message_box 時,您需要將引數傳遞給它。如果您只做
{{Message box}}
您將得到
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. |
嗯?這個模板實際上有 2 個引數,我們需要向它們傳遞引數。如果我們像這樣包含模板
{{Message box|heading = hello|message = goodbye}}
您將得到
你好 再見 |
在包含模板時,您不必擔心空格或首字母大寫,但對於所有其他字母,頁面名稱仍然區分大小寫,因此如果您鍵入
{{Message Box|heading = hello|message = goodbye}}
您將得到
因為是 “Box” 而不是 “box”。
回到示例... heading 和 message 是 Template:Message_box 的引數名稱。模板的實際程式碼看起來像
<center class="metadata">
<table style="width: 60%; background: {{{backgroundcolor|transparent}}}; border: 1px solid #aaa; padding: 0.5em;"><tr>
<td style="width: 70px;">[[Image:{{{image|Wikibooks-logo.svg}}}|60px|{{{alt|logo}}}]]</td>
<td>'''{{{heading}}}'''<br /><small>{{{message}}}</small></td>
</tr></table>
</center>
哇,這太複雜了。所有用三對花括號括起來的內容都是引數。因此有 5 個引數,它們分別是 backgroundcolor、image、alt、heading 和 message。前 3 個引數包含管道字元。這些為引數建立預設值,因此即使我們只傳遞 heading 和 message 的值,背景仍然是透明的,顯示的影像仍然是華夏公益教科書徽標,並且該影像的備用文字仍然是“徽標”。如果引數沒有預設值,並且您沒有向它傳遞值,它只會顯示引數名稱,用 3 對花括號括起來,這就是為什麼它第一次建立 {{{heading}}} 和 {{{message}}} 的原因。
但這並不意味著我們無法更改這些值。假設我們希望獲得綠色背景,帶有笑臉影像,並且備用文字為“微笑”,標題和訊息與上次使用的一樣。要獲得此效果,您需要鍵入
{{Message box|backgroundcolor = green|image = Face-smile.svg|alt = smile|heading = hello|message = goodbye}}
您將獲得
你好 再見 |
您傳遞給引數的引數順序無關緊要,只要它們被命名。如果引數使用編號引數(如 {{{1}}}),則引數順序很重要。如果引數是編號的,那麼您需要將它放在正確的位置,因此如果它是 {{{1}}},它將是您傳遞的第一個值。
限制您使用模板可以實現的目標的唯一因素是您的想象力和您對 HTML 和 CSS(用於使事物看起來漂亮)以及對變數和解析器函式的瞭解。還有 模板限制,MediaWiki 軟體為了避免伺服器上的工作負載過大而設定的限制,但這隻有當您轉入一個轉入一個又轉入一個頁面的頁面時才會真正重要,並且可能只有當您是書籍作者,試圖將所有頁面整理到章節頁面中,然後嘗試將這些章節頁面包含在印刷版本中時,或類似情況時才會困擾您。當您嘗試包含一個包含其他頁面的頁面,並且它超出了包含限制時,將放置一個指向您想要轉入的頁面的連結到頁面上,我認為 HTML 程式碼中還有一些錯誤訊息作為註釋生成。
編輯人員可以使用許多高階工具來建立更好的頁面和模板。其中許多功能是 MediaWiki 軟體的擴充套件。華夏公益教科書偶爾會新增新的擴充套件。如果您能想到我們這裡沒有的功能,您可以在 Mediawiki.org 上檢視可用擴充套件的列表。但是,在安裝任何內容之前,您需要在 技術閱覽室 獲得社群的批准。
過去,許多華夏公益教科書使用者都要求新增一些擴充套件,但我們無法安裝。這通常是因為效能問題:有些擴充套件佔用了太多伺服器資源。有時,這是由於安全性問題:有些擴充套件還沒有經過嚴格的測試,無法在像華夏公益教科書這樣的大型網站上上線。以下是我們要求但無法獲得的擴充套件和功能列表
- DPL
- 我們確實安裝了 DPL 的舊版本,但新版本有更多選項和更強大的功能。不幸的是,所有這些功能都以增加伺服器負載為代價。在該擴充套件的效率提高之前,我們不太可能在華夏公益教科書上看到更新的版本。
- GNU LilyPond
- Lilypond 是一種擴充套件,允許使用各種基於 LaTeX 的標記,包括圖形、音樂等。不幸的是,此擴充套件有多個元件,其中許多尚未經過嚴格的安全測試。
- StringFunctions
- 與解析器函式類似,這些是解析器鉤子,可用於操作字串資料。這包括分詞、操作等。此擴充套件也需要過多的伺服器資源,因此無法在華夏公益教科書上安裝。
維基文字由 MediaWiki 軟體轉換為 HTML。我們使用維基文字,因為它比純 HTML 更易於閱讀和編輯。但是,在許多情況下,我們需要使用 HTML 和 CSS 來執行各種任務。
以下是華夏公益教科書中使用的一些常見的 CSS 類。在您自己的工作中使用這些類將有助於保持一切標準化,如果您試圖複製複雜的樣式,可以節省很多精力。
- PrettyTextBox
- PrettyTextBox 是一種 CSS 類,它生成一個帶有灰色背景和灰色邊框的框。此文字框的示例是
{{SideBox}}和{{TextBox}}。一個常見的實現是<div class="PrettyTextBox">...</div>。 - wikitable 和 wikitable
- 這些類用於與上面的 PrettyTextBox 顏色主題類似的表格。常規表格單元格為灰色,標題單元格為深灰色,所有單元格周圍都有灰色邊框。此格式通常在許多地方使用,例如 閱覽室。
- metadata、noprint
- 這些類會導致頁面上的專案在您列印書籍時不顯示。這對某些訊息或備註模板很有用,這些模板更適合編寫者而不是讀者。
- printonly
- 與上面的類似,但相反。具有 printonly 類的物件僅在您列印頁面時顯示,但在您線上檢視頁面時不會顯示。
- plainlinks
- 當您建立外部連結時,軟體會自動在連結旁邊包含一個小圖示,以指示該連結指向哪種型別的資源。使用 plainlinks 類將隱藏這些小圖示。
解析器函式功能強大但很複雜。它們最適合在模板名稱空間中使用,在那裡它們的複雜性可以隱藏在編輯書籍和頁面的人員面前。在書籍頁面中使用解析器函式將使程式碼更難以閱讀和理解。因此,頁面對於普通貢獻者來說將更難編輯。我們擁有的解析器函式版本不是完整版本,也不是最新版本。我們版本的文件位於此處
我們沒有解析器函式的“擴充套件”版本,也沒有“StringFunctions”擴充套件,也沒有任何其他相關的擴充套件。
訪問科學、數學或工程主題頁面,您可能會看到數學公式。這些公式使用專門為數學設計的 LaTeX 變體呈現。您可以在 meta:Help:Displaying a formula 上檢視完整的標記幫助表。此頁面的更完整版本可以在 meta 和維基百科上找到。
動態頁面列表 (DPL) 是一種擴充套件,可以根據頁面的類別和名稱空間自動生成頁面列表。我們版本的 DPL 的完整文件(不是最新版本,請參見上面的說明)位於
此功能主要用於組織頁面,例如 華夏公益教科書堆疊 以及其他地方。它在書籍中並不常見,但可以存在。
預設情況下,DPL 列表以垂直專案符號列表顯示。但是,使用 CSS 類 DPLFlat,我們可以強制列表水平顯示。例如
<div class="DPLFlat"><dynamicpagelist>...</dynamicpagelist></div>
此用法在 {{New}} 中演示。