如何爲roller增加新的主題?(重發,je編輯器太爛0!)

由於很忙,主要是在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來獲取參數。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章