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

DEDECMS是最优秀的中文开源CMS系统之一了,不过,DEDE系统也不是尽善尽美的,存在许多待改善的地方,且不说它那基本广受诟病的安全问题,今天跟版网就找其中一个细节说说它的问题,那就是它的tag标签问题。 DEDECMS 中的tag功能设计得不合理,正确的方式是


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函数,主要保存文章对应标签的过程如图:



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



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



然后修改InsertOneTag相关的函数InsertTags


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



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




这个函数修改后,用户在编辑标签并保存以后,系统就按照用户标记的顺序进行输出了。
 
跟版网的程序员已经通过修改源代码修改了这个问题,如果需要相应源代码的朋友,可以点击链接下载
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

织梦DEDECMS 栏目文章文章命名规则修改, 每次添加栏目的时候 都要改文章命名规则,十分麻烦, 修改下面这个地方就可以一改永亦,织梦模板网为您解答 找到\include\common.inc.php 搜索 $cfg_df_namerule 把: $cfg_df_namerule = {typedir}/{Y}/{M}{D}/{aid
当我们通过{dede:arclist keyword=关键词}来调用文章列表时,你会发现只在其中一个栏目里生效,在其他栏目,仍然显示上一次的关键词。 原因是由于arclist的缓存导致的。 只需修改/include/taglib/arclist.lib.php文件,大概在384行: $taghash = md5(seriali
我们在使用织梦dedecms数据库内容替换时候,经常遇到 安全码 显示的无法识别或者不清晰,这个安全码的位置是在核心 - 批量维护 - 数据库内容替换,如果识别不了,这个页面还没有改变验证码的地方,只能重新刷新页面,如果我们不想要这个安全码的话,要怎么操
今天一个客户在安装织梦dedecms时候,安装完成后登录后台就出现Safe Alert Request Error step 2,常用dedecms的朋友都知道,这是织梦的安全机制,在程序觉得有sql注入等攻击时候,会有这种提示。 1、起初我以为是文件没传全,让这个朋友重新传了文件上去安
dede织梦搜索伪静态,伪静态设置成功后,访问URL地址效果如下: 搜索页 http://www.baidu.com/search/织梦.html 搜索分页 http://www.baidu.com/search/织梦-2.html 本教程也适用于手机端。 开启伪静态: 后台-系统参数-核心设置-开启伪静态 后台-系统参数-
在使用 织梦模板 建站中,随机数作为一个偶尔使用到的参数,在具体使用中虽然用的少,但是今天跟版网小编给大家介绍下,大家可以参考下: 实现随机数的调用可以使用下面的js: 方法一:js代码 Math.rondom()*(m-n)+n; //生成在n到m之间的整数 但如果要用随机