织梦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. 节点和Topic通信

    1.简介 对于实时性. 周期性的消息, 使用topic来传输是最佳的选择. topic是一种点对点的单向通信方式, 这里的“点”指的是node, 也就是说node之间可以通过topic方式来传递信息. ...

  2. Spring3学习笔记--spring概述

    Spring 是什么? Spring 是一个开源的轻量级 Java SE( Java 标准版本)/Java EE( Java 企业版本)开发应用框架,其目的是用于简化企业级应用程序开发.在传统应用程序 ...

  3. (oralce)pga_aggregate_target与workarea_size_policy相互关系验证

    pga_aggregate_target与workarea_size_policy相互关系验证 先放上结论: 1. 当pga_aggregate_target设置为非0, 手工设置(workarea ...

  4. 0CO_PC_01 成本对象控制: 计划/实际数据

    用户提出要取生产订单的成本分析明细,分析目标和实际的差异. 查了一下,可以使用 BW标准数据源:0CO_PC_01 其中,值类型:10(实际).20(计划).30(目标) 货币类型:20(成本控制范围 ...

  5. Redis简介和常见的面试题

    redis介绍及特点 Redis是由意大利人Salvatore Sanfilippo开发的一款内存内存高速缓存数据库. Reids全称为:Remote Dictionary Server(远程数据服务 ...

  6. day 86 Vue学习之五DIY脚手架、webpack使用、vue-cli的使用、element-ui

      本节目录 一 vue获取原生DOM的方式 二 DIY脚手架 三 vue-cli脚手架的使用 四 webpack创建项目的玩法 五 element-ui的使用 六 xxx 七 xxx 八 xxx 一 ...

  7. 大数据入门:Maven项目的创建及相关配置

    目录 Maven项目的创建及相关配置 一.Maven的介绍 1.Maven是什么: 2.Maven作用: 3.Maven项目的目录结构: 4.Maven的三点坐标: 5.maven的pom文件: 6. ...

  8. 大数据入门第五天——离线计算之hadoop(下)hadoop-shell与HDFS的JavaAPI入门

    一.Hadoop Shell命令 既然有官方文档,那当然先找到官方文档的参考:http://hadoop.apache.org/docs/current/hadoop-project-dist/had ...

  9. 成都Uber优步司机奖励政策(4月22日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  10. python线程的使用模式

    为了解决阻塞(如I/O)问题,我们需要对程序进行并发设计. 本文将通过将线程和队列 结合在一起,轻松地在 Python 中完成线程编程,创建一些简单但有效的线程使用模式. 一.使用线程 先看一个线程不 ...