雖然講的是分類(Category),但現在我這兒沒有分類只有標籤(Tag),Octopress 自帶的分類根本就是當作標籤用,再加上自己很少用分類,就把所有分類相關的字樣全改成了標籤,這樣看着不那麼彆扭,插件什麼的全改了,改動過程十分蛋疼就不說了,這裏還是按本來的 Category 來說。
Octopress 自帶的分類生成插件「category_generator.rb」不能處理非 ASCII 字符分類,Google 到兩種修改插件方法,一種是直接把分類目錄名轉換爲 url 編碼,另一種是分離分類顯示名和路徑名,對比之後決定採用後一種方案,避免 url 中包含辨識度低的編碼。
參照 SPRABBIT 火霧宗師的修改把分類格式改爲 <分類顯示名稱>{<分類目錄名稱>}
,然後如此創建分類:
就能把顯示爲「隨筆」的分類頁面保存在一個叫「essay」的目錄中。
但這裏存在兩個問題,一是每次建立分類時都必須加上後面的分類目錄名稱,不然在 generate 時會報錯,二是爲了規範 url 原來的插件會先把分類中的大寫轉換爲小寫、空格替換爲「-」才作爲目錄名,但這個字符串處理也被作者去除了,雖然指定目錄名時稍加注意就好,但增強健壯性的話,就算以後隨意些也沒問題。
第一個問題,在調用分類的地方加上條件判斷,指定了目錄名時先作相應處理,沒有指定目錄名就像原來一樣使用這個分類,比如:
1
| self.data['title'] = "#{title_prefix}#{if (/.*{.*}$/ === category) then "#{category[/[^{]*/]}" else "#{category}" end}"
|
在指定了目錄名時分類會變成 <分類顯示名稱>{<分類目錄名稱>}
的格式,需要用正則表達式 category[/[ ^ { ]*/]
取出 <分類顯示名稱>
這一部分用於顯示,沒有指定目錄名時直接就是 <分類顯示名稱>
,這樣只有在分類是中文時才需要指定目錄名。
目錄名的部分也作相應修改,比如:
1
| self.write_category_index(File.join(dir, "#{if (/.*{.*}$/ === category) then "#{category[/(?<={)[^}]*/]}" else "#{category}" end}".gsub(/_|\P{Word}/, '-').gsub(/-{2,}/, '-').downcase), category)
|
正則表達式 category[/(?<={)[^}]*/]
用於取出大括號中的分類目錄名稱,這裏保留 gsub 和 downcase 的字符串處理,在指定目錄名稱時可以不用在意空格和大小寫。
其它部分可以參考我修改的標籤插件。
2012年12月22日 更新:
多個分類時要這樣寫:
1
2
| categories:
- 随笔{essay}
|
寫在方括號中會出問題,看有空能不能修好這個。
2013年02月03日 更新:
Octopress 將在 2.1 版本支持分類的名稱與索引分離,詳情請查看 Puttin Wong 提交的這個 Issue,2.1 的插件已經可用,替換原來的就行,然後分類改成這樣的形式:
1
2
| categories:
- essay [随笔]
|