织梦arclist调用副栏目不显示的解决办法:
打开/include/taglib/arclist.lib.php,代码约位于295-296行,查找以下两行代码:
if($CrossID=='') $orwheres[] = ' arc.typeid IN
('.GetSonIds($typeid).')'; else $orwheres[] = ' arc.typeid IN
('.GetSonIds($typeid).','.$CrossID.')';   将其替换成以下代码: $vicewheres =
""; $typeids = explode(",",GetSonIds($typeid)); $crossids =
explode(",",$CrossID); $typeidss = array_merge($typeids,$crossids);
$typeidss = array_unique($typeidss); foreach($typeidss as $tid){
$liketypeid2 = ",".$tid.","; $vicewheres.= " or
CONCAT(',',arc.typeid2,',') like '%$liketypeid2%' "; }
if($CrossID==''){ if($vicewheres!="") $orwheres[] = ' (arc.typeid
in ('.GetSonIds($typeid).') '.$vicewheres.') '; else $orwheres[] =
' arc.typeid in ('.GetSonIds($typeid).') '; }else{
if($vicewheres!="") $orwheres[] = ' (arc.typeid in
('.GetSonIds($typeid).','.$CrossID.') '.$vicewheres.') '; else
$orwheres[] = ' arc.typeid in ('.GetSonIds($typeid).','.$CrossID.')
'; } 这种办法可以解决typeid="2"的情况下不显示副栏目的问题,
如果typeid=“2,3,8”,有多个栏目需要调用副栏目就不行了 怎么解决这个问题,找到262行, $orwheres[] = "
arc.typeid IN ($typeid) "; 直接替换为: $vicewheres = ""; foreach($typeid
as $tid){ $liketypeid2 = ",".$tid.","; $vicewheres.= " or
CONCAT(',',arc.typeid2,',') like '%$liketypeid2%' "; }
if($vicewheres!="") $orwheres[] = " (arc.typeid in ($typeid)
$vicewheres) "; else $orwheres[] = " arc.typeid in ($typeid) ";
问题产生的原因,看下arclist.lib.php原始代码:( typeid为主栏目id, typeid2为副栏目id)
找到246行: //指定了多个栏目时,不再获取子类的id if( preg_match('#,#', $typeid) )
//如果typeid字段匹配逗号, 就是说typeid调用多个栏目,例如:typeid=“2,3,8” {
//指定了getall属性或主页模板例外 if($getall==1 ||
empty($refObj->Fields['typeid'])) { $typeids = explode(',',
$typeid); foreach($typeids as $ttid) { $typeidss[] =
GetSonIds($ttid); } $typeidStr = join(',', $typeidss); $typeidss =
explode(',', $typeidStr); $typeidssok = array_unique($typeidss);
$typeid = join(',', $typeidssok); } $orwheres[] = " arc.typeid IN
($typeid)"; //导致typeid='2,3,8'情况下不能调用副栏目问题产生的地方 } else
//如果typeid不匹配逗号,就是调用一个栏目 例如 typeid="2" { //处理交叉栏目 $CrossID = '';
if($ctag->GetAtt('cross')=='1') { $arr =
$dsql->GetOne("SELECT
`id`,`topid`,`cross`,`crossid`,`ispart`,`typename` FROM
`dede_arctype` WHERE id='$typeid' "); if( $arr['cross']==0 || (
$arr['cross']==2 && trim($arr['crossid']=='') ) ) {
$orwheres[] = ' arc.typeid IN ('.GetSonIds($typeid).')'; } else {
$selquery = ''; if($arr['cross']==1) { $selquery = "SELECT id,topid
FROM `dede_arctype` WHERE typename LIKE '{$arr['typename']}' AND
id<>'{$typeid}' AND topid<>'{$typeid}' "; } else {
$arr['crossid'] = preg_replace('#[^0-9,]#', '',
trim($arr['crossid'])); if($arr['crossid']!='') $selquery = "SELECT
id,topid FROM `dede_arctype` WHERE id IN('{$arr['crossid']}') AND
id<>'{$typeid}' AND topid<>'{$typeid}' "; }
if($selquery!='') { $dsql->SetQuery($selquery);
$dsql->Execute(); while($arr = $dsql->GetArray()) { $CrossID
.= ($CrossID=='' ? $arr['id'] : ','.$arr['id']); } } } }
if($CrossID=='') $orwheres[] = ' arc.typeid IN
('.GetSonIds($typeid).')'; else $orwheres[] = ' arc.typeid IN
('.GetSonIds($typeid).','.$CrossID.')';
//导致typeid='2'情况下不能调用副栏目问题产生的地方 }

文章来源:牛人织梦

