热点问题


织梦多个栏目arclist调用副栏目不显示的解决办法
文章来源:51威尼斯人81818官方网站-威尼斯人81818官方网站 点击数: 更新时间:2017/9/4 17:02:40
购买威尼斯人81818官方网站空间 | 购买威尼斯人81818官方网站【不限iis】 | 宽屏网站制作【还送手机网站】 |
香港云主机/99元/月 | 国内空间【免费备案】 | 特价网站空间 |
.Net专用空间 | 网站快速排名 | 游戏空间【支撑月付】 |
打开/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字段匹配逗威尼斯人81818官方网站(中国)有限公司, 就是说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不匹配逗威尼斯人81818官方网站(中国)有限公司,就是调用一个栏目 例如 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情况下不能调用副栏目问题产生的地方
}
国内、香港、美国、全免备案www.51mianbeian.com--51威尼斯人81818官方网站-威尼斯人81818官方网站,专业免备案空间提供商!
本文网址:/question_4/431.html
- 上一篇:如何设置一个安全的dedecms网站
- 下一篇:香港服务器租用的价格一般是多少合适