`
devroller2
  • 浏览: 33753 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

如何为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来获取参数。

 

分享到:
评论
20 楼 devroller2 2010-12-30  
你这样是把about_us作为一个部件,不是一个完整的页面。参考
    <template action="permalink">
        <name>permalink</name>
        <description>permalink</description>
<link></link>
        <navbar>false</navbar>
        <hidden>true</hidden>
        <templateLanguage>velocity</templateLanguage>
        <contentType>text/html</contentType>
        <contentsFile>permalink.vm</contentsFile>
    </template>
19 楼 poster214 2010-12-30  
devroller2 写道
用google也不错

今天我尝试着加了一个about页面
方法是这样的:
新建一个About_us.vm
在theme.xml中注册:
<template action="custom">
        <name>about_us</name>
        <description>weblog about_us</description>
<link>about</link>
        <navbar>false</navbar>
        <hidden>false</hidden>
        <templateLanguage>velocity</templateLanguage>
        <contentType></contentType>
        <contentsFile>About_us.vm</contentsFile>
    </template>

<link>about</link>这一行必须有
然后重启tomcat,进入http://...roller/yourBlog/page/about
显示的就是about.vm的内容
18 楼 devroller2 2010-12-29  
用google也不错
17 楼 poster214 2010-12-29  
我在AJP/1.3和protocol="HTTP/1.1"两个地方都加上了,还是不行....
看来得用Google的搜索了
16 楼 devroller2 2010-12-27  
poster214 写道
devroller2 写道
呵呵,roller有专门的定时任务器,照着写一个任务器,让任务器来做不需要用人工填写。

可能我們說的不是同一個東西吧,我這邊的搜索無法使用中文,會出現亂碼,你那有沒有這個情況?

有啊,在tomcat里面的server.xml里改增加URIEncoding="UTF-8":
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"  URIEncoding="UTF-8" />

用那个端口就在那个端口上改。
15 楼 poster214 2010-12-27  
devroller2 写道
呵呵,roller有专门的定时任务器,照着写一个任务器,让任务器来做不需要用人工填写。

可能我們說的不是同一個東西吧,我這邊的搜索無法使用中文,會出現亂碼,你那有沒有這個情況?
14 楼 devroller2 2010-12-27  
呵呵,roller有专门的定时任务器,照着写一个任务器,让任务器来做不需要用人工填写。
13 楼 poster214 2010-12-27  
這樣啊,我也是在做個人網站,我們看來目標是一樣的,我現在的想法是在後臺增加一個欄位專門寫地址,人工填一個英文的,讓url有點意義
12 楼 devroller2 2010-12-27  
poster214 写道
devroller2 写道
呵呵,我理解错了。就像你说的那样,为什么不可以把title强制转换成utf8编码输出,当请求的时候在把title转成中文。对于这个想法可能需要对roller做一下修改。

請問你們公司是怎樣做的?應該已經做過修改吧

呵呵,我们公司没有用roller,是我自己在用roller做个网站,我还没没有做过这样的修改的。可以写过filter拦截/entry/xxx的请求
11 楼 poster214 2010-12-27  
devroller2 写道
呵呵,我理解错了。就像你说的那样,为什么不可以把title强制转换成utf8编码输出,当请求的时候在把title转成中文。对于这个想法可能需要对roller做一下修改。

請問你們公司是怎樣做的?應該已經做過修改吧
10 楼 devroller2 2010-12-25  
呵呵,我理解错了。就像你说的那样,为什么不可以把title强制转换成utf8编码输出,当请求的时候在把title转成中文。对于这个想法可能需要对roller做一下修改。
9 楼 poster214 2010-12-25  
你用的是哪個版本的?我這測試的是4.0.1
Permalink – this read-only field is the permalink link to your weblog entry. It is set the first time that
you save an entry, based on the title at the time you save – and it cannot be changed later.
如果你沒寫過博客估計就不知道我說的是什麽,例如我的博客文章標題是"闲侃圣诞树山寨sp2版_小绿树大生意"
那么這篇文章的url就是http://.../entry/闲侃圣诞树山寨sp2版_小绿树大生意
這個地址百度收錄不了,而Google則沒問題。如果你們的系統url不是按照這個規則生成,應該是改過規則了,或者或roller可以自己選擇規則
8 楼 devroller2 2010-12-25  
poster214 写道
你們公司的博客每篇文章的url你注意過他顯示的是什麽樣子的沒?如果是漢字的話在IE裡面就是一對亂碼,Firefox可以很好的顯示出漢字

我很早就留意了,这个跟浏览器有关,跟roller没有关系。不过你说的显示博客文章用title我还是不太理解,我研究了2个月了,没有看出是用title啊。至于如何让搜索引擎收录还真没有研究过。不过,roller有个功能:“个性制定”“维护”,同步您的roller 网站页面缓存,“同步缓存(写入硬盘)”,重建搜索引擎。我看了源代码也没有看出道道来。知道的请指点一下,谢谢。
7 楼 poster214 2010-12-25  
你們公司的博客每篇文章的url你注意過他顯示的是什麽樣子的沒?如果是漢字的話在IE裡面就是一對亂碼,Firefox可以很好的顯示出漢字
6 楼 poster214 2010-12-25  
devroller2 写道
poster214 写道
请教一个问题,
现在roller的url是通过title来生成,但是百度收录中文url有问题,有没有办法取消掉这个设置,改成别的生成方式?

不是很了解百度收录中文url的东西。roller的title只是后来程序用到吧,前台都是velocity的,后台的页面需要被百度收录吗?

roller每個文章都有一個permalik吧,這個是根據title生成的,這是一篇文章的唯一url,估計作者爲了考慮到seo設計成這樣的,但是百度技術比較爛,對中文的url收錄很差,起了反作用,要是可以自己定制url就行了,似乎WordPress有這方面的設置,這個我還沒找到,難道要自己重寫一遍那個方法...
5 楼 devroller2 2010-12-24  
poster214 写道
请教一个问题,
现在roller的url是通过title来生成,但是百度收录中文url有问题,有没有办法取消掉这个设置,改成别的生成方式?

不是很了解百度收录中文url的东西。roller的title只是后来程序用到吧,前台都是velocity的,后台的页面需要被百度收录吗?
4 楼 poster214 2010-12-23  
请教一个问题,
现在roller的url是通过title来生成,但是百度收录中文url有问题,有没有办法取消掉这个设置,改成别的生成方式?
3 楼 devroller2 2010-12-23  
更正:
第4步增加一项
E、在WeblogRequestMapper类中增加判断:
 else if(context.equals("page") || context.equals("entry") ||
                    context.equals("date") || context.equals("category")
                    || context.equals("tags") || context.equals("aboutme")
                    {
2 楼 poster214 2010-12-21  
我刚刚打算学roller,可以交流下吗
本人也在深圳
1 楼 devroller2 2010-12-15  
没有人用roller的吗

相关推荐

    开源Java博客Roller v5.0 for tomcat.zip

    Roller 是一个全功能的多用户博客平台,于2002年首发,采用Java语言开发,设计精巧,源代码是很好的学习资料。它支持weblogging应有的特性如:评论功能,所见即所得HTML编辑,TrackBack,提供页面模板,RSS ...

    roller

    NULL 博文链接:https://moving200x.iteye.com/blog/1749902

    Apache Roller

    Apache Roller是一个全功能,多用户和组博客服务器,适合大型和小型博客网站。它运行一个Java Web应用程序应该能够运行在任何Java EE服务器和关系数据库。目前,Apache Roller能很好的支持Tomcat和MySQL。 本人用...

    Safety evaluation of table liner for vertical roller mill

    Safety evaluation of table liner for vertical roller mill by modified fatigue limit

    roller-part01

    apache-roller-srapaapache-roller-srcche-roller-srccapache-rolaapache-roller-srcpache-roller-srcler-srcapapache-roller-srcache-roller-srcapache-roller-src

    roller-part2

    apache-rollapachapache-roller-srce-roller-srcer-srcapache-rolleapacapache-roller-srche-roller-srcr-srcapache-roapache-roller-srcller-srcapache-roller-src

    开源Java博客Roller v5.0 for tomcat

    Roller 是一个全功能的多用户博客平台,于2002年首发,采用Java语言开发,设计精巧,源代码是很好的学习资料。它支持weblogging应有的特性如:评论功能,所见即所得HTML编辑,TrackBack,提供页面模板,RSS ...

    apache-roller-src

    apache-roller-src apache-roller-src apache-roller-src apache-roller-src apache-roller-src apache-roller-src apache-roller-src apache-roller-src apache-roller-src apache-roller-src

    Roller4.0的另外一套cas简单解决方案

    Roller4.0的另外一套cas简单解决方案. 最近在使用roller4.0和cas的单点登录集成.中间碰到了很多很多的问题.也许我碰到的问题都是属于自己的技术不成熟,能力不够引起的.但是我想应该还是有很多人和我是差不多的吧.我...

    roller安装

    NULL 博文链接:https://jarorwar.iteye.com/blog/554942

    roller安装指南电子书

    apache roller安装指南电子书 翻译官方roller安装帮助文档

    roller install、user、template guide

    roller install guide roller user guide roller template guide

    roller-weblogger.rar

    weblogging 设计比较精巧,是很好的学习资料。它支持weblogging应有的特性如:评论功能,所见即所得HTML编辑,TrackBack,提供页面模板,RSS syndication,blogroll管理和提供一个XML-RPC 接口。 最主要是其开源

    Apacheroller

    install the roller 讲述怎样使用roller

Global site tag (gtag.js) - Google Analytics