|
发表于 2017-3-5 13:08:00
|阅读模式
发布分类信息的时候forum_typeoptionvar和orum_optionvalue两个表同时储存,但是读取数据的时候是从 forum_typeoptionvar 表里取出,这张表集合了所有分类信息的变量值。而已经发布的分类信息,重新编辑修改后发布 数据只会更新到forum_typeoptionvar,而forum_optionvalue表的数据不会更新,依然是最开始发布的内容。
修改办法,打开source/class/extend/extend_thread_sort.php,找到:- 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数据表内的数据进行调用!
forum_optionvalue表的问题较多,除上上面所说的不能同步外,假如某一版块开启分类信息,并且其中有主题使用了分类信息,如果将此主题删除,forum_optionvalue表中的数据并不会删除!另外,假如主题原来不是分类信息,编辑修改为分类信息,forum_optionvalue同样不会更新。
不但如此,后台如果修改分类信息中变量的类型,forum_optionvalue一样不会更新。
另,forum_optionvalueX提示“Current selection does not contain a unique column. Grid edit, checkbox, Edit, Copy and Delete features are not available.”,而且fid的类型是smallint(6)。
综合以上,Discuz! X3.3的forum_optionvalue只有在发布新主题使用到分类信息时写入数据,之后的任何更新,都不会同步更新到这个表中。 |
|