织梦调用多个栏目typeid="1,2,3"不支持的解决方法
织梦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'情况下不能调用副栏目问题产生的地方 }
织梦调用多个栏目typeid="1,2,3"不支持的解决方法的更多相关文章
- DEDECMS织梦后台更新网站栏目无反应一键更新无响应的解决方法
很多站长朋友反应,经常会遇到DEDECMS织梦后台更新网站栏目无反应和一键更新无响应的问题,这个问题的所在就是在于恢复了数据或者覆盖了织梦后台文件之后,点击一键更新完全没反应,或者生成栏目的时候其他都 ...
- dede织梦调用顶级二级栏目及下三级栏目方法(数据库实现)
上次有说道能调用织梦的二级栏目今天来说道说道调用三级,乃至无限极 ①:通过dede调用二级栏目大家都会调用,但要调用三级栏目,就有点麻烦了,如下样式的三级栏目dede如何调用呢?如下: ------- ...
- 织梦系统中出现DedeTag Engine Create File False提示原因及解决方法
今天更新网站时dedecms系统时,遇到一个问题:DedeTag Engine Create File False 出现这样的提示. 其实这也不算是什么错误,我个人觉得最重要的一点就是根目录下没有给 ...
- 织梦DEDECMS文章、栏目页获取当前页面顶级栏目名称的方法
在用织梦做一些项目时,时常会碰到需要在当前页面调用顶级栏目名称的时候,织梦默认{dede:field name='typename' /} 可以获取当前栏目页上一级栏目的名称,而不是当前栏目顶级栏目名 ...
- 织梦DedeCMS删除所有栏目或文章后,新建ID不从1开始的解决方法
这个修改方法很简单,从模板无忧那里找到的,只需要在后台系统-SQL命令行工具里面运行以下语句即可,不用采用笨方法重新安装织梦CMS了. 删除所有栏目,新建ID从1开始: ALTER TABLE `de ...
- 织梦channelartlist标签当前栏目高亮
channelartlist标签完美支持currentstyle属性,实现自动加载当前栏目CSS样式,可以用来标识当前栏目位置的CSS,解决方法如下: 打开文件include\taglib\chann ...
- 【我的Android进阶之旅】Android调用JNI出错 java.lang.UnsatisfiedLinkError: No implementation found for的解决方法
错误描述 今天使用第三方的so库时候,调用JNI方法时出现了错误.报错如下所示: 11-01 16:39:20.979 4669-4669/com.netease.xtc.cloudmusic E/a ...
- 织梦dedecms 用交叉栏目时arclist标签调用不出内容文章的问题(纯转载)
本文转自:http://www.cnblogs.com/cnteam/articles/4056702.html 最近用了交叉栏目发现当为手动指定交叉栏目ID时用arclist标签不能调出相关文章最后 ...
- dede织梦调取一二三级栏目名及栏目下的内容列表的方法
网站根据需要,把地区划成省-市-文章的层级结构,栏目首页需要显示的是 复制代码代码如下: {dede:channelarclist} <!--省显示--> <a href=" ...
随机推荐
- UVa 1252 - Twenty Questions(状压DP)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- 打包dll发布到nuget服务器
几个月前上传过一次nuget包,结果好久不用,今天想更新下,完全忘记了怎么用了,又是一顿查,所以决定记录下来,当然这可能不是一个傻瓜式的教程,但聪明的你们应该能够看明白的,因为整体操作还是很简单的 好 ...
- flex布局中flex-shrink的计算规则
下面代码来自MDN html部分: <p>the width of content is 500px, flex-basic of flex item is 120px.</p> ...
- 打开一个网站中的不同页面时,相同的js文件会被重复加载吗?
作者:JasonYang链接:https://www.zhihu.com/question/41184156/answer/135195798来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非 ...
- jdk8中tomcat修改配置PermSize为MetaspaceSize 标签: tomcatPermSizeMetaspaceSize
JDK8中用metaspace代替permsize,因此在许多我们设置permsize大小的地方同样需要修改配置为metaspace 将-XX:PermSize=200m;-XX:MaxPermSiz ...
- Windows与Linux之间的文件自动同步
问题:在工作中遇到一个场景,需要每天定时将Linux机器上的文件自动同步到Windows机器上. 解决方案有两个: 1.在Windows 机器上设置共享目录,然后在Linux机器上挂载共享 目录,每天 ...
- 用C++编写发布器和订阅器节点
1.转移到之前教程在catkin工作空间所创建的package路径下: $ roscd package_name/ 例子:$ roscd practice/2.在package路径下创建src目录: ...
- [iOS]拾遗补阙
一.AFNetworking POST纯字符串 修改位置AFURLRequestSerialization 修改前 NSString * AFQueryStringFromParameters(NSD ...
- pyhton 面向对象之 小明左右手换牌
'''#左右手交换牌 案列#小明手里有俩张牌,左手红桃♥K,右手黑桃♠A,小明交换俩手的牌后,手里分别是什么? 人类: 属性:小明,左手,右手 行为:展示手里的牌, 交换手里的牌手类: ...
- php基础知识考察点:自定义函数及内部函数考察点
1.变量的作用域和静态变量 函数的参数以及参数的引用传递 函数的返回值以及引用返回 外部文件的导入 系统内置函数的考察 变量的作用域也称为变量的范围,变量的范围即他定义上下文的背景(也是它生效的范围) ...