chx 学习jForum笔记一

目标:jForum二次开发,读懂源程序。
修改权限管理模块,使之适应原有系统的权限功能。

修改用户管理模块,去除无用的信息,改造用户信息数据表格式。

增加数据导入功能,自动从原论坛读出数据内容写入jForum数据表。


jForum源程序阅读笔记一

2010.12.3 从日期格式开始,发现/jforum/forums/list.page中显示的日期格式为dd/MM/yyyy,修改SystemGlobals.properties文件中的

dateTime.format = yyyy-MM-dd HH\:mm\:ss
 


刷新页面后,发现仅有一处被改变。于是读源代码:\templates\default\forum_list.htm,发现

${I18n.getMessage("ForumListing.mostUsersEverOnline", [ mostUsersEverOnline.getTotal(), mostUsersEverOnline.getDate()?string ])}   
 


为显示最高线人数及时间的语句。其中mostUsersEverOnline.getTotal() 为获取人数,mostUsersEverOnline.getDate()?string为获取时间。


搜索mostUsersEverOnline得到net.jforum.entities/mostUsersEverOnline.java

以下是三个值:

private int total; //同时在线人数
private String date;  //达到峰时的时间 格式显示
private long timeInMillis;  //达到峰时的时间 毫秒

 以下是设置子程序:

 

public void setTimeInMillis(final long time) {
        this.timeInMillis = time;  //设置毫秒时间
     
        final SimpleDateFormat sdf = new SimpleDateFormat(SystemGlobals.getValue(ConfigKeys.DATE_TIME_FORMAT), Locale.getDefault());
        final GregorianCalendar gcal = new GregorianCalendar();
        gcal.setTimeInMillis(time);

        this.setDate(sdf.format(gcal.getTime()));  //设置显示时间
    }


sdf从配置文件读取格式,setDate那句将当前时间转成字符串赋值给

private String date;  //达到峰时的时间 格式显示

mostUsersEverOnline.java分析结束。继续看哪里调用了mostUsersEverOnline。

在net.jforum.repository/ForumRepository.java中有调用。分析此文件:

 

	public synchronized static void start(final ForumDAO forumDAO, final CategoryDAO categoryDAO, final ConfigDAO configModel)
	{
		instance = new ForumRepository();
		
		if (cache.get(FQN, LOADED) == null) {  //未读入缓存
			instance.loadCategories(categoryDAO); //取分类
			instance.loadForums(forumDAO);       //取板块
			instance.loadMostUsersEverOnline(configModel); //取最高在线人数
			instance.loadUsersInfo();  //取用户信息
			
			final Integer totalMessages = (Integer)cache.get(FQN, TOTAL_MESSAGES); //取缓存信息数
			
			if (totalMessages == null) {
				cache.add(FQN, TOTAL_MESSAGES, Integer.valueOf(0)); //设置缓存信息数为零
			}
			
			cache.add(FQN, LOADED, "1"); //已读入缓存标记
		}
	}
	

 

此start过程先判断是否读入过缓存。如未读入则进行读入工作,并置读入标记。

读入工作如下:

			instance.loadCategories(categoryDAO); //取分类
			instance.loadForums(forumDAO);       //取板块
			instance.loadMostUsersEverOnline(configModel); //取最高在线人数
			instance.loadUsersInfo();  //取用户信息

 

	private void loadCategories(CategoryDAO cm) //取分类
	{
		List<Category> categories = cm.selectAll();  //全部分类
		Set<Category> categoriesSet = new TreeSet<Category>(new CategoryOrderComparator());  //根据比较器比较结果构造空树
		
		for (Iterator<Category> iter = categories.iterator(); iter.hasNext(); ) {
			Category category = iter.next();
			
			cache.add(FQN, Integer.toString(category.getId()), category);  //将分类写入缓存
			categoriesSet.add(category);
		}
		
		cache.add(FQN, CATEGORIES_SET, categoriesSet); //将分类树集合写入缓存
	}

 取分类loadCategories似乎是先从数据表中取出全部分类,然后写入缓存,同时构建一个树形集合并写入缓存。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值