插件機制
通過插件機制可以很容易的擴展 OpooPress 博客系統的功能。 Plugin 定義如下
public interface Plugin{
/**
*
* @param registry
*/
void initialize(Registry registry);
}
Registry 接口定義如下:
public interface Registry {
Site getSite();
void registerConverter(Converter c);
void registerGenerator(Generator g);
void registerSiteFilter(SiteFilter filter);
void registerTemplateModel(String name, TemplateModel model);
void registerTemplateLoader(TemplateLoader loader);
}
可見,要自定義插件,主要就是實現 Plugin 接口 的 initialize() 方法。在該方法中,開發者可以調用 Registry 對象注冊自定義的組件。這些自定義的組件包括:Converter、Generator、SiteFilter、TemplateModel、TemplateLoader 等。
Converter
格式轉化器。
主要用來轉化博客或者網站的源文件。OpooPress 默認支持 Markdown 和 Textile 格式,分別由 org.opoo.press.converter.TxtmarkMarkdownConverter 和 org.opoo.press.converter.TextilejConverter 進行處理。
開發者可自定義 Converter 來替換現有的轉化器,或者支持新格式。例如可以開發 WikiConverter 用于支持 *.wiki 文件的處理。
Generator
頁面生成器。
主要用于生成特定的輸出頁面,如 博客首頁分頁頁面、標簽頁面、分類目錄頁面等。
開發者可以自定義 Generator 來生成所需的頁面,例如生成站點地圖文件 sitemap.xml 和 sitemaps.html。
SiteFilter
站點過濾器(處理器)。
用于在站點(site)生成引擎運行的各個階段中插入自己的處理代碼,這些可插入代碼的點為 setup, read, generate, reader, write。
該接口的定義詳見源文件 SiteFilter.java,可查看 SiteImpl 類源文件了解 SiteFilter 是如何以及何時被調用的。
TemplateModel
自定 FreeMarker 模板模型。
開發者可以通過這個機制自定義 FreeMarker 標簽并注冊,就可以在文章或者頁面中調用這些標簽。請閱讀 FreeMarker 文檔了解詳情。
TemplateModel 還可以用來自定義函數,同樣注冊后可在頁面中調用。例如 TitleCaseModel。
TemplateLoader
FreeMarker TemplateLoader,用于指定注冊自定義的 FreeMarker 模板加載器。
DefaultPlugin
目前 OpooPress 默認的生成引擎也是通過插件機制實現的,默認插件為 DefaultPlugin,該插件會自動查找站點配置文件 config.yml 中定義的 Converter、Generator、SiteFilter 類名,實例化這些類并自動注冊。
config.yml 關于 DefaultPlugin 的配置如下:
# ------------------------ #
# Default PlugIn Settings #
# ------------------------ #
converters:
- org.opoo.press.converter.TxtmarkMarkdownConverter
- org.opoo.press.converter.TextilejConverter
generators:
- org.opoo.press.generator.PaginationGenerator
- org.opoo.press.generator.CategoryGenerator
- org.opoo.press.generator.TagGenerator
# siteFilters:
# - org.opoo.press.filter.FixUrlSiteFilter
如果開發者不打算定義一個完整的 Plugin,僅僅開發 Converter 或者 Generator,可以在這里進行配置,而不必配置整個插件。