typeid 和 channel
在织梦中,要调用某个栏目的信息,你必须知道它的 栏目ID(typeid),如果你不确定栏目ID,可以在后台的“栏目管理”中查看鼠标悬停时显示的链接,或者直接查看数据库的 dede_arctype 表。

在首页或列表页调用指定栏目的图片
这是最常见的需求,比如在首页某个位置显示“公司简介”栏目的图片。
使用 {dede:type} 标签(推荐,最灵活)
{dede:type} 是一个循环标签,即使你只调用一个栏目,也需要用 {/dede:type} 包裹。
代码示例:
{dede:type typeid='1'}
<a href="[field:typelink/]">
<img src="[field:typedir function='str_replace("{cmspath}","",@me)'/]/images/logo.jpg" alt="[field:typename function='htmlspecialchars(@me)'/]" />
</a>
{/dede:type}
代码解析:

{dede:type typeid='1'}:typeid='1':这是关键,你需要将'1'替换成你想要调用的那个栏目的 实际ID。
[field:typelink/]:- 调用该栏目的链接地址,通常我们会把它包裹在
<a>标签里,点击图片可以跳转到该栏目。
- 调用该栏目的链接地址,通常我们会把它包裹在
[field:typedir function='str_replace("{cmspath}","",@me)'/]:- 调用该栏目的目录路径。
str_replace("{cmspath}","",@me)是一个非常重要的处理函数,织梦默认的typedir值会包含{cmspath}这个变量(代表网站根目录),直接使用会导致图片路径错误,这个函数会把它替换掉,得到正确的相对路径。
images/logo.jpg:- 这是栏目图片的文件名,织梦默认将栏目图片存放在每个栏目的
/images/目录下,你需要将logo.jpg替换成你上传的图片文件名。
- 这是栏目图片的文件名,织梦默认将栏目图片存放在每个栏目的
[field:typename function='htmlspecialchars(@me)'/]:- 调用该栏目的名称,并用
htmlspecialchars函数处理,可以防止XSS攻击,作为<img>标签的alt属性值,对SEO友好。
- 调用该栏目的名称,并用
使用 {dede:channel} 标签(适用于调用单个或多个栏目)
{dede:channel} 通常用于导航栏,但也可以通过指定 typeid 来调用单个栏目。
代码示例(调用单个栏目):
{dede:channel typeid='1' type='self'}
<a href="[field:typelink/]">
<img src="[field:typedir function='str_replace("{cmspath}","",@me)'/]/images/[field:typedir function='str_replace("/", "", str_replace("/", "", @me))'/].jpg" alt="[field:typename function='htmlspecialchars(@me)'/]" />
</a>
{/dede:channel}
代码解析:
typeid='1':指定栏目ID。type='self':表示只调用当前栏目及其子栏目,如果只调用单个,这个属性可以省略,但加上更严谨。[field:typedir function='str_replace("/", "", str_replace("/", "", @me))'/]:这个函数比较复杂,它的作用是提取出typedir中的目录名作为图片名,如果typedir是/a/b/,它会提取出b作为图片名b.jpg。这种方法要求你的图片名必须和目录名一致,否则不推荐使用。
在调用单个栏目图片时,强烈推荐使用方法一的 {dede:type},因为它更直观、更灵活。
页(article_article.htm)调用当前栏目的图片
在文章页,你通常想显示该文章所属栏目的图片,这时,不需要指定 typeid,而是使用全局变量。
代码示例:
{dede:type}
<a href="[field:typelink/]">
<img src="{dede:field name='typedir' function='str_replace("{cmspath}","",@me)'/}/images/logo.jpg" alt="[field:typename function='htmlspecialchars(@me)'/]" />
</a>
{/dede:type}
代码解析:
- 这里
{dede:type}标签没有typeid属性,它会自动获取当前文章所属栏目的信息。 [field:typedir]和[field:typename]也会自动获取当前栏目的目录和名称。- 图片的路径同样需要处理,确保正确。
在子列表页调用当前栏目及其父栏目的图片
在子列表页(如 /a/b/list_2_1.html),你可能想显示当前栏目(b)的图片,也可能想显示它的父栏目(a)的图片。
调用当前栏目图片
与方法二完全相同,{dede:type} 会自动识别当前列表页所属的栏目。
{dede:type}
<img src="{dede:field name='typedir' function='str_replace("{cmspath}","",@me)'/}/images/logo.jpg" alt="[field:typename function='htmlspecialchars(@me)'/]" />
{/dede:type}
调用父栏目图片
需要使用 {dede:field} 标签的 parentid 和 typeid 属性组合。
代码示例:
{dede:field name='typeid' runphp='yes'}
$id = @me;
$sql = "SELECT * FROM `dede_arctype` WHERE id=$id";
$row = $dsql->GetOne($sql);
$topid = $row['topid'];
@me = $topid;
{/dede:field}
{dede:type typeid='[field:typeid/]'}
<a href="[field:typelink/]">
<img src="{dede:field name='typedir' function='str_replace("{cmspath}","",@me)'/}/images/logo.jpg" alt="[field:typename function='htmlspecialchars(@me)'/]" />
</a>
{/dede:type}
代码解析:
- 这是一个 PHP 代码块,写在模板里,用来获取父栏目的ID。
{dede:field name='typeid' runphp='yes'}: 获取当前栏目的ID,并开启PHP执行。$id = @me;: 将当前栏目ID赋值给变量$id。$sql = "SELECT * FROM ... WHERE id=$id";: 查询当前栏目的信息。$row = $dsql->GetOne($sql);: 执行查询并获取结果。$topid = $row['topid'];: 从结果中获取topid字段(顶级栏目ID,对于一级子栏目来说就是父栏目ID)。@me = $topid;: 将计算出的父栏目ID重新赋值给@me,这个值会传递给后面的标签。
{dede:type typeid='[field:typeid/]'}:- 这里
[field:typeid/]的值已经被上面的PHP代码块替换成了父栏目的ID。 - 这个标签现在的作用就是调用父栏目的信息。
- 这里
- 后面的图片调用逻辑就和前面一样了。
常见问题与注意事项 (FAQ)
Q1: 为什么我的图片路径是错的,显示不出来?
A: 这是最常见的问题,请务必检查你的图片路径。
- 路径错误: 确保你使用的路径是相对于网站根目录的,并且正确处理了
{cmspath}。 - 图片未上传: 确认你已经按照织梦的规范,在后台栏目的“基本设置” -> “栏目图片”中上传了图片,图片默认会存放在
/uploads/allimg/{栏目ID}/目录下,或者/你的栏目目录/images/目录下,请根据你的实际情况修改路径。 - 路径拼接错误: 检查 的使用,确保路径是完整的,
/uploads/allimg/1/20250801/123456.jpg。
Q2: 如何批量获取所有一级栏目的图片和链接?
这通常用于制作主导航,可以使用 代码示例: 如果想在每个一级栏目后面加上它的图片,可以修改为: 注意: 这种方法要求每个一级栏目目录下都有一个 希望这份详细的教程能帮助你顺利地在织梦CMS中调用栏目图片!如果还有其他问题,欢迎随时提问。{dede:channelartlist}
{dede:channelartlist typeid='top'}
<li>
<a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a>
<!-- 如果这个栏目有子栏目,可以继续调用 -->
{dede:channel type='son' noself='yes'}
<a href="[field:typelink/]">[field:typename/]</a>
{/dede:channel}
</li>
{/dede:channelartlist}
{dede:channelartlist typeid='top'}
<li>
<a href="{dede:field name='typeurl'/}">
<img src="{dede:field name='typedir' function='str_replace("{cmspath}","",@me)'/}/images/logo.jpg" alt="{dede:field name='typename' function='htmlspecialchars(@me)'/}" />
{dede:field name='typename'/}
</a>
</li>
{/dede:channelartlist}
images/logo.jpg 文件。
调用场景
推荐标签
关键点
首页/列表页调用指定栏目
{dede:type typeid='ID'}必须指定
typeid,图片路径需处理 {cmspath}。
页调用当前栏目
{dede:type}无需
typeid,自动识别当前文章所属栏目。
子列表页调用当前栏目
{dede:type}无需
typeid,自动识别当前列表页所属栏目。
子列表页调用父栏目
{dede:field} + PHP需要通过PHP代码获取父栏目ID,再传给
{dede:type}。
批量调用一级栏目
{dede:channelartlist}typeid='top' 表示调用顶级栏目。
