DedeCMS织梦

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

创客主机
  首先想到的是模版里不用sql,不用php,就用dede已有的dede标签通过不同的嵌套来达到目的。努力尝试了很多,有方法倒是可以解决,只是简单的方式影响效率:每个顶级栏目下的二级栏目要被重复遍历3次;如果用复杂的方式,虽说不用遍历这么多次,但遍历时取出的无用信息实在太多,心有不甘啊,无奈之下,只好求助于dede下万能标签{dede:php}和{dede:sql}。——如果想要{dede:php}在模版里起作用,需要在dede后台进行设置,进入到dede后台,在 dede后台——系统——系统基本参数——其他选项 里面,第二个参数默认模版引擎禁用标签里有php,在这里将php去掉然后点击下面的确定即可让{dede:php}标签生效。 经过笔者多次测试及代码优化,最后可以判断 是否含有二级栏目的调用方法如下: {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}

代码释义:

  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安装目录 这个里面的就是解析出来的路径。
(1)

本文由 创客云 作者:创客云 发表,转载请注明来源!

阿里云

热评文章

发表评论

嘿,欢迎咨询!