百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>织梦CMS教程> DEDECMS(织梦)二级栏目调用及判断输出
分享文章到:

DEDECMS(织梦)二级栏目调用及判断输出

发布时间:02/08 来源:未知 浏览: 关键词:
情景介绍:

DEDECMS(织梦)(下文简称dede)没有单独的标签可以直接调用出顶级和二级栏目名。这样在做站点导航的时候,没有二级栏目确实很不爽。虽然可以通过标签的套用来达到目的,这个现在已经不是什么难题了,简单的调用使用如下的几行代码即可达到目的:

PHP 012345 {dede:channelartlist typeid='top'} a href="{dede:field name='typeurl'/}" {dede:field name='typename'/} /a {dede:channel type='son' noself='yes'} div a href="[field:typelink/]" [field:typename/] /a /div {/dede:channel}{/dede:channelartlist}

但是如果想要在导航里给二级栏目加上效果美化呢?有的时候就会比较棘手,比如说如下的情况:

二级目录加特效

二级目录加特效

这里给ul标签加上了一些效果,如果还是按照简单的调用方式,那代码应该写成这样:

PHP 012345678 {dede:channelartlist typeid='top'} li a href="{dede:field name='typeurl'/}" {dede:field name='typename'/} /a ul {dede:channel type='son' noself='yes'} li a href="[field:typelink/]" [field:typename/] /a /li {/dede:channel} /ul /li {/dede:channelartlist} 上段代码效果如图

上段代码效果如图

虽然 js的效果依然在,而且二级栏目也调用出来了,但是仔细观察代码可以发现,没有二级栏目的就会多出一个 ul style:”display:none;” /ul ,并且实际显示的时候也有多余的 span /span 。仔细观察代码就能发现,产生这个问题的原因在于最外层的{dede:channelartlist}标签循环。这样不仅影响美观,无形中也增加代码的冗余,这肯定是我们不想见到的。 所以笔者想到两种可行的办法,第一种,是在js和css上面下文章,这样的好处就如前文所说,对效率影响不大,有可能会牺牲效果;但是今我们不讨论这种方法了,走种极端路线,就是要这样的效果,不改动js以及css的情况下,只好用第二种方法,就是在模版文件里面加上判断,对每个要在导航栏里面调用出来的顶级栏目都进行判断,判断是否有二级栏目。这样做,多少都会影响一点效率,毕竟增加了对数据库的操作,不过想必一般的网站导航里的顶级栏目和二级栏目不会很多,小数量的查找,效率的影响基本可以忽略不计了,并且如果全站都使用静态的话,那影响就会更小。 在dede的模版里加入判断是否含有二级栏目,笔者在百度和Google上寻找了许久,竟然没有找到,好吧,那就只有自己动手来做,因此才有了下面的解决方案。

进入正题:

首先想到的是模版里不用sql,不用php,就用dede已有的dede标签通过不同的嵌套来达到目的。努力尝试了很多,有方法倒是可以解决,只是简单的方式影响效率:每个顶级栏目下的二级栏目要被重复遍历3次;如果用复杂的方式,虽说不用遍历这么多次,但遍历时取出的无用信息实在太多,心有不甘啊,无奈之下,只好求助于dede下万能标签{dede:php}和{dede:sql}。——如果想要{dede:php}在模版里起作用,需要在dede后台进行设置,设置方式见下图:

dede后台——系统——系统基本参数——其他选项

dede后台——系统——系统基本参数——其他选项

进入到dede后台,在 dede后台——系统——系统基本参数——其他选项 里面,第二个参数默认模版引擎禁用标签里有php,在这里将php去掉然后点击下面的确定即可让{dede:php}标签生效。 经过笔者多次测试及代码优化,最后可以判断 是否含有二级栏目的调用方法如下:

PHP 01234567891011121314151617 {dede:channelartlist typeid='top'}  li a href="{dede:field name='typeurl'/}" {dede:field name='typename'/} /a  {dede:php} $id = $refObj- Fields['id']; $sql = ("SELECT * FROM dede_arctype where reid ='$id'"); $db- SetQuery($sql); $db- Execute(); if($db- GetTotalRow()){ echo ' ul '; while($row = $db- GetArray()){ $url = str_replace('{cmspath}','',($row[typedir])); echo " li a href=".$url." ".($row[typename])." /a /li "; }; echo ' /ul '; }; {/dede:php}  /li {/dede:channelartlist}

代码实现效果如图:

dede判断是否含有二级目录效果

dede判断是否含有二级目录效果

部分代码释义:

1、$id = $refObj- Fields[‘id’]; 此段代码取得的id是由上层{dede:channelartlist typeid=’top’}标签循环出来的当前顶级栏目id,只有将当前的id放入下面的sql语句中,才能配合循环判断相应的顶级栏目下是否含有二级栏目,如果将id固定,将无法完成循环判定;

2、$db- GetTotalRow();此语句取得的是执行完sql查询后得到的查询总记录条数,在这里用来做判定是否含有二级栏目的条件;

3、$url = str_replace(‘{cmspath}’,”,($row[typedir]));从数据库里查出来的二级栏目地址带有{cmspath},直接从数据库取出后{cmspath}在模版里将无法被解析,所以如果在此处不加处理,连接将会发生错误。这里这个语句要根据自己站点的实际情况进行配置,如果在后台添加二级栏目的时候,路径没有使用系统默认的,那这里就不需要处理了。说明下这个{cmspath},这个其实就是dede的安装路径,这个在dede后台——系统——系统基本参数——核心设置里第一个参数DedeCMS安装目录 这个里面的就是解析出来的路径。

dede后台——系统——系统基本参数——核心设置

dede后台——系统——系统基本参数——核心设置

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有163人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板