织梦调用多个栏目typeid="1,2,3"不支持的解决方法的更多相关文章

  1. DEDECMS织梦后台更新网站栏目无反应一键更新无响应的解决方法

    很多站长朋友反应,经常会遇到DEDECMS织梦后台更新网站栏目无反应和一键更新无响应的问题,这个问题的所在就是在于恢复了数据或者覆盖了织梦后台文件之后,点击一键更新完全没反应,或者生成栏目的时候其他都 ...

  2. dede织梦调用顶级二级栏目及下三级栏目方法(数据库实现)

    上次有说道能调用织梦的二级栏目今天来说道说道调用三级,乃至无限极 ①:通过dede调用二级栏目大家都会调用,但要调用三级栏目,就有点麻烦了,如下样式的三级栏目dede如何调用呢?如下: ------- ...

  3. 织梦系统中出现DedeTag Engine Create File False提示原因及解决方法

    今天更新网站时dedecms系统时,遇到一个问题:DedeTag Engine Create File False  出现这样的提示. 其实这也不算是什么错误,我个人觉得最重要的一点就是根目录下没有给 ...

  4. 织梦DEDECMS文章、栏目页获取当前页面顶级栏目名称的方法

    在用织梦做一些项目时,时常会碰到需要在当前页面调用顶级栏目名称的时候,织梦默认{dede:field name='typename' /} 可以获取当前栏目页上一级栏目的名称,而不是当前栏目顶级栏目名 ...

  5. 织梦DedeCMS删除所有栏目或文章后,新建ID不从1开始的解决方法

    这个修改方法很简单,从模板无忧那里找到的,只需要在后台系统-SQL命令行工具里面运行以下语句即可,不用采用笨方法重新安装织梦CMS了. 删除所有栏目,新建ID从1开始: ALTER TABLE `de ...

  6. 织梦channelartlist标签当前栏目高亮

    channelartlist标签完美支持currentstyle属性,实现自动加载当前栏目CSS样式,可以用来标识当前栏目位置的CSS,解决方法如下: 打开文件include\taglib\chann ...

  7. 【我的Android进阶之旅】Android调用JNI出错 java.lang.UnsatisfiedLinkError: No implementation found for的解决方法

    错误描述 今天使用第三方的so库时候,调用JNI方法时出现了错误.报错如下所示: 11-01 16:39:20.979 4669-4669/com.netease.xtc.cloudmusic E/a ...

  8. 织梦dedecms 用交叉栏目时arclist标签调用不出内容文章的问题(纯转载)

    本文转自:http://www.cnblogs.com/cnteam/articles/4056702.html 最近用了交叉栏目发现当为手动指定交叉栏目ID时用arclist标签不能调出相关文章最后 ...

  9. dede织梦调取一二三级栏目名及栏目下的内容列表的方法

    网站根据需要,把地区划成省-市-文章的层级结构,栏目首页需要显示的是 复制代码代码如下: {dede:channelarclist} <!--省显示--> <a href=" ...

随机推荐

  1. [JSOI2008]火星人

    嘟嘟嘟 嗯. splay维护哈希. 如题,用splay维护哈希,查找的时候二分.所以复杂度是取决于询问复杂度:\(O(n \log^ 2{n})\). 这道题还有一个技巧,就是一个节点记录的是他的子树 ...

  2. Day10 API

    String类 String是不可变类:值一旦确定了,就不会更改. public static void main(String[] args) { String s1 = "hello&q ...

  3. [转]托管DirectX,从MDX到SlimDX的转换

    开始迁移到托管DirectX SlimDX框架的,例如,MDX应用的帕特里克Murrisa地形的浏览器. 在托管DirectX代码所示,到新的代码,与SlimDX评论的形式. MDX迁移项目中Slim ...

  4. 【转】Tomcat 9.0安装配置

    本文转自:http://blog.sina.com.cn/s/blog_15126e2170102w5o8.html 一.JDK的安装与配置 1.从官网下载jdk,注意是jdk不是jre.最好从官网下 ...

  5. 《关于ES6的学习》

    var JavaScript中,我们通常说的作用域是函数作用域,使用var声明的变量,无论是在代码的哪个地方声明的,都会提升到当前作用域的最顶部,这种行为叫做变量提升(Hoisting) 也就是说,如 ...

  6. 【题解】洛谷P1070 道路游戏(线性DP)

    次元传送门:洛谷P1070 思路 一开始以为要用什么玄学优化 没想到O3就可以过了 我们只需要设f[i]为到时间i时的最多金币 需要倒着推回去 即当前值可以从某个点来 那么状态转移方程为: f[i]= ...

  7. .Net实现Word文档及导出

    参考网址: http://www.jb51.net/article/25062.htm(实用性) http://wenku.baidu.com/link?url=44O7Dua49DrZ-PF2QU7 ...

  8. css权威指南学习笔记--列表与生成内容

    列表属性 1.list-style-type:css2多于css2.1 2.list-style-image:有继承,子级列表会继承该图像 3.list-style-position:inside|o ...

  9. css选择器,样式表导入

    css笔记1.选择器(selecter)共9种 a.类型选择器 p{},body{} b.后代选择器 p h1{} c.ID选择 #idname{} d.类选择 .classname{} e.通用选择 ...

  10. block本质探寻四之copy

    说明: <1>阅读本文,最好阅读之前的block文章加以理解: <2>本文内容:三种block类型的copy情况(MRC).是否深拷贝.错误copy: 一.MRC模式下,三种b ...