织梦arclist调用副栏目不显示,网上关于这个问题的解决办法有很多,其中一种是:

打开/include/taglib/arclist.lib.php,代码约位于295-296行(我目前用的DedeCMS最新版 5.7 SP1),查找以下两行代码:
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).')) ';
else $orwheres[] = ' (arc.typeid IN ('.GetSonIds($typeid).','.$CrossID.') OR arc.typeid2 IN ('.GetSonIds($typeid).','.$CrossID.')) ';

这种办法可以解决typeid="2"的情况下, 如果typeid=“2,3,8”,有多个栏目需要调用副栏目就不行了

怎么解决这个问题,找到262行, $orwheres[] = " arc.typeid IN ($typeid) ";

直接替换为: $orwheres[] = " arc.typeid IN ($typeid) or arc.typeid2 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'情况下不能调用副栏目问题产生的地方
            }

原创文章,转载请注明出处:http://www.niurenzm.com/jiaocheng/201506031343.html

转载于:https://www.cnblogs.com/jizl/p/9119242.html

织梦多个栏目arclist调用副栏目不显示的解决办法相关推荐

  1. 织梦自动内链(文档关键词功能)无效解决办法

    替换一个文件即可,下载地址: 链接:https://pan.baidu.com/s/1nC6OPB6FAEZmlEhY1_3Axw 提取码:xfg2 下载本文档解压后,直接覆盖到include文件夹即 ...

  2. 织梦dedecms调用得到文章所属的副栏目id及副栏目名称网址链接等

    织梦在发表文章时,你会发现有一个副栏目的功能.比如一个文章,他可能即属于你的科技栏目,也属于互联网栏目,那你在发表这个文章时,主栏目可以选择科技,副栏目可以在互联网上打勾选定. 文章的副栏目保存在数据 ...

  3. 织梦php标签查询数据库,织梦DedeCMS模板标签sql调用代码大全

    织梦Dedecms确实是非常强大的系统,编程之家以前也分享了很多自己在使用织梦时遇到的一些问题及其解决办法.下面是要分享在Dede系统里面,如何使用sql语句来配合织梦标签进行更多的个性化调用.如织梦 ...

  4. 织梦php页面中调用标签,织梦dede:php标签中调用其他普通标签和页面相关变量及全局配...

    这篇文章主要为大家详细介绍了织梦dede:php标签中调用其他普通标签和页面相关变量及全局配,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,有需要的朋友可以收藏方便以后借鉴. 织梦dedecms{ ...

  5. 织梦实现软件下载排行调用 dedecms软件下载排行调用

    DedeCMS内容页添加"相关文章"功能 织梦实现软件下载排行调用 dedecms软件下载排行调用 少同学拿织梦跟别的下载程序比较,说织梦的下载功能太弱小,如果做一个软件站,连下载排行调用官方都不给出 ...

  6. 织梦免费网站模板手机端无法更新的原因及解决

    为什么80%的码农都做不了架构师?>>>    织梦免费网站模板手机端无法更新的原因及解决方法 织梦免费网站模板一直是大家认为最简单快捷,操作性强的网站建设必备平台,很多中小型企业都 ...

  7. 织梦Cms怎么一直服务器维护中,织梦后台搜索关键词维护中出现大量网址信息的处理办法...

    这篇文章主要为大家详细介绍了织梦后台搜索关键词维护中出现大量网址信息的处理办法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,有需要的朋友可以收藏方便以后借鉴. 昨天快下班的时候361模板技术员在 ...

  8. 织梦 plus/download.php,织梦DedeCMS 5.7SP1 /plus/download.php url重定向漏洞的解决方法

    最近使用scanv网站体检发现有DedeCMS 5.7SP1 /plus/download.php url重定向漏洞(如下图),对比官方网站最新下载包发现该漏洞未进行补丁,但官方自身网站已经补上了,而 ...

  9. Spring MVC普通类或工具类中调用service报空空指针的解决办法(调用service报java.lang.NullPointerException)...

    当我们在非Controller类中应用service的方法是会报空指针,如图: 这是因为Spring MVC普通类或工具类中调用service报空null的解决办法(调用service报java.la ...

最新文章

  1. Java内存溢出(OOM)异常完全指南
  2. 光流数据集FlyingChairs下载连接
  3. 来自一年的程序员的困惑
  4. AnkhSVN 1.0.2778 简体中文版发布
  5. linux中bin与sbin目录的作用及区别介绍
  6. ORA-00600:[kclchkinteg_2]及[kjmsm_epc]内部错误一例
  7. 开源 sql 代码提示工具_有关如何计划开源活动的提示
  8. Linux命令:find命令
  9. 正在连接至zimperium服务器,ZIMPERIUM Mobile IPS (zIPS)
  10. linux从哪里入侵电脑,linux入侵的基本命令网站安全 -电脑资料
  11. Java学习路线|【完整版】
  12. JAVA架构师学习路线图(绝对详细)
  13. Structure from Motion Using OpenCV
  14. 续费Enom域名的三种办法
  15. 【Windows 7错误报告弹出提示窗口怎么取消】
  16. 练习2-3 输出倒三角图案
  17. 微信小程序中时间戳和日期的相互转换
  18. 中国海上风电装备行业经济效益评价与投资战略规划展望报告2022-2028年版
  19. JST :Joint sentiment topic model ASUM :Aspect sentiment unification model
  20. 教你淘宝店铺如何做推广!

热门文章

  1. 【哈佛商评】关于数据分析,管理者的四个常规错误
  2. MySQl 8.0.13版本修改密码
  3. 一个高效的定时任务系统
  4. 干货 | 携程度假无线前端架构演进之路
  5. 如果你没有考上985,没有考上211……
  6. 基于 Spring Boot 和 Spring Cloud 实现微服务架构
  7. 从神经元到CNN、RNN、GAN…神经网络看本文绝对够了
  8. 超键、候选键、主键、外键、联合主键、复合主键
  9. 33.向vector里面添加数字,换行敲下输入结束
  10. 将文件名发送到服务器,将Paperclip路径文件名从服务器更新到s3(Updating Paperclip path file names from on server to s3)...