下面我将从基础用法、高级用法和常见问题三个方面,详细讲解如何修改和使用 typeid。

基础用法:指定单一栏目
这是最简单的用法,直接在 list 标签中指定一个栏目ID。
在模板文件中直接修改
打开你需要修改的列表页模板文件(通常位于 /templets/你的模板目录/ 目录下,list_article.htm)。
找到 list 标签,它通常是这样的:
{dede:list pagesize='10'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
</li>
{/dede:list}
修改方法: 在 {dede:list} 标签中直接加上 typeid='栏目ID' 属性。

{dede:list typeid='1' pagesize='10'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
</li>
{/dede:list}
说明:
typeid='1':这里的1是你要调用栏目的ID,你需要登录DedeCMS后台,在【栏目管理】中找到你想要调用的栏目,查看其ID。pagesize='10':表示每页显示10条文章,这个属性保持不变。
效果: 修改后,这个列表页将只显示栏目ID为1的所有文章,不再遵循系统默认的根据当前栏目ID来调用的规则。
高级用法:调用多个栏目或子栏目
在实际应用中,我们经常需要一次性调用多个栏目或某个栏目的所有子栏目的文章,这时就需要用到一些特殊的 typeid 值。
调用多个指定栏目(用逗号隔开)
如果你想同时显示栏目ID为1、3、5的文章,可以将ID用英文逗号隔开。

{dede:list typeid='1,3,5' pagesize='15'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
</li>
{/dede:list}
效果: 列表页将同时显示栏目1、栏目3和栏目5下的文章。
调用指定栏目的所有子栏目(使用特殊值)
如果你想调用某个顶级栏目下的所有子栏目(包括所有层级的子栏目),而不是仅仅下一级子栏目,可以使用 typeid 的特殊值。
-
调用所有子栏目(包括孙栏目): 在
typeid后面加上@me,typeid='1@me'。{dede:list typeid='1@me' pagesize='20'} <li> <a href="[field:arcurl/]">[field:title/]</a> <span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span> </li> {/dede:list}说明: 假设栏目ID为1是一个顶级栏目,
typeid='1@me'会调用栏目1以及它所有下级栏目(ID为2、3、4...等)下的文章。 -
只调用下一级子栏目(不包含孙栏目): 这种情况比较特殊,
list标签本身不直接支持,通常需要先通过channel标签获取子栏目ID,然后再传给list标签,但这比较复杂,一个更简单的方法是使用arclist标签来实现。{dede:arclist typeid='1' channelid='1' addfields='typeid'} <li> <!-- [field:typename/] 可以显示文章所属的栏目名 --> <span>[field:typename/]</span> <a href="[field:arcurl/]">[field:title/]</a> <span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span> </li> {/dede:arclist}说明:
typeid='1':指定顶级栏目ID。channelid='1':指定要查询的模型ID(通常文章模型为1)。addfields='typeid':额外获取文章的typeid字段,以便用[field:typename/]显示栏目名。
常见问题与解决方案
问题1:为什么我修改了 typeid,页面没有变化?
可能的原因及解决方法:
-
开启了“仅动态列表”:在后台【系统】-> 系统基本参数 -> 核心设置 中,检查“列表命名规则”是否设置为
list_{tid}_{page}.html这样的静态规则,如果设置了静态规则,DedeCMS会生成静态页面,你修改模板后,需要删除后台已生成的静态HTML文件,然后重新生成列表页才能看到效果。- 解决方法:进入【生成】-> HTML更新 -> 选择指定目录,找到对应的栏目,点击“开始生成”,或者直接删除
/html/目录下对应的静态文件。
- 解决方法:进入【生成】-> HTML更新 -> 选择指定目录,找到对应的栏目,点击“开始生成”,或者直接删除
-
缓存问题:DedeCMS有模板缓存机制。
- 解决方法:在后台右上角点击【清空缓存】。
-
栏目ID错误:检查你填写的
typeid值是否正确,去后台【栏目管理】里仔细核对一下目标栏目的ID。 -
权限问题:确保你调用的栏目是公开的,并且你当前登录的管理员账号有权限查看该栏目内容。
问题2:我想在首页调用指定栏目的文章,应该怎么做?
首页通常没有关联的栏目ID,所以直接使用 {dede:list} 是无效的,这时应该使用 {dede:arclist} 标签,它可以在任何地方调用文章列表。
{dede:arclist typeid='1' titlelen='30' row='10'}
<li>
<a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
</li>
{/dede:arclist}
说明:
typeid='1':指定要调用的栏目ID,len='30'`:标题长度限制为30个字符。row='10':调用10条文章。
问题3:typeid 和 channel 有什么区别?
typeid(栏目ID):用于指定所属的栏目。{dede:list}和{dede:arclist}都有这个属性,用来过滤出特定栏目下的文章。channel(频道/模型ID):用于指定内容模型。channelid='1'通常表示调用“文章”模型,channelid='2'表示调用“图集”模型,它是在模型层面进行筛选。
两者可以结合使用,例如调用“文章”模型中“栏目ID为1”的内容。
| 需求 | typeid 写法 |
示例 |
|---|---|---|
| 调用单一栏目 | typeid='栏目ID' |
{dede:list typeid='5'} |
| 调用多个栏目 | typeid='ID1,ID2,ID3' |
{dede:list typeid='2,7,9'} |
| 调用顶级栏目及其所有子栏目 | typeid='顶级栏目ID@me' |
{dede:list typeid='3@me'} |
| 在首页调用指定栏目 | 使用 arclist
|
修改模板后,如果网站开启了静态生成,一定要重新生成对应的页面才能看到效果,希望这份详细的指南能帮助你解决 typeid 修改的问题!
