主题 : 与大家分享一下2.4.2如何一篇文*多个栏目
级别: 举人
UID: 324
积分:130 加为好友
威望: 0 精华: 0
主题:17 回复:29
注册时间:2009-07-29
在线时长:0
1#   发表于:2010-09-13 10:59:47  IP:124.185.*.*
2.4.2的数据库设计文章对栏目是多对一的关系,如果想要一篇文章属于多个栏目,文章和栏目就需要多对多的关系。
需要新建一个文章对栏目的关系表,大家可以参考cms_article_topic这个表来建
如果之前已经录了文章,大家可以把文章id和栏目id导到新表里。
建好后重新来生hbm和bean。这时BaseArticle和BaseChannel就会多个关联的set。
然后修改ArticleDaoImpl.java下边这一段

if (chnlId != null) {
f.append(" inner join bean.channel node,CmsChannel parent");
f.append(" where node.lft between parent.lft and parent.rgt");
f.append(" and parent.id=:chnlId").setParam("chnlId", chnlId);
}
改成
if (chnlId != null) {
f.append(" inner join bean.(这里改为你BaseArticle里的新Set)node,CmsChannel parent");
f.append(" where node.lft between parent.lft and parent.rgt");
f.append(" and parent.id=:chnlId").setParam("chnlId", chnlId);
}
这样,就可以不影响jeecms标签功能的前提下实现一篇文章同属于多个栏目。

然后我们来看一下怎样添加一篇文章到多个栏目
2.4.2的文章录入不带选择副栏目的功能,如果大家使用过3.0beta,就会发现测试版本带选择副栏目的功能
大家可以参考这个使用p.tree标签来新加一个副栏目的选择,然后自己对照里面的格式把js写好。
可以把这个副栏目的id存到文章表中没有使用的自定义字段里,
然后在Article.java中加入方法
public void addToChannels(CmsChannel cmschannel){
Set<CmsChannel> cmschannels= 这里是你BaseArticle中新Set的get方法
if(cmschannels == null){
cmschannels = new HashSet<CmsChannel>();
这里是你BaseArticle中新Set的set方法(cmschannels);
}
cmschannels.add(cmschannel);
}
最后在ArticleMngImpl.java中saveArticle方法中把存到bean里的副栏目id取出来处理后做为bean.addToChannels的参数
修改和删除大家可以自行研究,只要把表的关系确定好,这些都是比较简单的了!
级别: 童生
UID: 10739
积分:3 加为好友
威望: 0 精华: 0
主题:0 回复:3
注册时间:2010-09-08
在线时长:0
2#   发表于:2010-09-13 11:37:21  IP:115.173.*.*
感谢您的分享
1 共1页