做个笔记,谨防丢失。
先放两张效果图,如果有二级栏目,则在下方加入导航块,没有二级栏目,则不需要添加此导航块。
导航块代码
<div style="float:none;margin-bottom:10px; /}">
<div class="name">{dede:field name='typeid' function="GetTopTypename(@me)" /}</div>
<ul class="s_nav">
{dede:channel type='son' currentstyle="<li class='now'><a href='~typelink~'>~typename~</a></li>"}
<li><a href="[field:typelink/]">[field:typename/]</a></li>
{/dede:channel}
</ul>
</div>
判断有无子级栏目的代码
{dede:field name=typeid runphp="yes"}
global $dsql;
$sql = "SELECT id From `#@__arctype` WHERE reid='@me' And ishidden<>1 order by sortrank asc limit 0, 100 ";
$row = $dsql->GetOne($sql);
@me=is_array($row)?'有下级':'没下级';
{/dede:field}
由于织梦只有channelartlist标签才能进行嵌套,所以上方方法行不通。
搜集资料+高人指点,终于摸索出一条行得通的方法。
根据有无二级栏目给最外层div加class去控制整个导航块的显示与否。
在include/common.func.php 文件添加如下方法。 注意:返回字符串都是class名称;
//判断返回样式 是否有子级栏目
function IsSubLevel($id){
global $dsql;
global $returnmsg;
$sql1 = "SELECT reid From `dede_arctype` WHERE id=$id";//判断点击是否为顶级栏目 0顶级栏目 其余非顶级
$row = $dsql->GetOne($sql1);
if ($row['reid']==0){
// 当前顶级栏目是否有子栏目
$sql = "SELECT id,typename From `dede_arctype` WHERE reid=$id And ishidden<>1 order by sortrank asc limit 0, 100 ";
$row = $dsql->GetOne($sql);
if ($row){
$returnmsg = 'scd_l';
return $returnmsg;
}else{
$returnmsg = 'thishide';
return $returnmsg;
}
}else{ //非顶级栏目
$returnmsg = 'scd_l';
return $returnmsg;
}
}
调用在div添加class即可,最下边是css样式。
<div style="float:none;margin-bottom:10px; /}" class="{dede:field name='typeid' function='IsSubLevel(@me)' /}">
<div class="name">{dede:field name='typeid' function="GetTopTypename(@me)" /}</div>
<ul class="s_nav">
{dede:channel type='son' currentstyle="<li class='now'><a href='~typelink~'>~typename~</a></li>"}
<li><a href="[field:typelink/]">[field:typename/]</a></li>
{/dede:channel}
</ul>
</div>
.thishide{display: none;}
.scd_l{ width:220px; float:left; border:1px solid #0072B8;}