dedecms调用副栏目文章列表方法
1.sql调用
2.修改arclist标签
修改文件/include/taglib/arclist.lib.php
查找
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 FIND_IN_SET('.GetSonIds($typeid).',arc.typeid2)'; else $orwheres[] = 'arc.typeid IN ('.GetSonIds($typeid).','.$CrossID.')or FIND_IN_SET('.GetSonIds($typeid).',arc.typeid2)';
或者有个兼容性更高的代码:
1 if($CrossID==''){ 2 $orwheres[] = ' (arc.typeid IN ('.GetSonIds($typeid).') OR arc.typeid2 IN ('.GetSonIds($typeid).') or FIND_IN_SET('.$typeid .', arc.typeid2)>0)'; 3 }else{ 4 $orwheres[] = ' (arc.typeid IN ('.GetSonIds($typeid).','.$CrossID.') OR arc.typeid2 IN ('.GetSonIds($typeid).','.$CrossID.') or FIND_IN_SET('.$typeid .',arc.typeid2)>0) '; 5 }
代码具体意思不多做解释。无非就是给sql语句增加了个判断typeid2的情况。
刚才我百度了一下,这方面的修改文章还真不少。
还有人提到了模糊查询。我把下面的代码黏贴进来:
模糊查询说明:
mysql中如果用like模糊查询的话,也是可以的。不过可能不是很准。
代码如下:
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.",%')";
一般SQL是可以支持CHARINDEX函数的。不过可惜的是Mysql不支持这个函数所以只能用以上方法或者like模糊查询了。如果你有更好的方法的话。