DedeCMS 输出 N 级导航菜单
自己在工作中用到的,就是自己按照 DedeCMS 的标签写法谢了一个 方便调用
毕竟DedeCMS
在 模板里面写 PHP
代码不太方便
此标签输出的标准的<ul><li>
多级导航菜单,只不过不含最外围的<ul>
标签 方便自定义
当前 样式 为 .cur
调用方法为<ul>{dede:asilu menuid=0 home='首页'/}</ul>
这就是输出 N 级导航菜单
当然你也可以指定 菜单样式
默认的<li>
样式为 <li~cur~><a href="~typelink~">~typename~</a></li>
如果你想为每个分类定义 图标的话也可以实现
调用标签自定义自己的<li>
样式{dede:asilu menuid=0 home='首页' li='<li~cur~><img src="/icon/~id~.png"/><a href="~typelink~">~typename~</a></li>'/}
然后再网站根目录 下 icon
文件夹 存放名字为 分类 ID png 格式分类图标即可
其中可用的替换参数 有
~cur~
当前样式 如果为当前 就输出 class="cur" 否则 为空
~id~
当前分类 ID
~reid~
当前分类的 父 ID
~topid~
顶级 ID
~typelink~
当前链接名称
~typename~
链接地址
复制下面代码保存至DedeCMS
安装目录/include/taglib/asilu.lib.php
下即可
附件代码内容
<?php if(!defined('DEDEINC')) exit('Request Error!'); /** * 简爱 的自用标签 删除多级导航菜单及 幻灯片获取 * * @version $Id: channelartlist.lib.php 1 9:29 2015年5月19日Z 简爱 $ * @package DedeCMS.Taglib * @copyright Copyright (c) 2015 - 2020, DesDev, Inc. * @license http://asilu.com * @link http://asilu.com */ function lib_asilu(&$ctag,&$refObj){ global $dsql, $cfg_templets_skin, $cfg_cmsurl, $cfg_cmspath; if(isset($ctag->CAttribute->Items[imgs])){ extract($ctag->CAttribute->Items); $images = getImages($imgs); if(empty($images) || !is_array($images)) return ''; $li = $li ? $li : '<li><img src="~img~"/></li>'; $l = ''; foreach($images as $img){ $l .= strtr($li, array('~img~' => $img));''; } return $l; } if(isset($ctag->CAttribute->Items[menuid])){ //处理标记属性、innertext // $attlist = 'menuid|0,row|20,cacheid|'; // FillAttsDefault($ctag->CAttribute->Items,$attlist); extract($ctag->CAttribute->Items, EXTR_SKIP); $innertext = trim($ctag->GetInnerText()); $artlist = ''; //读取固定的缓存块 $cacheid = trim($cacheid); if($cacheid !='') { $artlist = GetCacheBlock($cacheid); if($artlist!='') return $artlist; } $curid = ( !empty($refObj->TypeLink->TypeInfos['id']) ? $refObj->TypeLink->TypeInfos['id'] : 0 ); if($innertext=='') $innertext = GetSysTemplets('part_channelartlist.htm'); $totalnum = $row; if(empty($totalnum)) $totalnum = 20; $totalnum = 500; $tpsql = " ishidden<>1 "; $dsql->SetQuery("SELECT id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,reid,topid,sitepath FROM `#@__arctype` WHERE $tpsql ORDER BY sortrank ASC LIMIT $totalnum"); //获得类别ID总数的信息 $typeids = array(); $dsql->Execute(); while($row = $dsql->GetArray()) { $typeids[] = $row; } if($menuid==0 || $menuid=='top') { $menuid = array(0); } elseif(!preg_match('#,#', $menuid)) { $menuid = preg_split('/[\s]*,[\s]* /', $menuid, 0, PREG_SPLIT_NO_EMPTY); } else { $menuid = array($menuid); } $li = $li ? $li : '<li~cur~><a href="~typelink~">~typename~</a></li>'; if($home) $ul = strtr($li, array( "~cur~" => (0 == $curid ? ' class="cur"' : ''), "~id~" => 0, "~typelink~" => "/$cfg_cmspath/", "~typename~" => $home, )) ."\r\n"; else $ul = ''; foreach($menuid as $id){ $ul .= jaTree($typeids, $li, $id, $curid) ."\r\n"; } return $ul; } return ''; } // 获取指定文件夹 图片 function getImages($dir){ static $path; if(!$path) $path = realpath(dirname(__FILE__) ."/../../") . '/'; $dir = $path . trim($dir, "\\/"); if(!is_dir($dir)) return ''; $file = "$dir/ja_images.php"; if(file_exists($file)) return require_once $file; $images = glob("$dir/*.{jpg,jpeg,gif,png}", GLOB_BRACE); if(is_array($images)){ foreach ($images as &$v){ $v = basename($v); } sort($images); } $date = gmdate('Y/m/d H:i:s', time() + 3600 * 8); file_put_contents($file, "<?php\r\n# $date 动态生成 可删除\r\n\r\nreturn\r\n". var_export($images, true) .';'); return $images; } // 不含最外围的 <ul> 的 N 级菜单输出 function jaTree($list, $li_tpl = '<li~cur~><a href="~typelink~">~typename~</a></li>', $reid=0, $curid=0, $sp=' '){ // static $ul = ''; $li_tpl = str_replace('</li>', '', $li_tpl); $ul = ''; foreach($list as $v){ if($v['reid'] == $reid){ $cur = $v['id'] == $curid ? ' class="cur"' : ''; $ul .= $sp . strtr($li_tpl, array( // "~rel~" => $v['rel'], "~cur~" => $cur, "~id~" => $v['id'], "~reid~" => $v['reid'], "~topid~" => $v['topid'], "~typelink~" => GetOneTypeUrlA($v), "~typename~" => $v['typename'], )); $li = jaTree($list, $li_tpl, $v['id'], $curid, $sp . $sp . $sp); $ul .= !empty($li) ? "\r\n$sp$sp<ul>\r\n$li$sp$sp</ul>\r\n$sp" : ''; $ul .= "</li>\r\n"; } } return $ul; }
本文出自简爱博客,转载时请注明出处及相应链接。
评论
试试看 好不好用[可怜/]
的风格的风格风
fdgdfgdfgfdfggfg
的方法的鬼地方