dede副栏目调用方法用普通DEDE调用栏目的代码无效,dede封面或者首页调用副栏目的文章,用dede 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)';
代码说明:
arc.typeid IN ('.GetSonIds($typeid).')查询dede_arctiny表中的typeid字段,如果是有.GetSonIds($typeid).的就查询并返回去。这里没有typeid2所以在这里就要加上 or FIND_IN_SET('.GetSonIds($typeid).',arc.typeid2)'
意思就是查询typeid2字段中如果包含了.GetSonIds($typeid).此数字的话也返回。但是这样一设置封面的推荐什么的都不显示了,所以只能用模糊查询。
模糊查询说明:
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模糊查询了。如果你有更好的方法的话。除外,我只知道这两种就先发出来了。
本文来源 电脑互助网|http://www.pc811.com 原文链接:http://www.pc811.com/6/4/25022.html (责任编辑:yujeu) |