QQ登录

只需一步,快速开始

开启辅助访问 切换到宽版
搜索

[使用心得] Discuz! X3.3优化修改(十八)——解决编辑帖子后分类信息forum_optionvalue数据表内容不同步问题

[复制链接]
发表于 2017-3-5 13:08:00 |阅读模式
发布分类信息的时候forum_typeoptionvar和orum_optionvalue两个表同时储存,但是读取数据的时候是从 forum_typeoptionvar 表里取出,这张表集合了所有分类信息的变量值。而已经发布的分类信息,重新编辑修改后发布 数据只会更新到forum_typeoptionvar,而forum_optionvalue表的数据不会更新,依然是最开始发布的内容。

修改办法,打开source/class/extend/extend_thread_sort.php,找到:
  1. C::t('forum_typeoptionvar')->update_by_tid($this->thread['tid'], array('value' => $value, 'sortid' => $parameters['sortid']), false, false, $optionid);               
  2. }
  3. if($typeexpiration) {
  4.                     C::t('forum_typeoptionvar')->update_by_tid($this->thread['tid'], array('expiration' => (TIMESTAMP + $typeexpiration)), false, false, null, $parameters['sortid']);
  5. }
复制代码
改为:
  1.                                         C::t('forum_typeoptionvar')->update_by_tid($this->thread['tid'], array('value' => $value, 'sortid' => $parameters['sortid']), false, false, $optionid);
  2.                                         $identifier = DB::result(DB::query("SELECT identifier FROM ".DB::table('forum_typeoption')." WHERE optionid = ".$optionid));
  3.                                         DB::query("UPDATE ".DB::table('forum_optionvalue'.$parameters['sortid'])." SET $identifier='$value',dateline=".TIMESTAMP." WHERE tid=".$this->thread['tid'], 'UNBUFFERED');
  4.                                 }
  5.                                 if($typeexpiration) {
  6.                                         C::t('forum_typeoptionvar')->update_by_tid($this->thread['tid'], array('expiration' => (TIMESTAMP + $typeexpiration)), false, false, null, $parameters['sortid']);
  7.                                         DB::query("UPDATE ".DB::table('forum_optionvalue'.$parameters['sortid'])." SET expiration=".(TIMESTAMP + $typeexpiration)." WHERE tid=".$this->thread['tid'], 'UNBUFFERED');
  8.                                 }
复制代码

这样就能实现在修改分类信息时同步修改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只有在发布新主题使用到分类信息时写入数据,之后的任何更新,都不会同步更新到这个表中。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即註冊

本版积分规则

本版推荐主题

QQ|网站地图|小黑屋|Archiver|東里論壇 ( 粤ICP备14015598号 ) 公安备案图标粤公网安备 44512202000019号
GMT+8, 2022-1-24 15:42 , Processed in 1.956910 second(s), 58 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.