Discuz!是一个强大的论坛系统,现在的dz已经更新到了X3.2版本,其功能可以说是网站系统中最为完善的,无论是论坛还是门户等 但圣人也有犯错的时候,最近开发dz的时候涉及到使用dz的分类信息,但是我发现dz的分类信息机制很不完善,发布分类信息的时候两个表同时储存,但是读取数据的时候是从 forum_typeoptionvar 表里取出,而这张表集合了所有分类信息的变量值,如果分类信息的数据量很大,那肯定会影响性能(关于怎么修改,我之后再发布)已经发布的分类信息,从新编辑修改后发布 数据只会更新到 forum_typeoptionvar 而forum_optionvalue表的数据不会更新,依然是最开始发布的内容 现在我先说下 关于 forum_typeoptionvar和forum_optionvalue两张表在编辑帖子发布后 分类信息不能同步更新问题! 1、首先找到以下文件source/class/extend/extend_thread_sort.php 2、大约在121 行代码处: - C::t('forum_typeoptionvar')->update_by_tid($this->thread['tid'], array('value' => $value, 'sortid' => $parameters['sortid']), false, false, $optionid);
- }
- if($typeexpiration) {
- C::t('forum_typeoptionvar')->update_by_tid($this->thread['tid'], array('expiration' => (TIMESTAMP + $typeexpiration)), false, false, null, $parameters['sortid']);
- }
复制代码 修改为:- C::t('forum_typeoptionvar')->update_by_tid($this->thread['tid'], array('value' => $value, 'sortid' => $parameters['sortid']), false, false, $optionid);
- $identifier = DB::result(DB::query("SELECT identifier FROM ".DB::table('forum_typeoption')." WHERE optionid = ".$optionid));
- DB::query("UPDATE ".DB::table('forum_optionvalue'.$parameters['sortid'])." SET $identifier='$value',dateline=".TIMESTAMP." WHERE tid=".$this->thread['tid'], 'UNBUFFERED');
- }
- if($typeexpiration) {
- C::t('forum_typeoptionvar')->update_by_tid($this->thread['tid'], array('expiration' => (TIMESTAMP + $typeexpiration)), false, false, null, $parameters['sortid']);
- DB::query("UPDATE ".DB::table('forum_optionvalue'.$parameters['sortid'])." SET expiration=".(TIMESTAMP + $typeexpiration)." WHERE tid=".$this->thread['tid'], 'UNBUFFERED');
- }
复制代码 这样修改完成后,就能实现在修改分类信息时同步修改forum_typeoptionvar和forum_optionvalue两张数据表内容,以便之后对forum_optionvaluen数据表内数据的远程调用! |