最近在项目中发现,Phpcms v9内容模型删除文章不能同步删除关键词数据表v9_keyword、v9_keyword_data的相关数据,导致文章删除了而关键词还在,以至于相关tag列表页的文章造成错误链接,今晚CMSYOU在这里分享这一修正方法,希望对大家有所帮助。
首先我们看下关键词tag会在什么地方出现?以CMSYOU官方的帮助栏目(http://www.cmsyou.com/support/)为例:Tag标签出现的位置有:列表页和文章页的右侧栏【随机标签】,以及文章内页的文章末尾的【相关标签】。而默认Phpcms v9的标签tag功能则是通过v9_keyword、v9_keyword_data两个表关联文章模型的文章。具体关联的方法:
$keyword_db = pc_base::load_model('keyword_model');$keyword_data_db = pc_base::load_model('keyword_data_model');pc_base::load_sys_func('iconv');if (is_array($data) && !empty($data)) {$siteid = get_siteid();foreach ($data as $v) {$v = defined('IN_ADMIN') ? $v : safe_replace(addslashes($v));$v = str_replace(array('//','#','.'),' ',$v);if (!$r = $keyword_db->get_one(array('keyword'=>$v, 'siteid'=>$siteid))) {$letters = gbk_to_pinyin($v);$letter = strtolower(implode('', $letters));$tagid = $keyword_db->insert(array('keyword'=>$v, 'siteid'=>$siteid, 'pinyin'=>$letter, 'videonum'=>1), true);} else {$keyword_db->update(array('videonum'=>'+=1'), array('id'=>$r['id']));$tagid = $r['id'];}$contentid = $this->id.'-'.$this->modelid;if (!$keyword_data_db->get_one(array('tagid'=>$tagid, 'siteid'=>$siteid, 'contentid'=>$contentid))) {$keyword_data_db->insert(array('tagid'=>$tagid, 'siteid'=>$siteid, 'contentid'=>$contentid));}unset($contentid, $tagid, $letters);}}
具体见phpcms\modules\content\fields\keyword\update.inc.php文件。
但是Phpcms v9默认程序存在一个bug,删除文章的方法里边却忘记了同步删除关键词数据表v9_keyword、v9_keyword_data的相关数据。
我们具体找到phpcms\modules\content\content.php中的delete()函数,在大约332行【删除全站搜索中数据$this->search_db->delete_search($typeid,$id);】的下面加入以下代码:
这样,达到自动减少tag的使用数【$keyword_db->update(array('videonum'=>'-=1'), array('id'=>$k_v['tagid']));】,以及删除线管关联的目的【$keyword_data_db->delete(array('siteid'=>$siteid, 'contentid'=>$id.'-'.$modelid));】。
希望这一分享对碰到此类问题的朋友有所帮助,估计一般用户还没留意这个问题吧~
最后分享下:最近cmsyou的tag标签采用了静态化,比如Phpcms这一个标签的网址为:http://www.cmsyou.com/tags/phpcms.html,不止到大家留意到没有?
欢迎留言探讨!
点击加载更多