DedeCMS的TAG标签SEO问题改进及PHP源代码讲解

305



DEDECMS是最优秀的中文开源CMS系统之一了,不过,DEDE系统也不是尽善尽美的,存在许多待改善的地方,且不说它那基本广受诟病的安全问题,今天跟版网就找其中一个细节说说它的问题,那就是它的tag标签问题。
     DEDECMS中的tag功能设计得不合理,正确的方式是:如果一篇文章被加了A,B,C三个标签,程序应该按照从A到C的顺序,顺次去匹配标签,所以我们可以把与文章与贴近的长尾词标签放在A位置,把一些热词放在C位置,这样文章既可以匹配出非常贴近的相关文章,而且整个相关文章数也能够用足。
    而DEDECMS源代码中的匹配原则是这样的:如果你添加了A,B,C三个标签,在保存标签的时候会将按照第一次A,B,C的顺序保存下来,并按照id排序输出:但是以后修改只是修改了标签的内容就不能修改标签的顺序了。也就是说如果首先添加了A,C(图1-1),在想添加B按照A,B,C(图1-2)的顺序修改的时候,原先的A,C标签已存在id小于后添加的标签id,就会无法按照A,B,C的顺序保存,而是按照A,C,B进行排序,不能达到预期的效果。
 
一般来说,热词会比较早地进入数据库,所以想插入或者添加新的热词保存标签的时候就会按照最早的顺序进行保存,调取相关文章的时候就不能调取出与输入顺序相似的结果。
 
Dedecms tag问题的程序修改说明:
(1)、当前程序的实现原理
Dedecms操作标签的文件是/include/helpers目录下archive.helper.php,保存标签的函数是在文件下方的InsertOneTag函数,主要保存文章对应标签的过程如图:



通过上图可以看出代码中没有对于文章对应表(wmd_taglist)标签排序的设置,然后在文件中GetTags($aid)读取文章对应标签的时候没有对读取排序进行操作,默认为按照tid的顺序读取,如下图:



输出的结果和上文所叙述的结果相同,这个tid即等于根据进入标签数据表的顺序,所以标签的tid会比较大。
(2)、建立一个表存储某篇文章标签顺序
      如果要让文章标签按照用户输入的顺序进行保存,就必须记录用户输入保存标签是的顺序所以我们要修改文章标签表wmd_taglist。在表中添加一个字段作为记录用户输入是排序的字段,修改表的方式如下:
  ALTER TABLE `wmd_taglist` ADD `order` INT( 3 ) NOT NULL COMMENT '序号' AFTER `tag`
将sql语句复制,用管理员用户登录dede后台左侧树栏“系统”->"sql命令行工具" 粘贴在文本框中,点击“确定”(sql语句中的“wmd_taglist”的表前缀根据你的数据库中设置的表前缀)。
(3)、修改匹配标签的函数
然后修改操作文章标签的方法,首先修改添加标签的函数。在原函数中添加了一个参数作为序号的记录function InsertOneTag ($tag, $aid,$i),$i是添加时的序号该函数主要修改了文章标签添加的部分,加入对`order`排序信息的添加。修改后如图:



然后修改InsertOneTag相关的函数InsertTags


这样在添加标签的时候就会记录用户输入标签是的排列顺序,然后修改获取标签的数序函数GetTags($id)中的获取标签的属性按照`order`的顺序读取,修改后的代码如下图:



以上修改的是标签添加到读取的过程,还要修改编辑标签的方式,编辑标签的函数也是在同文件中,UpIndexKey($id, $arcrank, $typeid, $sortrank=0, $tags='')函数,该函数分为两次循环进行对标签的操作,第一次循环,判断用户修改的标签时候以存在,不存在的话进行添加。第二次循环,判断已存在的标签是否和用户输入的标签相同,如果已存在的标签中有但是用户输入的标签中没有,将该标签删除,如果都存在那么根据用户输入的标签顺序重新排序。代码如下:




这个函数修改后,用户在编辑标签并保存以后,系统就按照用户标记的顺序进行输出了。
 
跟版网的程序员已经通过修改源代码修改了这个问题,如果需要相应源代码的朋友,可以点击链接下载
The End

相关推荐

织梦dedecms生成报错Fatal error: Allowed memory size of in /include
织梦生成静态html页面时报错:Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 71 bytes) in /wwwroot/include/helpers/string.helper.php on line 121 字面意思理解是内存不足,很多朋友可能认为是内存不足问题,实际上不...
2023-10-13 dedecms安装使用
329

织梦Dedecms限制栏目列表生成的页数
有时候我们的文档特别的多,另外也是为防止网站被采集,全站文章被索引,所以要控制下织梦dedecms列表页面数量。 这样的话我们要具体怎么操作呢? 1、首先建立一个全局变量: 在系统-站点设置中添加一个新的变量,变量名称:cfg_listmaxpage,变量说明:栏目...
2023-05-24 dedecms安装使用
126

dedecms织梦全局变量调用方法总结
dedecms织梦的全局变量可以在/include/common.inc.php文件中看到,此文件内定义了大量的全局变量,详细自己去看看。 如果我们要实用dedeCMS织梦全局变量该如何调用: 第一种单独调用: {wmd:global.变量名 /},注意闭合,否则会以文本形式输出。这种一般适用...
2023-03-01 dedecms安装使用
238

织梦DEDECMS 栏目文章文章命名规则修改
织梦DEDECMS 栏目文章文章命名规则修改, 每次添加栏目的时候 都要改文章命名规则,十分麻烦, 修改下面这个地方就可以一改永亦,织梦模板网为您解答 找到\include\common.inc.php 搜索 $cfg_df_namerule 把: $cfg_df_namerule = {typedir}/{Y}/{M}{D}/{aid...
2021-09-24 dedecms安装使用
165

解决dedecms织梦系统{wmd:arclist keyword='动态获取关键词'}只生效一次
当我们通过{wmd:arclist keyword=关键词}来调用文章列表时,你会发现只在其中一个栏目里生效,在其他栏目,仍然显示上一次的关键词。 原因是由于arclist的缓存导致的。 只需修改/include/taglib/arclist.lib.php文件,大概在384行: $taghash = md5(seriali...
2021-09-24 dedecms安装使用
212

织梦dedecms数据库内容替换安全确认码怎么去掉
我们在使用织梦dedecms数据库内容替换时候,经常遇到 安全码 显示的无法识别或者不清晰,这个安全码的位置是在核心 - 批量维护 - 数据库内容替换,如果识别不了,这个页面还没有改变验证码的地方,只能重新刷新页面,如果我们不想要这个安全码的话,要怎么操...
2021-09-24 dedecms安装使用
109