arclist标签没法调用副栏目文章的解决办法php
最近发现DEDECMS中的文章在选择幅栏目后,缓存
在其对应的幅栏目列表中能够显示该文章,但在arclist 标签中却没法显示该文章,测试
网上找了不少,解决办法都同样,但写法却写错了,致使arclist标签在使用了flag属性时会失效的问题。spa
修正后的写法以下。cli
打开/include/taglib/arclist.lib.php,我目前用的最新版 5.7 SP1,方法
代码约位于295-296行。查找如下两行代码。文件
if($CrossID=='') $orwheres[] = ' arc.typeid IN ('.GetSonIds($typeid).')';
else $orwheres[] = ' arc.typeid IN ('.GetSonIds($typeid).','.$CrossID.')';标签
将其替换成如下代码。co
if($CrossID=='') $orwheres[] = ' (arc.typeid IN ('.GetSonIds($typeid).') OR arc.typeid2 IN ('.GetSonIds($typeid).')) ';
else $orwheres[] = ' (arc.typeid IN ('.GetSonIds($typeid).','.$CrossID.') OR arc.typeid2 IN ('.GetSonIds($typeid).','.$CrossID.')) ';oss
OK,这样就改完了,保存后若是你是生成静态的,请生成相关的。若是是动态的,请更新系统缓存。而后就能够看到效果了。
===============================================================================
以上方法有个缺点arclist 标签 就是只能有在显示两处位置
下面方法经测试能够三个 不知道三个以上能够不能够
用arclist标签调用文章的时候才发现,根本没法调用相关文章。
下面给出解决办法,但愿帮到须要的人。
找到/include/taglib/arclist.lib.php文件而后打开。而后在大约300行代码的位置。将下面的代码
if($CrossID=='') $orwheres[] = ' arc.typeid IN ('.GetSonIds($typeid).')';
else $orwheres[] = ' arc.typeid IN ('.GetSonIds($typeid).','.$CrossID.')';
替换成
if($CrossID=='')
$orwheres[] = " (arc.typeid in (".GetSonIds($typeid).") or
arc.typeid2 in(".GetSonIds($typeid).") or CONCAT( ',',
arc.typeid2, ',' ) LIKE '%,".$typeid.",%' )";
else $orwheres[] = " (arc.typeid in (".GetSonIds($typeid)
.",".$CrossID.") or arc.typeid2
in (".GetSonIds($typeid).",".$CrossID.")
or CONCAT( ',', arc.typeid2, ',' ) LIKE '%,".$typeid.",%')";