• 全国400电话网上服务平台
    强大号码库资源任选,方便,快捷,快速开通。
    咨询热线:400-1100-266  

    织梦多个栏目arclist调用副栏目不显示的解决办法
    POST TIME:2017-11-13 00:18
    织梦arclist调用副栏目不显示的解决办法:

    打开/include/taglib/arclist.lib.php,代码约位于295-296行,查找以下两行代码:

    if($CrossID=='') $orwheres[] = ' arc.typeid IN ('.GetSonIds($typeid).')'; 
    else $orwheres[] = ' arc.typeid IN ('.GetSonIds($typeid).','.$CrossID.')';

      将其替换成以下代码:

    
    
    1. $vicewheres = "";
    2. $typeids = explode(",",GetSonIds($typeid));
    3. $crossids = explode(",",$CrossID);
    4. $typeidss = array_merge($typeids,$crossids);
    5. $typeidss = array_unique($typeidss);
    6. foreach($typeidss as $tid){
    7. $liketypeid2 = ",".$tid.",";
    8. $vicewheres.= " or CONCAT(',',arc.typeid2,',') like '%$liketypeid2%' ";
    9. }
    10. if($CrossID==''){
    11. if($vicewheres!="")
    12. $orwheres[] = ' (arc.typeid in ('.GetSonIds($typeid).') '.$vicewheres.') ';
    13. else
    14. $orwheres[] = ' arc.typeid in ('.GetSonIds($typeid).') ';
    15. }else{
    16. if($vicewheres!="")
    17. $orwheres[] = ' (arc.typeid in ('.GetSonIds($typeid).','.$CrossID.') '.$vicewheres.') ';
    18. else
    19. $orwheres[] = ' arc.typeid in ('.GetSonIds($typeid).','.$CrossID.') ';
    20. }
    这种办法可以解决typeid="2"的情况下不显示副栏目的问题, 如果typeid=“2,3,8”,有多个栏目需要调用副栏目就不行了怎么解决这个问题,找到262行,$orwheres[] = " arc.typeid IN ($typeid) "; 直接替换为:
    1. $vicewheres = "";
    2. foreach($typeid as $tid){
    3. $liketypeid2 = ",".$tid.",";
    4. $vicewheres.= " or CONCAT(',',arc.typeid2,',') like '%$liketypeid2%' ";
    5. }
    6. if($vicewheres!="")
    7. $orwheres[] = " (arc.typeid in ($typeid) $vicewheres) ";
    8. else
    9. $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'情况下不能调用副栏目问题产生的地方
    }
    
    关于我们 | 付款方式 | 建站知识 | 增值服务 | 网站模板
    Copyright © 2003-2016
    时间:9:00-21:00 (节假日不休)
    版权所有:巨人网络(扬州)科技有限公司
    总部地址:江苏省信息产业基地11号楼四层
    《增值电信业务经营许可证》 苏B2-20120278
    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信

    微信号已复制,请打开微信添加咨询详情!