帝国论坛帝国网站管理系统交流区模板/标签/插件共享交流巧用帝国的标签实现真正的当前栏目高亮(绝对精华) 【本版专题贴子】  
 1/9     1 2 3 4 5 6 7 8 9 ›› ›|
主题:巧用帝国的标签实现真正的当前栏目高亮(绝对精华) [加入收藏夹]   

1ling
用户头衔:进士 *

精华贴   :2
发贴数   :621
经验值   :2659
注册时间:2005-12-31
信息 搜索 好友 发送悄悄话 精益求精-帝国网站管理系统7.5正式版开源发布】   [第 1 楼]
巧用帝国的标签实现真正的当前栏目高亮(绝对精华)
从帝国上看到有很多方法来实现当前栏目高亮显示,但都不是真正的高亮,效果就像帝国演示站点这样(http://demo.phome.net/),还有一种笨方法就是建不同的模板指定其"class"值,每个栏目新建一个模板页面配合css。但是这样,对于以后改动来说相当的麻烦,如果栏目多的话那将是非常恐怖的事情!

下面我研究的这种方式非常的简单,不需要建N多的模板,全自动根据当前栏目的ID来高亮显示,包括内容页也能自动判断!

在这里我就拿帝国5.0默认的模板来简单举例吧!(这里教给大家的是思路方法)

首先我们到 “管理标签模板 ”  修改ID为12的 “栏目tabs导航”  

把"列表内容模板" 的

<li id="tabnav_btn_[!--no--]" onmouseover="tabit(this)"><a href="[!--classurl--]">[!--classname--]</a></li>


改为

<li class="con[!--no--]"><a href="[!--classurl--]">[!--classname--]</a></li>


以上这是第一步

接下来到“管理封面模板 ”  >  "通用一级栏目模板 "
把模板里的   <body XXXXXXXXX>改为
<body id="channle[!--self.classid--]">


然后到CSS里加入(我这里是简单的定义了一下当前效果)

#channle2 .con1 {font-size:18px; background-color:#00FFFF}
#channle3 .con2 {font-size:18px; background-color:#00FFFF}

可以用  #channle3 .con2  红色的部分指定不同的栏目
..................................................................

至此所有的大栏目都可以当前自动识别显示高亮了。

如果想要实现内容页高亮只要修改相应的内容页代码,同样是把内容页模板里的
<body XXXXXXXXX>改为
<body id="channle<?php
global $empire;
$r=$empire->fetch1("select * from phome_enewsclass where classid='".$class_r[$GLOBALS[navclassid]][bclassid]."' ");
echo $r[classid];
?>">


刷新内容页看看吧,是不是也自动识别到了。!

综上这多么,我想大家应该知道这其中的原理了吧。 看下面的效果图!至于要实现什么效果就看大家去自己定义喽!


==========================增加一个wc提供的方法(适合三级目录)================================


<body XXXXXXXXX>改为
<body id="channle<?=user_GetTopBclassid($GLOBALS[navclassid])?>">


然后把   
//取得顶级栏目ID函数
function user_GetTopBclassid($classid){
        global $class_r;
        $fr=explode('|',$class_r[$classid][featherclass]);
        $topbclassid=$fr[1]?$fr[1]:$classid;//取得第一级栏目id
        return $topbclassid;
}

加入到  e/class/userfun.php   中就可以了


=======注:以上动态页面都不能获取ID==========

上传以下图片:


[该贴被修改 3 次,最后修改时间 2008-11-26 23:37:35 ]


帝国CMS站长之家 UI设计
2008-11-26 18:40:44 已设置保密 顶部 回复 引用 报告 编辑 删除

爱炫耀的医生
用户头衔:进士

精华贴   :0
发贴数   :953
经验值   :2358
注册时间:2008-02-22
信息 搜索 好友 发送悄悄话 免费开源-EBMA系统:更安全的MYSQL管理和备份系统】   [第 2 楼]


支持。



真正的官方推荐站点
2008-11-26 20:09:09 已设置保密 顶部 回复 引用 报告 编辑 删除

jinbat
用户头衔:进士

精华贴   :5
发贴数   :1119
经验值   :4224
注册时间:2006-01-03
信息 搜索 好友 发送悄悄话 精益求精-帝国网站管理系统7.5正式版开源发布】   [第 3 楼]

这个方法,不能在实现那些从属的栏目。
比如a栏目下有b栏目,那么b栏目的那些页面,能让a高亮吗?
我就改了代码来实现,懒得费心。




2008-11-26 20:18:51 已设置保密 顶部 回复 引用 报告 编辑 删除

wm_chief
用户头衔:管理员

精华贴   :21
发贴数   :48941
经验值   :114161
注册时间:2002-10-30
信息 搜索 好友 发送悄悄话 免费开源-EBMA系统:更安全的MYSQL管理和备份系统】   [第 4 楼]

原帖由 jinbat 于 2008-11-26 20:18:51 发表
这个方法,不能在实现那些从属的栏目。
比如a栏目下有b栏目,那么b栏目的那些页面,能让a高亮吗?
我就改了代码来实现,懒得费...

说得好,可以用下面代码取得本栏目的一级栏目id
<?php
//取得顶级栏目ID函数
function user_GetTopBclassid($classid){
        global $class_r;
        $fr=explode('|',$class_r[$classid][featherclass]);
        $topbclassid=$fr[1]?$fr[1]:$classid;//取得第一级栏目id
        return $topbclassid;
}
?>
<body id="channle<?=user_GetTopBclassid($GLOBALS[navclassid])?>">


<?=user_GetTopBclassid($GLOBALS[navclassid])?>
当为首页的时候当前栏目是为空即channle
当前为一级栏目时,则为channle当前栏目id
当有栏目为非一级栏目,则为channle一级父栏目id

封面模板、列表模板、内容模板下都有效

[该贴被修改 2 次,最后修改时间 2008-11-26 20:27:09 ]


[零基础入门教程] [模板制作教程] [采集使用教程]
2008-11-26 20:22:03 已设置保密 顶部 回复 引用 报告 编辑 删除

dont
用户头衔:进士

精华贴   :0
发贴数   :2140
经验值   :5059
注册时间:2008-02-26
信息 搜索 好友 发送悄悄话 精益求精-帝国网站管理系统7.5正式版开源发布】   [第 5 楼]





2008-11-26 20:29:59 已设置保密 顶部 回复 引用 报告 编辑 删除

bruce
用户头衔:秀才

精华贴   :0
发贴数   :201
经验值   :535
注册时间:2008-10-06
信息 搜索 好友 发送悄悄话 免费开源-EBMA系统:更安全的MYSQL管理和备份系统】   [第 6 楼]

不错,支持




2008-11-26 20:40:22 已设置保密 顶部 回复 引用 报告 编辑 删除

jinbat
用户头衔:进士

精华贴   :5
发贴数   :1119
经验值   :4224
注册时间:2006-01-03
信息 搜索 好友 发送悄悄话 精益求精-帝国网站管理系统7.5正式版开源发布】   [第 7 楼]

我修改了t_functions.php

//替换栏目导航标签
function ReplaceShowClassVars($no,$listtemp,$r,$num,$ecms=0,$subnews=0){
        global $public_r,$class_r,$navclassid;//多了$navclassid

在后$listtemp=str_replace("[!--no--]",$no,$listtemp);面加入替换的功能

        $listtemp=str_replace("[!--modid--]",$class_r[$r[classid]][modid],$listtemp); //相对4.6版本,这次用了缓存文件。2008-6-11
        //加入class="current"样式,2007-6-24
        if($r[classid]==$navclassid)
        {
                $listtemp=str_replace("[!--current--]",' class=\"current\"',$listtemp);
                $listtemp=str_replace("[!--active--]",'active',$listtemp);//或者有新的作用2008-10-11
        }//end.current
        else
        {

        if(stristr($class_r[$navclassid][featherclass],"|".$r[classid]."|"))
                {
                $listtemp=str_replace("[!--current--]",' class=\"belong\"',$listtemp);
                $listtemp=str_replace("[!--active--]",'active',$listtemp);
                }
        else
                {
                $listtemp=str_replace("[!--current--]",'',$listtemp);
                $listtemp=str_replace("[!--active--]",'',$listtemp);
                }       
        }//end.belong 测试成功2007-7-26


这样的话,如果class=cat-[!--active--],当前栏目,或者从属栏目可以输出class=cat-active。或者current,但稍微有点不同。。。




2008-11-26 20:42:16 已设置保密 顶部 回复 引用 报告 编辑 删除

fuziu
用户头衔:举人

精华贴   :0
发贴数   :619
经验值   :1687
注册时间:2007-05-31
信息 搜索 好友 发送悄悄话 免费开源-EBMA系统:更安全的MYSQL管理和备份系统】   [第 8 楼]





2008-11-26 20:43:13 已设置保密 顶部 回复 引用 报告 编辑 删除

雷欧力欧
用户头衔:举人

精华贴   :0
发贴数   :469
经验值   :1206
注册时间:2007-05-30
信息 搜索 好友 发送悄悄话 精益求精-帝国网站管理系统7.5正式版开源发布】   [第 9 楼]

原帖由 wm_chief 于 2008-11-26 20:22:03 发表

说得好,可以用下面代码取得本栏目的一级栏目id


<?=user_GetTopBclassid($GLOBALS[navclassid])?>
当为首页的时候...

支持




2008-11-26 20:48:41 已设置保密 顶部 回复 引用 报告 编辑 删除

tkf88
用户头衔:探花

精华贴   :0
发贴数   :8732
经验值   :22199
注册时间:2007-05-26
信息 搜索 好友 发送悄悄话 免费开源-EBMA系统:更安全的MYSQL管理和备份系统】   [第 10 楼]

此贴必火,强贴收藏




2008-11-26 20:54:53 已设置保密 顶部 回复 引用 报告 编辑 删除
 1/9     1 2 3 4 5 6 7 8 9 ›› ›|

快速回复
内容

表情
使用EBB代码 使用smile代码 显示签名 自动分析url 自动分析img
     【进入高级模式】   (按 Ctrl+Enter 直接提交)
    顶部  加入收藏夹
关于帝国 | 广告服务 | 联系我们 | 法律声明 | 隐私条款 | 许可协议
Powered by: EBB Version 2.2.1