由於很忙,主要是在roller上做二次開發,一直沒有時間總結一下心得。有很多內容想記錄下來,但感覺太多,太亂,沒有很好的組織,一直就放着。今天簡單說一下吧,希望對別人有點幫助。
如果你用roller做個博客網站,那麼原來的主題模板肯定是不夠用的,而且給你的業務沒有關係,用起來那是相當的彆扭。那麼,如何爲roller增加新的主題呢?下面就step-by-step吧。
這裏說的是增加roller的共享主題,其他的就不說了。
1、 在拷貝已有的主題上修改。
不知道別人是怎麼用roller的,我是放到ide裏開發的,自己做了一些目錄結構上的變更。在roller源代碼rar包裏apache-roller-src-4.0.1\apps\weblogger\web\themes目錄下,拷貝一個子目錄重命名(保證部署後war裏面有這個命名後的目錄)。比如我們拷貝sotto目錄,重名爲abc
在abc目錄先把文件名帶有sotto的改爲abc,文件內容也是。這樣就可以增加一個共享主題啦。但跟原來的sotto是一樣的,有什麼意義呢?你需要做的工作還是很多。比如修改樣式、換個圖片等等,這些都是比較簡單的工作。比較難一點的請看第二步。
2、 增加一個新的展現頁面
你的博客業務本來跟roller就不一樣,如果一樣就不需要繼續看了。那麼有什麼不同呢?比如你的博客需要加一個關於博主介紹的頁面,就是加個aboutme的連接。這個頁面內容、展現方式和其他頁面都不一樣,這時你需要一個單獨的網頁模板來展現。
在abc目錄下拷貝permalink.vm重命名爲aboutme.vm,其中permalink.vm是展現一篇日誌的頁面模板。你認爲aboutme有什麼內容和展現方式就自己修改aboutme.vm吧。
僅有模板是不夠的,還要讓roller理解你這個http://xxxx.com/zhangsan/aboutme/這個連接,它才能根據你的指示來展現aboutme.vm.。那麼怎麼做呢?
3、修改theme.xml文件
拷貝permalink節點修改
<template action="aboutme">
<name> aboutme </name>
<description> aboutme </description>
<link></link>
<navbar>false</navbar>
<hidden>true</hidden>
<templateLanguage>velocity</templateLanguage>
<contentType>text/html</contentType>
<contentsFile> aboutme.vm</contentsFile>
</template>
4、 修改java文件
修改那些文件我會列出來,但爲什麼修改就不做解釋了。自己去看源代碼,或者看我之前寫的博客,o(∩_∩)o…。
A、修改ThemeTemplate接口,增加一個頁面名字action常量。
public static final String ACTION_MEMBERS = "aboutme";
public static final String[] ACTIONS = {
ACTION_WEBLOG,
ACTION_PERMALINK,
ACTION_SEARCH,
ACTION_TAGSINDEX,
ACTION_ABOUTME
};
B、修改WeblogPageRequest類,增加一個分支判斷讓其不要拋出異常
} else if ("aboutme".equals(this.context)) {
/** 增加一個頁面 */
} else {
throw new InvalidRequestException("context "+this.context+
"not supported, "+request.getRequestURL());
}
C、修改PageServlet類,增加一個判斷,使得通過頁面名字獲取模板
} else if (pageRequest.getWeblogAnchor() != null) {
try {
page = weblog.getTheme().getTemplateByAction(ThemeTemplate.ACTION_PERMALINK);
} catch (Exception e) {
log.error("Error getting weblog page for action 'permalink'", e);
}
/** 增加一個頁面 */
else if ("aboutme".equals(pageRequest.getContext())) {
try {
page = weblog.getTheme().getTemplateByAction(ThemeTemplate.ACTION_ABOUTME);
} catch (Exception e) {
log.error("Error getting weblog page for action 'permalink'", e);
}
}
D、修改WeblogPageCache類的generateKey方法,目的是使得roller能爲新的頁面模板生成唯一的key,以便緩存後能定位到。
/** 增加一個頁面 */
if("aboutme".equals(pageRequest.getContext())) {
key.append("/aboutme/");
}
通過這個過程就可以創建一個共享主題模板了。
另外由於WeblogPageRequest的構造函數代碼的原因,連接最好是http://xxxx.com/zhangsan/aboutme/xx否則將拋出異常,因爲roller要通過url來獲取參數。