返回目录列表
小功能组件开发
帖子搬迁
有时有的帖子发表在错误论坛,应该搬迁到正确的板块,实际上该功能是帖子的论坛类别修改。
在message.jsp应该有如下代码:
在<html:select name="messageForm"
property="forum.forumId">
<html:option value="">请选择</html:option>
<html:optionsCollection
name="forumListForm" property="list"
value="forumId" label="name"/>
</html:select>
中发帖.
这里一个设计技巧在于:我们将messageForm和forumListForm两个页面组件合并在一一起使用。
如果按照原始设计,这里的页面组件都是messageForm,这样,就必须在messageForm中添加Collection fourms字段,如何将数据填入forums中?
由于我们使用jdon框架后,没有专门操作messageForm的action了,所以就考虑在哪里将所有论坛数据填入forums中?
考虑到messageForm是模型Message的影子,所以,只有也在Message中增加Collection forums字段,然后在业务层MessageService中对forums填写数据,但是这里违背了一个设计原则:因为Collection forums字段纯粹属于界面使用,为界面服务的就只能在表现层,而不应该跑到业务层去,这样又将两个层功能耦合在一起。所以,填写forums数据必须在表现层完成,但是表现层又没有操作messageForm的Action,如何实现呢?
考虑到论坛列表这一功能我们已经在下面struts-config配置实现了:
<action
path="/forum/forumList"
type="com.jdon.jivejdon.presentation.action.ForumListAction"
name="forumListForm" scope="request"
validate="false">
<forward
name="success" path="/forum/forumList.jsp"/>
</action>
那么我们能不能使用这个列表功能呢?使用Action串联方式,由此有以下配置:
原理我们发表新帖是调用/message/messageAction.shtml,如下配置:
<action
name="messageForm" path="/message/messageAction"
type="com.jdon.strutsutil.ModelViewAction"
scope="request" validate="false">
<forward name="create"
path="/message/message.jsp" />
<forward
name="edit" path="/message/message.jsp" />
</action>
现在,我们在/message/messageAction.shtml之前串联一个/forum/forumList.shtml功能,改写struts-config-message.xml配置如下,将现有的/message/messageAction.shtml改名为/message/messageAction2.shtml;而将/forum/forumList.shtml改名为/message/messageAction.shtml,这是发帖初始入口。
<action
path="/message/messageAction"
type="com.jdon.jivejdon.presentation.action.ForumListAction"
name="forumListForm" scope="request" validate="false">
<forward
name="success" path="/message/messageAction2.shtml"/>
</action>
<action
name="messageForm" path="/message/messageAction2"
type="com.jdon.strutsutil.ModelViewAction"
scope="request" validate="false">
<forward
name="create" path="/message/message.jsp" />
<forward
name="edit" path="/message/message.jsp" />
</action>
这样,运行顺序是:/message/messageAction.shtml -->/message/messageAction2.shtml
-->/message/message.jsp
这样,在message.jsp中就存在两个ActionForm:MessageForm和forumListForm,由此我们就可以实现如下下拉菜单功能,发言者可以自行选择在哪个论坛发言:
当主题贴没有回帖时,也可以进入主题贴修改功能中,更改选择发表论坛。
以上适合帖子创建比较简单,但帖子被修改时,那么如何接受帖子更改后的论坛信息呢?接受更改则比较复杂,如果当前这个帖子有跟贴,那么需要将跟贴中Forum值一个个遍历下来再修改,工程量比较大,我们可以设定一个业务前提,只有当前帖子只有一个时,也就是说既是根贴,也是末贴,这样的帖子更改比较方便。
由于ForumMessage中关联Form,而且ForumMessage关联了ForumThread,注意ForummThread中的Forum也要更新。
主题标签设计
论坛中有很多帖子具备一定水准,但是回复或讨论可能不是很热烈,不值得置顶或作为精华,这个帖子属于一个子领域主题,例如struts刚刚出来时,有一些人在谈论;Ruby
on rails有一些人发帖,但是相对另类,如何将这些帖子以一个主题标签从众多帖子中分离出来,能够让感兴趣的人能够迅速发现这些帖子?
这就是需要标签或者是关键字,这个标签反应的是帖子谈论某个主题,准确应该称为主题标签。
问题是:主题标签(topictags)什么时候由谁来实现?
主题标签如果由发帖者在发帖时就进行输入,这个会带来内容管理问题,可能不是谈论某个主题的帖子被打上标签。
主题标签应该由版主或者所谓内容审核员来进行操作,如果内容审核员认为某个帖子符合条件,可以打上主题标签。
主题标签可以使用Thread的Property来实现,同时作为搜索的关键字进入搜索,概时可由lucene根据主题标签将同类Thread实现查询。
那么Compass是否能够将主题标签和一般关键字查询区分开来,例如struts的主题标签和struts的普遍关键字?
contentbycategory.action?idx=3&ct=1&alias=webframework
设计一个内容分类模型ThreadTag:
字段: id; 名称alias;ForumThread集合。
功能分析:将帖子都按照内容分类,分类内容可以自由标贴,
需要一个标签式的分类,然后根据标签为关键词,将一系列ForumThread罗列出来即可,这些标签内容只有一个层次,每个ForumThread只有一个标签,这样能够更好地特出那些讨论话题比较专业的帖子,如果一个ForumThread涉及多个标签,其实就不能体现专业性。ThreadTag与ForumThread关系是1:N关系。应该将ForumThread中包含ThreadTag。
问题:由谁来打上ThreadTag标签?
解答:可以由版主角色来实现。
角色分配管理,如何将banQ分配到版主?
分析建模 设计模式 架构
全局 热点关键字
由管理员输入热门关键词名称及其对应的URL(??能否改为帖子发表时由版主来设定),建立com.jdon.jivejdon.model.HotKeys 其中props就是Property的集合,Property的name字段放置热门关键词,Property的value字段放URL,HotKeys特殊之处在于其ID固定为44444444。
因为全局关键词集合只有一个,因此可以用一个具体数字来标识这个实体。持久化保存可以使用Forum论坛对应的ForumProperty表来保存,表示这个论坛的全局关键字。
关键词管理
在管理界面中,在com.jdon.jivejdon.presentation.action.admin.HotKeysAction中,主要实现持久保存和更新,每次更新将之前的所有Property删除,插入当前的Property集合。主要特点在于管理界面admin/search/hotkeys.jsp中的Javascript设计,可以实现多个关键词动态输入,需要删除某个关键词,只要将该关键词输入项名称和URL情空就可以。
关键词显示
关键词在每个帖子中集中显示,这样,可以让浏览帖子时,看到热门关键词,从而点击进入,也可以在当前帖子中涉及到相关关键词时,能够将关键词变成一个可以点击的链接,方便用户了解相应概念。
这两种功能都是在jsp页面中显示,但是实现方式不一样:
集中显示实际就是要在页面上开辟一个区域用来显示,可以使用Action串联方式来实现,原本messageListAction导出forward messageList.jsp时,改为action HotKeys.shtml,这样做缺点是维护不便,维护messageListAction时,需要涉及多个不相关的Action。
解决办法是引入tiles,既然在页面某个区域显示,这样,在messageList.jsp中只要使用tiles:insert插入tiles定义的那个区域,tiles-def.xml中定义
<definition name=".hotkeys" path="/query/hotKeys.shtml?method=hotkeys">
</definition>
对于第二种在帖子中用链接替代相应的关键词。则不能只在显示上做文章,涉及到帖子内容也就是业务核心了,则使用帖子输出过滤器来实现,增加com.jdon.jivejdon.model.message.output.hotkeys.HotKeysFilter,在这个类中进行替代动作,JiveJdon增加一个新过滤器很简单,在管理界面 全局过滤中,将HotKeysFilter完整类名添加,然后再安装就可以,如果需要以后JiveJdon新系统中缺省就有HotKeysFilter,那么就要在managers.xml中添加:
<component name="renderingAvailableFilters"
class="com.jdon.jivejdon.model.message.output.RenderingAvailableFilters">
<constructor value="com.jdon.jivejdon.model.message.output.html.HTMLFilter"/>
<constructor value="com.jdon.jivejdon.model.message.output.html.Newline"/>
<constructor value="com.jdon.jivejdon.model.message.output.html.TextStyle"/>
<constructor value="com.jdon.jivejdon.model.message.output.html.URLConverter"/>
<constructor value="com.jdon.jivejdon.model.message.output.shield.Profanity"/>
<constructor value="com.jdon.jivejdon.model.message.output.codeviewer.CodeHighlighter"/>
<constructor value="com.jdon.jivejdon.model.message.output.html.WordBreak"/>
<constructor value="com.jdon.jivejdon.model.message.output.html.QuoteFilter"/>
<constructor value="com.jdon.jivejdon.model.message.output.emotion.Emoticon"/>
<constructor value="com.jdon.jivejdon.model.message.output.html.ImageFilter"/>
<constructor value="com.jdon.jivejdon.model.message.output.shield.Bodymasking"/>
<constructor value="com.jdon.jivejdon.model.message.output.hotkeys.HotKeysFilter"/>
</component>
热点关键字输入
热点关键词TAG初期由管理员设置输入,如果能改为发帖时输入,则能够即时更新关键词,保持关键词新鲜性。
TAG初步定于授权版主或编辑之类的角色完成。这样能够保持TAG的完整统一性,以后视情况可开放给普通用户。
版主在创建新帖、回复以及编辑帖子三种情况下都可以进行TAG的创建 列表和修改。
ForumThread和Tag是1:N的关系,一个Thread有多个Tag,Tag内容如下:
TagRepository主要对MessageKenel业务核心负责和服务,而TagDao主要是对TagRepository负债,TagRepository和TagDao两者并不一样,TagDao主要以数据库数据表访问为主,比如输入参数基本都是ID和表字段;而TagRepository则输入参数和结果都是以ThreadTag为对象,说明TagRepository是对象ThreadTag仓储或休眠地。
简单设计,在发言时,指定tag,使用空格或逗号分离,由发言者打标签,审核者核准,可在全部功能完成后加入。
积分:
增加版主以及积分功能,统一设计,管理员设定当某个用户在某个板块内发言的积分达到一定程度以后,可自动升级版主;用户积分由管理员或本版版主打分。
置顶或精华区功能:
将具体帖子放于论坛顶部或精华区。
自定义表单字段:
发布新主题时,用户可以增加一些字段,当其他用户回复时,必须填写这些字段,这样功能可用于调查和公布一些活动。
更多Jdon框架专题讨论
JdonFramework作为一个免费开源软件开发平台,可以商用开发大多数数据库应用软件和管理软件: 电子商务软件 在线教育软件 税务软件 Web快速开发软件 财务软件 购物车软件 医院帐务软件 crm software medical software 人事薪资软件payroll software 在线购物软件 销售软件 项目管理软件 房产不动产管理软件 生产软件 PDM软件 制造业软件 仓库软件 采购软件 进销存软件 危险源监控软件 物流软件 超市软件 银行软件 保险软件 汽车软件 医疗软件 电子软件 自动化软件 服装软件 烟草软件 分销管理软件 供应商管理软件
|