• 织梦多个栏目arclist调用副栏目不显示的解决办法


    织梦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

  • 相关阅读:
    cad 画图面板的尺寸大小定义
    CAD中如何将图形按一定的比例放大或缩小
    数组模拟栈和队列
    41. 缺失的第一个正数
    98. 验证二叉搜索树
    1220. 统计元音字母序列的数目
    网络编程--select模型(总结)
    网络编程--C/S模型(总结)
    C++内存管理(堆栈内存的区别、==和equal的区别)
    condition_variable-介绍和使用
  • 原文地址:https://www.cnblogs.com/jizl/p/9119242.html
Copyright © 2020-2023  润新知