织梦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. Spring源码分析(二十四)初始化非延迟加载单例

    摘要: 本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. 完成BeanFactory的初始化工作,其中包括ConversionS ...

  2. Notes 20180508 : Java基本程序设计结构之关键字与标识符

    我们成功书写了HelloWorld后,又深入了解了main函数,提到过main并非是关键字,可什么又是关键字呢?这其实就是这章要研究的内容,本节研究关键字与标识符,在标识符中我们也会讲解一下Java中 ...

  3. CO借贷标识及转换

    前台提前数据源0CO_PC_01的数据时发现借贷方有O.C.S.D.不是传统的FI借贷标识(S = 借记,H = 贷记). 由"D"指出贷方记帐.从以下项中发生这些记帐 财务会计中 ...

  4. rpm-yum_install_software

    rpm -ivh software_name安装软件 打印详情rpm -q software_name查询软件是否安装rpm -ql software_name查询安装目录rpm -e softwar ...

  5. Kafka使用jmxtrans+influxdb+grafana监控JMX指标

    最近在搞Kafka集群监控,之前也是看了网上的很多资料.之所以使用jmxtrans+influxdb+grafana是因为界面酷炫,可以定制化,缺点是不能操作Kafka集群,可能需要配合Kafka M ...

  6. hadoop--hive数据仓库

    一.hive概述 Hive是基于 Hadoop 的一个[数据仓库工具],可以将结构化的数据文件映射为一张数据库表,并提供简单的 sql 查询功能,可以将 sql 语句转换为 MapReduce 任务进 ...

  7. 【10.21总结】一个渗透测试练习实例——发现未知的漏洞(Race condition)

    Write-up地址:Exploiting an unknown vulnerability 作者:Abhishek Bundela 这篇文章跟我之前看到的文章不太一样,作者是按照一个练习的方式简单描 ...

  8. setInterval只执行一次的原因

    setInterval(arrow(),) 改为: setInterval(arrow,) 原因: arrow()这是一个函数调用,函数调用就会有返回值, 而arrow()没有返回值,所以这里的arr ...

  9. SpringCloud-容错处理Hystrix熔断器(五)

    前言:微服务架构应用的特点就是多服务,而服务层之间通过网络进行通信,从而支撑起整个应用系统,所以,各个微服务之间不可避免的存在耦合依赖关系.但任何的服务应用实例都不可能永远的健康或网络不可能永远的都相 ...

  10. C++STL学习笔记_(2)deque双端数组知识

    #include<iostream> using namespace std; #include "deque" #include "algorithm&qu ...