热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Dedecms当前栏目高亮完美处理办法详解–无需修改程序

2019独角兽企业重金招聘Python工程师标准代码先行:templetsdefaulthead.htmPHP

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

代码先行:

/templets/default/head.htm

PHP

0

1

2

3

4

5

6

7

    

          

  • 主页
  •        {dede:channel type='top' row='10' currentstyle="

  • ~typename~
  • "}

          

  • [field:typename/]
  •        {/dede:channel}

        

上面的这段代码,如果熟悉Dedecms的童鞋应该知道,这其实是Dedecms 5.7里面默认模版导航部分的代码片段。仔细学习下官方的这一段代码就足以解决今天这篇文章的这个问题,这也是笔者苦经周折才恍然大悟的,下面我们还是从头说起:

 

用Dedecms做站的时,很多时候会在内页里嵌入边栏作为局部的快捷导航,如果是单纯的边栏,那用{dede:channel}可以很轻松的实现对栏目标题的调用。但是往往我们对边栏的样式要求会更多一些,比如这里,当前栏目的标题在边栏里和其它同级栏目标题显示的要不一样,表现在CSS上就是应用的class不同,看图:

 

这里就是,当前栏目下在css上面多了一个on的类别。这一多不要紧,破坏了原有代码的可循环性,这就使得原来简单的{dede:channel}调用代码无法满足这样的要求。于是笔者在这里首先想到的是加判断,如果是当前所在的栏目,则引用on类,否则不应用。对于判断笔者试过[field:typename]也试过[field:array],是没法简单的通过判断实现,而为了这么个效果要一大段代码的话,牺牲的效率就很划不来,所以笔者放弃用这些标签去进行判断。笔者在网上看到有人用下面这种方式进行判断:

0

1

2

3

4

5

6

7

      

        

  •   

        

  •       
  •   

        

  •   

        

  •   

        

  •   

        

  •   

  

 

 if(@me==”5″)部分是判断栏目的顶级ID,根据需要修改,A标签中的连接需手动添加,名称按需求添加。以上用的是图片,所以A标签中无内容。

抛开效率不谈,实现是可以实现的,但是笔者认为这种办法的弊端就如同上面引用的使用方法一样,那就是全手动。一来,笔者比较懒,不喜欢手动一个一个改,假使栏目成百上千个这么改还不要了笔者的小命;二来,笔者不喜欢一堆长而重复的代码解决一个小问题,总有点高射炮打蚊子的感觉;三来,对于做Dedecms的模版,笔者始终认为模版就是模版,模版做好后在日常使用中应最大可能避免再去修改模版中的代码;于是果断放弃了这种方法。一筹莫展之际,突然想到这么常用的一个东西,Dedecms官方团队怎么可能会不预制到代码里而需要我们这么大费周章呢,遂开始挖掘代码,这才挖出了本文开头引入的那段代码。发现果然有预制,根本不需要我们在做什么改动和开发,在{dede:channel}标签里还有一个”currentstyle“属性,其作用就是在循环输出的{dede:channel}中获得当前页面所属的”channel”,并为其应用上”currentstyle“属性里的内容。看代码说话:

currentstyle属性详解

PHP

{dede:channel type='self' currentstyle="
~typename~
"}
[field:typename/]
{/dede:channel}

0

1

2

3

4

5

6

7

8

9

    {dede:channel type='self' currentstyle="

~typename~
"}

    

        

            [field:typename/]

        

    

    {/dede:channel}

这个”currentstyle”网上搜到最多的解释就是  currentstyle = ”应用样式”   而没有具体用法的说明,笔者也是参考最开始的那段官方代码才试明白用法,其实很简单,童鞋们的疑点主要来源于两个方面,一个是”currentstyle”本身的用法,而另一个就是”currentstyle”里面所含有的”class=’thisclass'”具体怎么用。

“currentstyle”本身用法解析:

就如同”currentstyle“属性作用既然,既然是在循环输出的{dede:channel}中获得当前页面所属的”channel”,并为其应用上”currentstyle“属性里的内容。那就是说”currentstyle”里面要包含的是完整的代码,而这段代码只有在满足是当前页面所属栏目的时候才会输出,因此,对于其他不属于当前页面的栏目的输出,我们还要在准备一段代码,这段代码通常结构和”currentstyle”里面的是一致的,只有在应用的css样式上有区别,而区别这个css的就是所谓的”class=‘thisclass’”这个具体见我上面贴出来的代码可以更好理解。另外,在这里还能看到’~typename~’这样的用法,而这里如果用[field:typename/]会被当作字符直接输出,这种’~XXX~’是标记属性中的特殊用法,多用于”channel”标记里的”currentstyle”属性中。

“class=’thisclass'”用法解析:

对这个网上有文章存在误导,所以有的童鞋会比较蒙。官方的代码里有的地方确实写了”class=’thisclass'”,但这个’thisclass’并不是变量也没有特别的含义,’thisclass’只是一个普通的CSS类,是我们用来区分当前栏目标题高亮时,加高亮的那个类,只不过官方给这个类命名成了’thisclass’,而我们在使用的时候,这个类名可以随意命的,只要符合CSS标准就可以了。比如笔者这里用的是”class=’on'”,所以这里的类名写成你自己需要的就好,不必非要是’thisclass’这个。

最后附张图,使用”currentstyle”完全可以达到我们想要的要求,不需要自己动手修改程序。


转:https://my.oschina.net/colour10/blog/877109



推荐阅读
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • MySQL 5.7 学习指南:SQLyog 中的主键、列属性和数据类型
    本文介绍了 MySQL 5.7 中主键(Primary Key)和自增(Auto-Increment)的概念,以及如何在 SQLyog 中设置这些属性。同时,还探讨了数据类型的分类和选择,以及列属性的设置方法。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 为了确保数据库的高效运行,本文介绍了一种方法,通过编写定时任务脚本来自动清理 `order` 表中状态为 0 或为空的无效订单记录。该脚本使用 PHP 编写,并设置时区为中国标准时间,每 10 分钟执行一次,以保持数据库的整洁和性能优化。此外,还详细介绍了如何配置定时任务以及脚本的具体实现步骤。 ... [详细]
  • 织梦系统多条件联动筛选功能详细教程及删除操作指南
    多条件联动筛选功能广泛应用于图片展示、装修设计、机械设备和在线商城等场景,通常筛选条件应聚焦于用户最关心的要素,而非涵盖所有可能的选项。在DedeCMS中,多条件筛选的PHP开发并未内置删除已选条件的功能,但通过理解PHP筛选与JS筛选的不同机制,实现这一功能相对简单且易于操作。 ... [详细]
  • 本文介绍了一种使用 JavaScript 计算两个日期之间时间差的方法。该方法支持多种时间格式,并能返回秒、分钟、小时和天数等不同精度的时间差。 ... [详细]
  • Flutter 开发中集成极光推送的详细步骤
    本文详细介绍了如何在 Flutter 项目中集成极光推送服务,包括配置和测试的具体步骤。 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 利用REM实现移动端布局的高效适配技巧
    在移动设备上实现高效布局适配时,使用rem单位已成为一种流行且有效的技术。本文将分享过去一年中使用rem进行布局适配的经验和心得。rem作为一种相对单位,能够根据根元素的字体大小动态调整,从而确保不同屏幕尺寸下的布局一致性。通过合理设置根元素的字体大小,开发者可以轻松实现响应式设计,提高用户体验。此外,文章还将探讨一些常见的问题和解决方案,帮助开发者更好地掌握这一技术。 ... [详细]
  • Vim 编辑器功能强大,但其默认的配色方案往往不尽如人意,尤其是注释颜色为蓝色时,对眼睛极为不友好。为了提升编程体验,自定义配色方案显得尤为重要。通过合理调整颜色,不仅可以减轻视觉疲劳,还能显著提高编码效率和兴趣。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 深入理解 CSS 盒模型、box-sizing 属性及定位元素的水平和垂直居中技巧
    深入理解 CSS 盒模型、box-sizing 属性及定位元素的水平和垂直居中技巧 ... [详细]
author-avatar
留盏灯开扇门
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有