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
的方法的鬼地方