使用DedeCMS内置的 typeid 变量(推荐,最灵活)
这是最常用且最灵活的方法,它通过获取当前栏目的ID(typeid),然后判断这个ID属于哪个栏目,再调用对应的Logo图片。

(图片来源网络,侵删)
实现步骤:
第一步:为每个栏目上传专属Logo
- 登录您的DedeCMS后台。
- 进入【核心】 -> 【频道管理】。
- 找到您想要设置Logo的栏目,点击后面的【修改】。
- 在栏目编辑页面,找到 “栏目属性” 或类似的设置区域。
- 重要提示:默认情况下,这里可能没有Logo上传选项,您需要修改数据库或手动为每个栏目添加一个Logo图片地址。
- 简单做法:直接在“栏目名称”旁边或其他备注字段里,手动填写该栏目Logo图片的URL地址(
/images/logo1.png),或者,您可以为每个栏目创建一个“自定义字段”,字段名设为channellogo,类型为“多媒体”,这样就可以在后台方便地上传和管理Logo了。 - 假设:我们这里采用最简单的方式,将Logo URL直接存放在“栏目名称”的“备注”字段里,或者我们假设每个栏目都有一个固定的命名规则,
/images/logo_{typeid}.png,为了通用性,我们假设您已经为每个栏目添加了一个名为channellogo的自定义字段,并上传了Logo。
- 简单做法:直接在“栏目名称”旁边或其他备注字段里,手动填写该栏目Logo图片的URL地址(
第二步:修改模板文件
找到您需要显示栏目Logo的模板文件,通常这个位置在:
- 首页:
/templets/default/index.htm - 列表页:
/templets/default/list_栏目ID.htm或/templets/default/list_default.htm - 文章页:
/templets/default/article_栏目ID.htm或/templets/default/article_default.htm
- 打开模板文件,用编辑器(如Dreamweaver, VS Code等)打开。
- 找到Logo显示位置,通常是
<head>标签内或网站顶部的<div class="logo">中。 - 替换或添加判断代码。
代码示例:

(图片来源网络,侵删)
这里我们以在网站顶部显示一个根据栏目变化的Logo为例。
情况A:如果Logo是作为网站主Logo(通常在首页显示,栏目页显示栏目Logo)
这种情况需要判断是否为首页。
<div class="logo">
{dede:global name='cfg_webname'/}
</div>
修改为:

(图片来源网络,侵删)
<div class="logo">
{dede:if get='typeid == "" || typeid == "0"'}
<!-- 如果是首页 (typeid为空或0),显示网站主Logo -->
<a href="{dede:global name='cfg_cmsurl'/}/"><img src="{dede:global name='cfg_logo'/}" alt="{dede:global name='cfg_webname'/}" /></a>
{else}
<!-- 如果是栏目页,显示该栏目的专属Logo -->
<!--
这里的调用方式取决于您如何存储了Logo路径。
方法1:如果您使用了自定义字段 channellogo
<a href="{dede:global name='cfg_cmsurl'/}/"><img src="{dede:field.channellogo/}" alt="{dede:field.title/}" /></a>
方法2:如果您将Logo路径存在了备注里
<a href="{dede:global name='cfg_cmsurl'/}/"><img src="{dede:field.info/}" alt="{dede:field.title/}" /></a>
方法3:如果您有固定的命名规则,/images/logo_栏目ID.png
<a href="{dede:global name='cfg_cmsurl'/}/"><img src="/images/logo_{dede:field.id/}.png" alt="{dede:field.title/}" /></a>
-->
<!-- 我们以最常用的自定义字段为例 -->
<a href="{dede:field name='typeurl'/}"><img src="{dede:field.channellogo/}" alt="{dede:field.title/}" /></a>
{/dede:if}
</div>
代码解释:
{dede:if get='typeid == "" || typeid == "0"'}:这是一个条件判断。get='typeid'获取当前栏目的ID,当ID为空或0时,表示是首页。{dede:global name='cfg_logo'/}:这是DedeCMS默认的全局变量,指向网站后台设置的Logo。{dede:field.channellogo/}:这是调用当前栏目的channellogo自定义字段的值。请确保您已经为栏目添加了这个字段并上传了图片。{dede:field.name='typeurl'/}:获取当前栏目的链接地址。
在后台为每个栏目指定Logo变量(稍复杂,但逻辑清晰)
这种方法不依赖自定义字段,而是通过在后台为每个栏目指定一个模板变量,然后在模板中调用。
实现步骤:
第一步:在后台栏目中设置Logo
- 进入【核心】 -> 【频道管理】,选择一个栏目,点击【修改】。
- 在栏目编辑页面,找到 “栏目自定义属性” 或 “附加选项”。
- 在里面找到 “列表模板(list_template)” 或类似的字段。我们不修改这个,而是把它当作一个“万能”的存储字段。
- 在这个字段里,输入您为该栏目准备的Logo图片URL,
/images/logo_about.png。 - 保存,对其他所有需要不同Logo的栏目重复此操作。
第二步:修改模板文件
同样,打开您的模板文件(如 index.htm)。
代码示例:
<div class="logo">
{dede:if get='typeid == "" || typeid == "0"'}
<!-- 首页显示默认Logo -->
<a href="{dede:global name='cfg_cmsurl'/}/"><img src="{dede:global name='cfg_logo'/}" alt="{dede:global name='cfg_webname'/}" /></a>
{else}
<!-- 栏目页显示在栏目后台设置的Logo -->
<!--
调用当前栏目的“列表模板”字段里的内容作为Logo地址。
这种方法有点“投机取巧”,但有效,且不需要修改数据库结构。
-->
<a href="{dede:field name='typeurl'/}"><img src="{dede:field.list_template/}" alt="{dede:field.title/}" /></a>
{/dede:if}
</div>
代码解释:
{dede:field.list_template/}:这里我们巧妙地利用了list_template字段来存储Logo的URL,因为这个字段在栏目页一定会被调用,所以用它来存一个图片地址是完全可行的。- 优点:不需要创建新的自定义字段,对数据库无侵入。
- 缺点:不够直观,编辑栏目的同事可能会困惑为什么“列表模板”里存了个图片地址。
总结与建议
| 特性 | 方法一 (自定义字段) | 方法二 (利用现有字段) |
|---|---|---|
| 灵活性 | 极高,可以为任何字段创建Logo存储位置。 | 一般,受限于现有字段。 |
| 规范性 | 高,逻辑清晰,channellogo 就是存Logo的。 |
低,不够直观,容易引起混淆。 |
| 实施难度 | 稍高,需要先添加自定义字段。 | 简单,直接在后台修改即可。 |
| 推荐度 | ⭐⭐⭐⭐⭐ (强烈推荐) | ⭐⭐⭐ |
最终建议:
为了网站的长期维护和可读性,强烈推荐您使用 方法一,虽然前期需要花几分钟时间为栏目添加一个自定义字段,但这会让您的模板逻辑非常清晰,任何接手的开发人员都能一眼看懂。
如果您只是临时需要一个快速解决方案,或者不想修改数据库结构,方法二 也是一个不错的选择。
希望这个详细的教程能帮助您成功实现栏目Logo的显示!如果在操作中遇到任何问题,可以随时追问。
