`
herryhaixiao
  • 浏览: 90277 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

jforum论坛二次开发--小修小改汇总贴

阅读更多
lynx286原创, 首发www.mydwbi.com
http://www.mydwbi.com/posts/list/0/103.page
欢迎转贴, 但转贴请不要删除此段版权说明.
将会员列表改成按id排序(新注册用户排前面)
web-inf\config\database\generic\generic_queries.sql
将58-59行 "order by username" 改成 "order by user_id desc"
添加网站地图
-生成sitemap.xml
jforum 的url后缀是.page不是常规的.htm .html .asp .jsp 所以很多sitemap.xml builder不能识别jforum中的链接,所以自动生成不了sitemap.xml(本人猜想是这个原因),后来找半天找到一个工具叫SOFTplus GSiteCrawler的可以自定义页面后缀,从而自动生成sitemap.xml.

-添加国际化属性
zh_CN.properties中最后添加:mydwbi.sitemap=\u7f51\u7ad9\u5730\u56fe

-添加入口链接
在forum_list.htm中第181行下添加:
<td>  </td>   
<td align="center" width="20"><img   /></td>   
<td><span class="gensmall"><a href="${contextPath}/sitemap.xml">${I18n.getMessage("mydwbi.sitemap")}</a></span></td>  

修改版权信息
修改bottom.htm 11行.



将发贴时"pool","attachments","options"改成中文
-添加国际化属性
mydwbi.Options=\u9009\u9879 
mydwbi.Pool=\u6295\u7968 
mydwbi.Attach=\u9644\u4ef6 

修改模板
将post_form.htm中第369,372,375行"pool","attachments","options"改成:
${I18n.getMessage("mydwbi.Options")} 
${I18n.getMessage("mydwbi.Pool")} 
${I18n.getMessage("mydwbi.Attach")} 


让发贴的表情符号列表多显示几个表情
修改post_form.htm261行,改成:<#if (count < 32)>
特定用户显示ip
post_show_user_inc.htm36,37行改成:
<#if (post.userIp?exists && isModerator) || (post.userIp?exists && session.username = "lynx286")>   
${I18n.getMessage("PostShow.userIP")}: <a href="http://whois.domaintools.com/${post.userIp}"  target="_blank">${post.userIp}</a>  


即如果当前登陆用户为该版版主或用户名为lynx286,就显示发贴人ip地址



进入板块后显示主题列表页面发表人栏显示帖子发表时间
进入板块后显示主题列表页面指: /forums/show/xxxx.page 页面
forum_show.htm页面224行改成:
<span class="postdetails">${topic.firstPostTime}<br /><a >  

176行改成:width=140



bmp图片也显示缩略图
用户经常用print screen键拷贝屏幕图片,并发到帖子上,是bmp格式,不能显示缩略图,要下载才能看,不太方便。这里改一下可显示缩略图 。
AttachmentCommon.java 254行添加:
"bmp".equals(extension) || 

将整个论坛页面宽度由满屏改为固定宽度
header.htm 31行:
<table width="950" border="0" ALIGN="center"> 

将论坛跳转下拉框放到上面
post_show.htm 等页面 90 行,加上下面代码:
<td align="left">   
                    <span class="gensmall">${I18n.getMessage("ForumIndex.goTo")}: </span>   
                    <select onchange="if(this.options[this.selectedIndex].value != -1){ document.location = '${contextPath}/forums/show/'+ this.options[this.selectedIndex].value +'${extension}'; }" name="select">   
                        <option value="-1" selected="selected">${I18n.getMessage("ForumIndex.goToSelectAForum")}</option>                  
                           
                        <#list allCategories as category>   
                            <optgroup label="${category.name}">   
           
                            <#list category.getForums() as forum>   
                                <option value="${forum.id}">${forum.name}</option>   
                            </#list>   
                            </optgroup>   
                        </#list>   
                    </select>   
                        
                    <input class="liteoption" type="button" value="${I18n.getMessage("ForumIndex.goToGo")}" onclick="if(document.f.select.options[document.f.select.selectedIndex].value != -1){ document.location = '${contextPath}/forums/show/'+ document.f.select.options[document.f.select.selectedIndex].value +'${extension}'; }" />   
                  </td>

此段代码可以从 macros\presentaion.ftl 中 <#macro forumsComboTable> 里面拷贝。
让附件图片支持gif动画:
AttachmentCommon.java:
private boolean shouldCreateThumb(Attachment a) {   
        if (SystemGlobals   
                .getBoolValue(ConfigKeys.ATTACHMENTS_IMAGES_CREATE_THUMB)) {   
            String extension = a.getInfo().getExtension().getExtension()   
                    .toLowerCase();   
            if (Attachment.isPicture(extension)) {   
                String path = SystemGlobals   
                        .getValue(ConfigKeys.ATTACHMENTS_STORE_DIR)   
                        + "/" + a.getInfo().getPhysicalFilename();   
                File fileOriginal = new File(path);   
                Image imageOriginal = null;   
                try {   
                    imageOriginal = ImageIO.read(fileOriginal);   
                } catch (IOException e) {   
                    e.printStackTrace();   
                }   
                int widthOriginal = imageOriginal.getWidth(null);   
                int heightOriginal = imageOriginal.getHeight(null);   
                if (widthOriginal > 800 || heightOriginal > 600)   
                    return true;   
                else  
                    return false;   
            } else  
                return false;   
        } else  
            return false;   
    }   


Attachment.java:
public boolean hasThumb() {   
        String pName = this.info.getPhysicalFilename();   
        String extension = pName.substring(pName.lastIndexOf('.') + 1, pName   
                .length() - 1);   
        if (isPicture(extension)   
                && SystemGlobals   
                        .getBoolValue(ConfigKeys.ATTACHMENTS_IMAGES_CREATE_THUMB))   
            return true;   
        else  
            return false;   
    }   
  
    public String thumbPath() {   
        String fileDir = SystemGlobals   
                .getValue(ConfigKeys.ATTACHMENTS_UPLOAD_DIR)   
                + '/' + this.info.getPhysicalFilename();   
        String path = SystemGlobals.getValue(ConfigKeys.ATTACHMENTS_STORE_DIR)   
                + "/" + this.info.getPhysicalFilename();   
        if (new File(path + "_thumb").exists()) {   
            return fileDir + "_thumb";   
        } else {   
            return fileDir;   
        }   
    }   
  
    public static boolean isPicture(String extension) {   
        if ("bmp".equals(extension) || "jpg".equals(extension)   
                || "jpeg".equals(extension) || "gif".equals(extension)   
                || "png".equals(extension))   
            return true;   
        else  
            return false;   
    }   


让头像也支持gif动画:
UserCommon.java: 
private static void handleAvatar(User u) {   
        String fileName = MD5.crypt(Integer.toString(u.getId()));   
        FileItem item = (FileItem) JForumExecutionContext.getRequest()   
                .getObjectParameter("avatar");   
        UploadUtils uploadUtils = new UploadUtils(item);   
  
        // Gets file extension   
        String extension = uploadUtils.getExtension().toLowerCase();   
        int type = ImageUtils.IMAGE_UNKNOWN;   
        if (extension.equals("jpg") || extension.equals("jpeg")) {   
            type = ImageUtils.IMAGE_JPEG;   
        } else if (extension.equals("gif")) {   
            type = ImageUtils.IMAGE_GIF;   
        } else if (extension.equals("png")) {   
            type = ImageUtils.IMAGE_PNG;   
        }   
  
        if (type != ImageUtils.IMAGE_UNKNOWN) {   
            String avatarFinalFileName = SystemGlobals.getApplicationPath()   
                    + "/images/avatar/" + fileName + "." + extension;   
            uploadUtils.saveUploadedFile(avatarFinalFileName);   
            File avatar = new File(avatarFinalFileName);   
            Image imageOriginal = null;   
            try {   
                imageOriginal = ImageIO.read(avatar);   
            } catch (IOException e) {   
                e.printStackTrace();   
            }   
            int widthOriginal = imageOriginal.getWidth(null);   
            int heightOriginal = imageOriginal.getHeight(null);   
            if (widthOriginal <= 130 && heightOriginal <= 130) {   
                u.setAvatar(fileName + "." + extension);   
            }else{   
                avatar.delete();   
            }   
        }   
    }   

分享到:
评论
1 楼 握着橄榄枝的人 2011-07-05  
楼主,看不明白,没表达清楚。

相关推荐

    jforum二次开发 详解 BBS开源安装

    对于那些希望根据自身需求进行定制化的用户,JForum提供了丰富的二次开发接口和文档,使得开发者能够轻松地对论坛进行扩展和改进。 一、JForum的架构与核心组件 JForum采用MVC(Model-View-Controller)设计模式,...

    Jforum二次开发成果

    《Jforum二次开发详解——构建个性化论坛系统》 Jforum,作为一个开源的Java论坛系统,以其优秀的性能和灵活的可扩展性受到了众多开发者和社区管理员的青睐。在Jforum 2.1.8的基础上进行二次开发,可以进一步满足...

    JForum-2.1.6-src.zip_JForum-2.1.4_JForum-2.1.6-src_ejb_jforum_jf

    JForum 提供了丰富的API和文档,方便开发者进行二次开发。 ### 文件结构分析 在提供的压缩包`JForum-2.1.6-src`中,我们可以看到源代码的完整结构,包括但不限于以下关键部分: - **src**: 包含了所有源代码,...

    jforum-2.1.8-编译代码.zip

    在这个"jforum-2.1.8-编译代码.zip"压缩包中,包含了JForum 2.1.8版本的源代码,对于开发者来说,这是一个深入理解JForum工作原理、进行二次开发或定制化改造的宝贵资源。 首先,让我们了解JForum的基本架构。...

    jforum-2.1.8-src.zip

    此外,JForum的源代码开放,允许开发者进行二次开发,定制化自己的论坛系统。 6. **安全与性能** JForum重视安全性,提供了防止SQL注入、XSS攻击等安全措施。同时,通过优化数据库查询和缓存策略,提升了系统的...

    JForum-2.1.4.rar_JForum-2.1.4_java 论坛源码_jforum_论坛源码_论坛网站源码

    源码开放意味着你可以深入研究其内部结构,学习优秀的编程实践,或者根据自己的需求进行二次开发。在部署方面,JForum 可以运行在任何支持Java的Web服务器上,如Tomcat、Jetty等,与数据库如MySQL、PostgreSQL等配合...

    jforum2论坛源码

    "jforum2源码可二次开发"意味着对于有Java开发经验的人来说,可以修改源代码以满足特定需求,比如添加新功能、优化性能或者修复已知问题。二次开发是开源软件的一大优势,它鼓励社区成员贡献自己的代码,共同提升...

    jforum-2.1.8-src.zip_JForum-2.1.8_The Watch_jforum_jforum 2.1.8-

    Personally think is the best forum for the Java source code, open source, you can watch the official website of the latest developments http://www.jforum.net/

    Jforum-2.1.9

    总结来说,Jforum-2.1.9是一个强大且灵活的论坛解决方案,结合MyEclipse的强大开发工具,能够为开发者提供一个高效的开发环境。无论你是想搭建一个社区网站,还是希望深入学习Java Web开发,Jforum都是一个值得研究...

    JForum_SSO_-_JForum单点登陆原理与配置

    JForum是一款开源的论坛软件,具备强大的功能。在与其他Web应用集成时,为了提供无缝的用户体验,通常需要实现单点登录(SSO,Single Sign On)。SSO允许用户在一个系统登录后,无需再次认证即可访问其他关联的系统...

    Jforum二次开发实现SSO登陆(单点登录)

    实现了在一个网站实现多一个论坛的功能,在原网站登陆之后再Cookie保存一个值就可以实现单点登陆...我只是再原有网站可以实现单点登录到论坛.如果拿到资源不会用的也可以评论的时候带上QQ我会尽快联系。说出自己的问题

    jforum-2.1.4-src.zip

    源码的开放性使得开发者可以针对特定需求进行二次开发,比如增加新的插件或修改界面样式,以满足不同用户群体的需求。 在数据库支持方面,JForum展现了其强大的兼容性。它支持多种主流的数据库管理系统,如MySQL、...

    jforum开源的论坛文档

    - 对于简单需求可以直接利用现有的API接口进行二次开发; - 复杂功能建议参考插件开发文档,通过创建插件的方式来实现。 #### 六、总结 jForum作为一款成熟稳定的开源论坛软件,在国内外拥有大量忠实用户群体。...

    Jforum论坛数据库架构

    Jforum是一款基于Java语言开发的开源论坛系统,其强大的功能和灵活性使其在互联网社区建设中受到广泛欢迎。数据库架构是任何Web应用程序的核心部分,对于Jforum论坛而言也不例外。一个良好的数据库架构设计能够确保...

    JForum3 jforum java 开源论坛 论坛

    JForum3是一款基于Java开发的开源论坛系统,其核心设计目标是提供一个高效、稳定且功能丰富的在线讨论平台。这款论坛软件使用了Java语言编写,遵循开放源代码的原则,允许用户自由地使用、修改和分发。JForum3是...

    jforum开源论坛

    由于JForum是开源的,开发者可以深入研究源码,了解其工作原理,并进行二次开发。这包括但不限于添加新功能、优化性能、调整界面样式等。JForum的源码结构清晰,注释丰富,对于Java初学者来说,也是一个很好的学习...

    jforum-2.5.0修正版

    第149行,default.container.encoding应赋于ISO-8859-1,此处把这个值改为了encoding的值即utf-8,导致下面从httprequest中取到值转化时乱码。 代码如下: if (isPost) { //此处containerEncoding = "ISO-8859-1" ...

Global site tag (gtag.js) - Google Analytics