我们不生产资源我们只是资源的搬运工

emlog文章标签缓存出错问题修复教程

DIM云龙 EMLOG教程

在制作获取文章页下所有标签的时候发现一个BUG,某些文章页下的标签获取的不完全而且也有可能获取不到,这一问题经过晗枫的排查,问题出现在emlog缓存函数中,目前无人发现此BUG并修复的,下面晗枫教给大家如何来修复这些问题。

此问题晗枫测试emlog5.3.1和emlog老司机版本6.0.1出现此问题,其它版本还没做测试,如果是官方默认版应该都有此问题,下面给大家看下截图。

Emlog老司机6.0.1版本缓存标签函数截图

emlog文章标签缓存出错问题修复教程

Emlog5.3.1版本缓存标签函数截图

emlog文章标签缓存出错问题修复教程

如此可见,emlog老司机6.0.1版本获取标签的代码中是从另一个缓存导入的文章id,这个导入文章的id是“newlog”,这个名称是获取文章列表页文章缓存的名称,经测试,如果在emlog后台系统设置中修改每页显示多少篇文章,这个获取标签的代码也会显示多少篇的,在这个篇数以后的文章并不会获取到任何标签,这不知道是不是老司机为了使emlog程序加快运行而修改的。

emlog6.0.1老司机版本缓存标签函数的修复方法就是找到emlog官方版5.3.1版本的此函数替换即可,但是,emlog5.3.1中的获取标签数据表的语句也有错误,这使得此函数在emlog6.0.1中使用还是无法获取到全部的标签,接下来晗枫写一下修复代码。

大家找到此路径修改文件:根目录/include/lib/cache.php

错误的代码:
  1. $tquery = "SELECT tagname,tid FROM " . DB_PREFIX . "tag WHERE gid LIKE '%,$logid,%' " ;
修复的代码:
  1. $tquery = "SELECT tagname,tid FROM " . DB_PREFIX . "tag WHERE gid LIKE '%,$logid,%' or gid LIKE '%,$logid%' or gid LIKE '%$logid,%' or gid LIKE '$logid'";

错误表现在sql语句中的LIKE截取代码

在tag数据表中emlog老司机6.0.1版本的数据为(1,2,3,4,5,6,7,8,9)

emlog5.3.1版本的数据为(,1,2,3,4,5,6,7,8,9)

可见emlog6.0.1的数据比emlog5.3.1的数据前面多了一个逗号,这使得这段获取数据的代码出错,LIKE后的 %,$logid,% 实际匹配的是数据中必须前后都有逗号的标签,利用到emlog6.0.1中并不会获取到1和9,emlog5.3.1也获取不到9,所以在使用中大家也没有注意文章到底少没少标签。

接下来介绍一下修复代码都是什么意思:

%,$logid% 是获取id前面有逗号的标签

%$logid,% 是获取id后面有逗号的标签

$logid 单独一个$logid是获取前后没有逗号的标签

中间用or逻辑运算符连接,就是匹配到的标签都会显示出来

这样就将每个文章所有的标签都提取出来,就不会导致文章获取标签错误的情况了。

资源分享
评论列表