【dedecms多个栏目文章】dedecms多个栏目arclist调用副栏目不显示

更新时间:2019-11-11    来源:dedecms教程    手机版     字体:

【www.bbyears.com--dedecms教程】


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

打开/include/taglib/arclist.lib.php,代码约位于295-296行,查找以下两行代码:
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.bbyears.com/wangyezhizuo/78561.html

热门标签

更多>>

本类排行