织梦dedecms商业教程 织梦多个栏目arclist调用副栏目不显示的解决办法

织梦dedecms商业教程 织梦多个栏目arclist调用副栏目不显示的解决办法

学习教程tuzi2018-11-02 20:00:24A+A-

织梦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'情况下不能调用副栏目问题产生的地方

            }


点击这里复制本文地址

声明

本站发布所有广告信息、下载资源,均来自互联网,非本站自制,与本站无关。 如有侵犯您的合法权益请来信告之。我们会在三个工作日内予以清除。


本站中所有资料、资源文件均来自于网络搜索,仅作为技术学习研究之用,请必须在24小时内删除所下载文件,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担。


本站保证站内提供的所有可下载资源(软件等等)都是按“原样”提供,本站未做过任何改动;但本网站不保证本站提供的下载资源的准确性、安全性和完整性;同时本网站也不承担用户因使用这些下载资源对自己和他人造成任何形式的损失或伤害。 


访问本站的用户必须明白,[资源爱好者]对提供下载的软件等不拥有任何权利,其版权归该下载资源的合法拥有者所有。


本站所有资源均不提供相关技术服务,如果源码下载地址失效则请联系站长进行补发。


本站所有资源展现图片仅供参考

资源爱好者 © 本站发布所有资源,均来自互联网,非本站自制,分享目的仅供大家学习与参考,与本站无关。
如有侵犯您的合法权益请来信告之。我们会在三个工作日内予以清除。邮箱:admin?aihao.org
关于我们|广告合作|网站地图|冀ICP备14009590号|冀公网安备 13018302000072号