我们在用CMS建站、二次开发的时候,一般是根据HTML结构镶入具体的数据调用标签,相比而言,织梦DEDE的标签和PHpcms V9类似,基本上是通过{dede: ***}来实现,而在二级菜单、子菜单调用方面,DEDE明显没有Phpcms V9方便。今天CMSYOU在这里与大家分享DedeCMS二级菜单导航自定义调用方法。
先来对比下PC v9跟Dede调用二级菜单的差别:
Phpcms v9调用一二级菜单代码:
{pc:content action="category" catid="0" num="25" siteid="$siteid" order="listorder ASC" return="nav"}<ul class="dropmenu"><li class="home"><a class="topmenu" href="{APP_PATH}"><span>首 页</span></a></li>{loop $nav $r}<li class="cat-{$r[catid]}"><a class="topmenu" href="{$r[url]}"><span>{$r[catname]}</span></a>{pc:content action="category" catid="$r[catid]" num="20" siteid="$siteid" order="listorder ASC" return="submenu"}{if $submenu}<ul class="submenus narnav">{loop $submenu $v}<li><a href="{$v[url]}"><span>{$v[catname]}</span></a></li>{/loop}</ul>{/if}{/pc}</li>{/loop}</ul>{/pc}{php echo runhook('glogal_menu')}
大家可以注意下标红色的代码,Phpcms v9可以判断是否子菜单,然后可以自定一级菜单的栏目id,一二级栏目分别调用的数据,具体调用的方式具体到栏目名称、栏目URL,可以说是真正自定义。
DedeCMS调用一二级菜单代码:
<div id="navMenu"><ul><li><a href='{dede:global.cfg_cmsurl/}/'><span>主页</span></a></li>{dede:channel type='top' row='10' currentstyle="<li class='hover'><a href='~typelink~' ~rel~><span>~typename~</span></a></li>"}<li><a href='[field:typeurl/]' [field:rel/]><span>[field:typename/]</span></a></li>{/dede:channel}</ul></div>
以上是官方演示默认模板调用一级菜单的代码,也有网友衍生出调用二级方法:
{dede:channelartlist typeid='top' cacheid='channelsonlist'}<ul id="dropmenu{dede:field.typeid/}" class="dropMenu">{dede:channel type='son' noself='yes'} <li><a href="[field:typelink/]">[field:typename/]</a></li>{/dede:channel}</ul>{/dede:channelartlist}
但是,总体来说DEDE二级导航做起来比较麻烦,不能能灵活使用,而我们需要让它变得灵活起来,来满足我们的各种需求。
下面CMSYOU在这里与大家分享灵活自定义调用二级导航的代码:
{dede:channelartlist row=10 typeid='top'}<li><a class="hide" href="{dede:field name='typeurl'/}" title="{dede:field name='typename'/}">{dede:field name='typename'/}</a>{dede:field name='id' runphp='yes'}global $dsql;$sql = "Select typedir,typename from dede_arctype where reid=".@me." order by sortrank limit 0,10";$dsql->SetQuery($sql);//将SQL查询语句格式化$dsql->Execute();//执行SQL操作$ns = $dsql->GetTotalRow();if($ns>0){//通过循环输出执行查询中的结果$xinfo='<ul>';while($row = $dsql->GetArray()){$xinfo.='<li><a href="'.str_replace('{cmspath}','',$row['typedir']).'">'.$row['typename'].'</a></li>';}$xinfo.='</ul>';@me=$xinfo;}else{@me='';}{/dede:field}</li>{/dede:channelartlist}
这样,采用查询数据库,自定义SQL的方式做到一二级菜单自定义调用。
最后,欢迎大家收听CMSYOU官方微博,看完CMSYOU思优团队的文章有疑问,那就在下面评论留言吧!
点击加载更多