dedecms多个栏目arclist调用副栏目不显示

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

时间: 2024-10-06 21:58:03

dedecms多个栏目arclist调用副栏目不显示的相关文章

Dedecms标签artlist调用副栏目二次开发

解决在列表页调用副栏目,但列表页文章不显示方法: 打开 /include/taglib/arclist.lib.php,原代码如下: if($CrossID=='') $orwheres[] = ' arc.typeid IN ('.GetSonIds($typeid).')'; else $orwheres[] = ' arc.typeid IN ('.GetSonIds($typeid).','.$CrossID.')'; 将其替换成如下代码: if($CrossID=='') $orwhe

dedecms调用副栏目文章怎么操作

最近ytkah的网站进行改版,添加了一些新栏目,做更精准的着陆页,有些文章比较简短并且很早以前就发布过了,如果再添加这样的文档就有点重复了,于是就想着用文章副栏目的属性,可却调不出来,怎么办?查找官方文档和教程,发现需要修改一下代码.打开/include/taglib/arclist.lib.php,代码约位于295-296行,找到如下代码: if($CrossID=='') $orwheres[] = ' arc.typeid IN ('.GetSonIds($typeid).')'; els

dede标签栏目链接调用

问题描述 dede标签栏目链接调用 请问 栏目链接 怎么调用 {dede:field name=typeid runphp="yes"} global $dsql; $sql = "SELECT * From #@__arctype WHERE reid='@me' And ishidden<>1 order by sortrank asc limit 0, 100 "; $row = $dsql->GetOne($sql); @me=is_arr

DEDECMS首页循环调用一级栏目和二级栏目的实现方法

中介交易 SEO诊断 淘宝客 云主机 技术大厅 DEDECMS作为国内一款非常流行的CMS网站系统,被广大站长所喜爱,很多人都使用DEDE建站.在用dede建站的时候,有些功能,需要根据自己的喜好进行更改或调用.而在dede的官方说明文档中,像如何循环调用一级栏目和二级栏目这个功能就没有具体说明. 今天影子就给大家分享一下,各位站长朋友所需要的,在dede网站首页实现循环调用一级栏目和二级栏目,以达到网站导航优化的目的. 下面开讲: 在首页循环调用一级栏目和二级栏目,如何实现? 在很多模板中,我

dedecms如何调用当前栏目的子栏目及子栏目文章

前面ytkah谈到了 dedecms调用当前栏目的子栏目怎么操作,有的朋友会问如果再增加一个调用子栏目文章的需求,即调用当前栏目的子栏目及子栏目文章,这个有办法实现吗?这时就要涉及到另外两个标签的调用了,dede:channelartlist标签和dede:arclist标签 <div> {dede:channelartlist} <dl> <dt><strong><a href="{dede:field name='typeurl'/}&q

dedecms如何实现在不同的栏目下调用不同的文章

问题描述 dedecms如何实现在不同的栏目下调用不同的文章 我使用dedecms给一个医院做了一个网站,该网站里面有几十个病种栏目,和对应的康复案例栏目,我想实现在使用同一个频道页面模板的情况下,如果在不同的病种栏目下调用相对应的康复案例的文章啊,比如有一个病种是 脑瘫我想在这个栏目的频道页面或者列表页.文章页里面调用关于脑瘫的康复案例的页面,请问如何实现!网上找了一些方法,都是根据id的,感觉不太现实,所以问问大侠们有没有什么好的方法,谢谢 解决方案 http://www.jb51.net/

dedecms增强副栏目功能程序代码

列表页面修改: 在list_article.htm页面添加标签 [field:typeid2llink/] 用来获取副栏目连接. 修改include/arc.listview.class.php文件,在875行下面添加:  代码如下 复制代码 $ks = split(',', $row['typeid2']);   $type2name="";   foreach($ks as $k){   $k = trim($k);   if ($k!="") {   if (

dedecms二级栏目和栏目名称调用用法集合

(1)自动调用大栏目下的二级栏目代码.放到相应模板,会在该栏目的列表页和文章页自动调用处该大栏目下的二级栏目名称  代码如下 复制代码 {DEDE:channel type='son' } <li><a href="[field:typeurl/]"><span>[field:typename/]</span></a></li> {/dede:channel} (2) 如果要调用特定某一个大分类下面的二级,需要设置

dedecms调用当前栏目的子栏目怎么操作

有时我们建网站会建很多分类,每个分类又有小分类,为了让顶级栏目获得更好的权重和排名,我们会聚合子栏目.那么dedecms调用当前栏目的子栏目怎么操作呢? 有两种方法:标签dede:sonchannel和标签channel type='son' 1.dede:sonchannel {dede:sonchannel} <a href='[field:typeurl/]'>[field:typename/]</a> {/dede:sonchannel} 2.channel type='s