判断是否有子栏目:有则输出javascript:;,无则输出一级栏目链接
在织梦DedeCMS中,经常需要根据栏目是否拥有子栏目来动态生成导航链接。当栏目存在子栏目时,通常希望点击父栏目展开子菜单,此时链接应设置为“javascript:;”;而当栏目没有子栏目时,则直接输出该一级栏目的正常链接。以下代码段实现了这一判断逻辑。
{dede:field name=typeid runphp=yes}
global $dsql;
$row = $dsql->GetOne("select * from `dede_arctype` where reid='@me' and ishidden<>1 order by sortrank asc limit 0,1");
if(is_array($row)) @me = 'javascript:;';
else @me = GetOneTypeUrlA($dsql->GetOne("select * from `dede_arctype` where id='@me' and ishidden<>1"));
{/dede:field}
完整导航菜单调用演示
以下是一个完整的导航菜单调用示例,结合了上述判断逻辑,并使用了channelartlist标签循环输出顶级栏目及其子栏目。当顶级栏目有子栏目时,父级链接为“javascript:;”,并显示下拉箭头;无子栏目时则直接输出一级栏目链接。
{dede:channelartlist row=7 typeid=top currentstyle=current}
<li>
<a href="{dede:field name=typeid runphp=yes}
global $dsql;
$row = $dsql->GetOne("select * from `dede_arctype` where reid='@me' and ishidden<>1 order by sortrank asc limit 0,1");
if(is_array($row)) @me = 'javascript:;';
else @me = GetOneTypeUrlA($dsql->GetOne("select * from `dede_arctype` where id='@me' and ishidden<>1"));
{/dede:field}">
<span>{dede:field.typename/}</span>
{dede:channel type='son' row=1 noself='yes'}<i class="touch-arrow-down"></i>{/dede:channel}
</a>
{dede:channel type='son' row=1 noself='yes'}
<ul>
{/dede:channel}
{dede:channel type='son' noself='yes'}
<li><a href="[field:typelink/]"><span>[field:typename/]</span></a></li>
{/dede:channel}
{dede:channel type='son' row=1 noself='yes'}
</ul>
{/dede:channel}
</li>
{/dede:channelartlist}
最终效果展示
以下为上述代码在前端呈现的实际效果截图,展示了有子栏目时父级链接为“javascript:;”,无子栏目时直接链接到一级栏目页面的导航结构。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
