“栏目”是内容的“容器”或“分类”,而“内容”是存放在这些容器里的具体文章、图片、软件等数据。

下面我们从几个方面来详细拆解这个概念。
栏目与内容的核心关系
-
层级关系:树状结构 DedeCMS 的栏目是典型的树状(或称目录状)结构,非常直观。
- 顶级栏目: 网站的一级分类,首页”、“公司简介”、“新闻中心”、“产品展示”。
- 子栏目: 依附于顶级栏目或其他子栏目下的分类。“新闻中心”下可以有“公司新闻”、“行业动态”、“技术支持”等子栏目。
- 内容模型: 每个栏目(顶级或子栏目)都可以选择一个“内容模型”,模型定义了该栏目下内容的字段。“新闻中心”可能使用“文章模型”(包含标题、作者、内容、发布时间等),而“产品展示”可能使用“产品模型”(包含产品名称、规格、价格、图片等)。
-
一对多关系:一个栏目包含多篇内容 一个栏目(父栏目)可以包含无数篇内容(文章),一个内容(文章)只属于一个最终栏目,即使这个内容被多个栏目调用(通过“栏目交叉”功能),它在数据库中存储时也只记录一个最终的
typeid(栏目ID)。 -
动态与静态关系:内容如何呈现
(图片来源网络,侵删)- 栏目列表页 (
list_XXX.html): 显示某个栏目下的所有内容摘要(标题、图片、简介等)。list_1.html可能是“新闻中心”的列表页。 - 内容详情页 (
article_XXX.html): 显示单篇内容的完整信息。article_10.html是 ID 为 10 的那篇文章的详情页。 - 栏目主页 (
index_XXX.html): 如果一个栏目没有子栏目,并且设置了“使用栏目页”,那么它的列表页和主页是同一个页面,如果它有子栏目,它的主页通常是一个封面页,用来展示其下子栏目的概览。
- 栏目列表页 (
核心数据表:dede_arctype 和 dede_archives
要理解栏目和内容,必须看它们的数据表。
栏目表:dede_arctype
这个表存储了所有栏目的信息,也就是“容器”本身的描述。
id: 栏目的唯一ID。reid: 父栏目的ID,如果是顶级栏目,则为0。topid: 顶级栏目的ID,用于快速定位到顶级栏目。typename: 栏目名称,如“公司新闻”。typedir: 栏目目录,用于生成URL,如/news/。isdefault: 是否为默认栏目。channeltype: 栏目的内容模型ID,1代表“文章模型”,2代表“图集模型”。content: 栏目介绍,可以在栏目页调用。
内容档案表:dede_archives
这个表存储了所有内容的基础信息,是所有内容模型的“主表”。
id: 内容的唯一ID(也是文章ID)。typeid: 内容所属的最终栏目ID,这是连接内容和栏目的核心字段。arcrank: 内容状态(-1为审核,0为默认,>0为推荐级别等)。click: 点击量。: 内容标题。pubdate: 发布时间。senddate: 提交时间。mid: 发布者会员ID。
重要提示: dede_archives 只存了标题、时间等通用信息,具体的内容(如文章正文、产品规格等)会根据 channeltype 存在对应的数据模型表中,dede_addonarticle(文章附加表)、dede_addonproduct(产品附加表)等。

内容的管理流程
从创建到发布,大致流程如下:
-
选择栏目: 在后台发布内容(文章/产品等)时,第一步就是选择它要归属的栏目,你只能选择与你当前权限匹配的、内容模型相符的栏目。
-
根据栏目的内容模型,填写相应的字段,在“新闻中心”栏目下发布,就需要填写标题、来源、作者、正文等。
-
保存与审核:保存后,会先进入数据库,在
dede_archives表中生成一条记录,typeid字段被设置为所选栏目的ID,如果网站开启了审核功能,内容在前台是看不到的(arcrank字段不为0)。 -
生成静态文件: 管理员在后台审核该内容后,可以手动或通过计划任务生成静态文件。
- 系统会根据
typeid找到对应的栏目目录(typedir)。 - 在该目录下,生成一个唯一的详情页文件,如
article_10.html。 - 的信息也会被更新到其所属栏目的列表页(如
list_1.html)中。
- 系统会根据
-
前台访问: 用户点击“新闻中心”链接,访问
list_1.html,看到该栏目的所有文章列表,点击其中一篇文章的标题,跳转到article_10.html查看全文。
核心模板标签调用
在模板文件(.htm)中,通过特定的标签来调用栏目和内容。
调用栏目信息
通常用在 head.htm 或 index.htm 中。
-
获取当前栏目的名称:
{dede:field name='typename'/}这个标签通常用在列表页(
list_xxx.htm页(article_xxx.htm)中,用来显示当前栏目的标题。 -
获取顶级栏目名称:
{dede:field name='topid' runphp='yes'} $id = @me; $sql = "SELECT typename FROM `dede_arctype` WHERE id=$id"; $row = $dsql->GetOne($sql); @me = $row['typename']; {/dede:field} -
调用所有顶级栏目(导航栏):
<ul> {dede:channel type='top' row='8'} <li><a href="[field:typelink/]">[field:typename/]</a></li> {/dede:channel} </ul>type='top': 只调用顶级栏目。row='8': 调用8个栏目。[field:typelink/]: 栏目链接,会自动生成如/news/或/list_1.html。[field:typename/]: 栏目名称。
调用栏目内容(文章列表)
这是最常用的标签,用在列表页模板(如 list_article.htm)。
{dede:list pagesize='10' titlelen='40'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
<p>[field:description function="cn_substr(@me, 100)"/]...</p>
</li>
{/dede:list}
<!-- 分页条 -->
{dede:pagelist listsize='4' iteminfo='共[totalpage]页' listitem='info,index,end,pre,next,pageno'}/}
{dede:list}: 循环标签,用于列出栏目下的所有文章。pagesize='10': 每页显示10条,len='40'`: 标题长度限制为40个字符。[field:arcurl/]: 文章详情页的链接,这是最关键的标签。[field:title/]: 文章标题。[field:pubdate...]: 发布时间,通过function进行格式化。[field:description...]:{dede:pagelist}: 分页条标签。
常见问题与注意事项
-
内容模型与栏目不匹配: 如果你在发布内容时,选择的栏目内容模型是“文章”,但你试图填写“产品”模型才有的字段(如价格),就会出错,请确保栏目和内容模型一致。
-
栏目交叉: 有时一篇文章希望同时出现在多个栏目列表中(一篇“重大新闻”既想在“公司新闻”里出现,又想在“行业动态”里出现),这时可以使用“栏目交叉”功能,但要注意,这只是在列表页调用上做了文章,文章本身的
typeid仍然只有一个,SEO上可能存在权重分散的问题。 -
栏目路径与URL: 在后台“栏目管理” -> “修改”栏目时,
栏目目录(typedir)这个字段非常重要,它决定了栏目列表页和内容详情页的URL结构,请谨慎修改,一旦生成静态文件后修改,旧的链接就会失效。 -
死链问题: 如果删除了一个栏目,但没有处理该栏目下的所有内容,那么这些内容生成的详情页就会变成“死链”(404错误),正确的做法是:删除栏目前,先将其下的内容移动到其他栏目或删除。
| 概念 | 作用 | 关键表/标签 | 例子 |
|---|---|---|---|
| 栏目 | 分类/容器的组织结构和属性。 | dede_arctype |
新闻中心、产品展示 |
| 关系 | 一对多,一个栏目包含多篇内容。 | typeid 字段 |
文章的 typeid 指向 新闻中心 的 id |
| URL | 栏目决定列表页路径,内容ID决定详情页文件名。 | typedir, arcurl |
/list_1.html (新闻列表), /article_10.html (文章详情) |
理解了“栏目是骨架,内容是血肉”这个关系,以及它们在数据库和模板中的具体体现,你就能自如地管理和定制你的 DedeCMS 网站了。
