织梦DedeCMS二级菜单导航自定义调用方法

来自:互联网
时间:2018-09-01
阅读:

我们在用CMS建站、二次开发的时候,一般是根据HTML结构镶入具体的数据调用标签,相比而言,织梦DEDE的标签和PHpcms V9类似,基本上是通过{dede: ***}来实现,而在二级菜单、子菜单调用方面,DEDE明显没有Phpcms V9方便。在这里与大家分享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二级导航做起来比较麻烦,不能能灵活使用,而我们需要让它变得灵活起来,来满足我们的各种需求。

下面是灵活自定义调用二级导航的代码:

{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的方式做到一二级菜单自定义调用。

返回顶部
顶部