下面我将为你详细拆解产品列表页的代码构成,并提供一个完整的、可自定义的模板示例。

核心文件构成
一个典型的DedeCMS产品列表页涉及以下三个核心文件:
-
列表模板文件:
list_product.htm- 这是你在后台设置栏目时指定的列表页模板。
- 路径:
/templets/你的模板文件夹/(/templets/default/list_product.htm) - 作用: 负责页面的HTML结构、CSS样式和调用DedeCMS标签来显示产品列表、分页等信息。这是你需要主要修改和编写的文件。
-
列表栏目设置: 在后台的“栏目管理”中设置
- 当你创建一个“产品”栏目时,你需要指定它的列表模板为
list_product.htm。 - 作用: 告诉DedeCMS使用哪个模板文件来生成这个栏目的列表页,并定义列表页的标题、关键词、描述等SEO信息。
- 当你创建一个“产品”栏目时,你需要指定它的列表模板为
-
列表动态页面生成文件:
list.php
(图片来源网络,侵删)- 这是一个PHP程序文件,位于网站根目录。
- 作用: 当用户访问一个列表页链接(如
http://yourdomain.com/product/list_1.html)时,这个文件会接收请求,根据栏目ID(如1)去数据库中读取对应的产品数据,然后加载你在栏目中指定的list_product.htm模板,将数据填充进去,最终生成HTML页面并返回给用户。
总结一下流程:
用户访问 list_1.html -> 服务器执行 list.php -> list.php 读取数据库和 list_product.htm 模板 -> 生成最终的HTML页面 -> 返回给用户。
list_product.htm 模板代码详解与示例
下面是一个功能完整、结构清晰的产品列表页模板代码,你可以基于这个模板进行修改,以适应你的设计需求。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">{dede:field.title/}_{dede:global.cfg_webname/}</title>
<meta name="keywords" content="{dede:field.keywords/}" />
<meta name="description" content="{dede:field.description function='html2text(@me)'/}" />
<link rel="stylesheet" href="/templets/default/css/style.css"> <!-- 引入你的CSS文件 -->
</head>
<body>
<!-- 顶部导航等公共部分 (通常使用 {dede:include filename='head.htm' /} 引入) -->
{dede:include filename="head.htm"/}
<!-- 主要内容区 -->
<div class="main-container">
<!-- 左侧产品分类导航 -->
<div class="sidebar">
<h3>产品分类</h3>
{dede:channelartlist typeid='0' currentstyle='active'}
<dl>
<dt><a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a></dt>
<dd>
{dede:channel type='son' noself='yes'}
<a href="[field:typelink/]">[field:typename/]</a>
{/dede:channel}
</dd>
</dl>
{/dede:channelartlist}
</div>
<!-- 右侧产品列表 -->
<div class="content-list">
<!-- 当前栏目位置 (面包屑导航) -->
<div class="breadcrumb">
{dede:field name='position'/}
</div>
<!-- 列表标题和描述 -->
<h1 class="list-title">{dede:field.title/}</h1>
<p class="list-desc">{dede:field.description/}</p>
<!-- 产品列表内容 -->
<ul class="product-grid">
{dede:list pagesize='12' titlelen='40'}
<!--
{dede:list} 是循环标签,用于列出当前栏目的文章(产品)。
pagesize='12' 表示每页显示12条。
titlelen='40' 表示标题最多显示40个字符。
-->
<li class="product-item">
<!-- 产品缩略图,如果为空则显示默认图片 -->
<a href="[field:arcurl/]">
<img src="[field:litpic/]" alt="[field:title/]" onerror="this.src='/templets/default/images/default.jpg';">
</a>
<div class="product-info">
<h3><a href="[field:arcurl/]">[field:title/]</a></h3>
<!-- 如果产品模型有价格字段,可以这样调用 -->
<!-- <p class="price">价格:¥[field:price/]</p> -->
<p class="summary">[field:info function='cn_substr(@me, 100)'/]...</p> <!-- 产品摘要,截取100字符 -->
</div>
</li>
{/dede:list}
</ul>
<!-- 分页条 -->
<div class="pagination">
{dede:pagelist listsize='4' listitem='info,index,end,pre,next,pageno'}
</div>
</div>
</div>
<!-- 底部版权等公共部分 (通常使用 {dede:include filename='footer.htm' /} 引入) -->
{dede:include filename="footer.htm"/}
</body>
</html>
核心标签详解
在上面的代码中,我们使用了几个关键的DedeCMS标签,下面是它们的详细说明:
{dede:list}
这是列表页的核心循环标签,用于遍历当前栏目下的所有内容(文章/产品)。
(图片来源网络,侵删)
- 常用属性:
pagesize='数字': 设置每页显示多少条记录。pagesize='12'。
titlelen='数字': 设置标题显示的字符长度。titlelen='30'。
infolen='数字': 设置摘要(描述)显示的字符长度。
orderway='asc/desc': 排序方式。asc 为升序(默认),desc 为降序。
{dede:pagelist}
用于生成分页导航链接。
- 常用属性:
listsize='数字': 设置页码显示的个数。listsize='4' 会显示 ... 3 4 [5] 6 7 ... 这样的效果。
listitem='...': 设置分页条显示哪些项目。
info: 显示 "共几页" 等信息。
index: 显示首页。
pre: 显示上一页。
next: 显示下一页。
end: 显示尾页。
pageno: 显示页码。
{dede:field}
用于获取当前栏目的某个字段信息。
field.title: 栏目标题。
field.keywords: 栏目关键词。
field.description: 栏目描述。
field.position: 获取栏目位置的面包屑导航代码,首页 > 产品中心 > 手机。
{dede:channelartlist}
用于生成带有当前样式和子栏目的分类导航,非常适合用在列表页的侧边栏。
typeid='0': 从顶级栏目开始,如果只想显示某个栏目的子栏目,就写上它的ID,如 typeid='5'。
currentstyle='...': 为当前栏目所在的 <a> 标签设置样式。currentstyle='class="active"',会生成 <a href="..." class="active">栏目名</a>。
内部循环变量 (在 {dede:list} 内部使用)
这些变量用于获取每条产品(文章)的具体信息。
[field:arcurl/]: 文章的完整链接地址。
[field:title/]: 文章标题。
[field:litpic/]: 文章的缩略图地址。
[field:info/]: 文章的内容(正文)。
[field:description/]: 文章的摘要(描述)。
[field:pubdate function='strftime("%Y-%m-%d", @me)'/]: 发布日期,function 可以用来格式化日期。
常见问题与自定义技巧
如何显示产品的价格?
默认的“文章模型”没有价格字段,你需要:
- 在后台“核心” -> “内容模型管理” -> “添加新模型”,创建一个“产品”模型,并添加一个“价格”字段(建议使用“数字”类型)。
- 将你的产品栏目设置为使用这个新的“产品”模型。
- 在
list_product.htm 中,使用 [field:price/] 来调用价格,注意:如果某个产品没有填写价格,可能需要用 if 标签判断一下是否显示。
如何修改列表的排序方式?
在 {dede:list} 标签中添加 orderway='desc' 可以实现按发布时间倒序排列,如果需要按其他字段(如价格)排序,你需要:
- 确保该字段在模型中存在。
- 在后台“系统” -> “系统基本参数” -> “核心设置” 中,找到 “列表页排序选项”,添加你的字段,如
价格 asc,desc。
- 在列表页模板中,用户就可以通过点击表头等方式来切换排序了(这需要前端JS配合,比较复杂)。
如何调用子栏目的产品?
默认 {dede:list} 只调用当前栏目的内容,如果你想调用当前栏目及其所有子栏目的产品,可以使用 {dede:arclist}
{dede:arclist typeid='顶级栏目ID' channelid='你的产品模型ID' row='12' titlelen='40'}
<!-- 循环内容与 {dede:list} 内部一样 -->
<li>
<a href="[field:arcurl/]"><img src="[field:litpic/]" alt="[field:title/]"></a>
<h3><a href="[field:arcurl/]">[field:title/]</a></h3>
</li>
{/dede:arclist}
希望这份详细的指南能帮助你理解和修改DedeCMS的产品列表页代码!
这是列表页的核心循环标签,用于遍历当前栏目下的所有内容(文章/产品)。

- 常用属性:
pagesize='数字': 设置每页显示多少条记录。pagesize='12'。titlelen='数字': 设置标题显示的字符长度。titlelen='30'。infolen='数字': 设置摘要(描述)显示的字符长度。orderway='asc/desc': 排序方式。asc为升序(默认),desc为降序。
{dede:pagelist}
用于生成分页导航链接。
- 常用属性:
listsize='数字': 设置页码显示的个数。listsize='4' 会显示 ... 3 4 [5] 6 7 ... 这样的效果。
listitem='...': 设置分页条显示哪些项目。
info: 显示 "共几页" 等信息。
index: 显示首页。
pre: 显示上一页。
next: 显示下一页。
end: 显示尾页。
pageno: 显示页码。
{dede:field}
用于获取当前栏目的某个字段信息。
field.title: 栏目标题。
field.keywords: 栏目关键词。
field.description: 栏目描述。
field.position: 获取栏目位置的面包屑导航代码,首页 > 产品中心 > 手机。
{dede:channelartlist}
用于生成带有当前样式和子栏目的分类导航,非常适合用在列表页的侧边栏。
typeid='0': 从顶级栏目开始,如果只想显示某个栏目的子栏目,就写上它的ID,如 typeid='5'。
currentstyle='...': 为当前栏目所在的 <a> 标签设置样式。currentstyle='class="active"',会生成 <a href="..." class="active">栏目名</a>。
内部循环变量 (在 {dede:list} 内部使用)
这些变量用于获取每条产品(文章)的具体信息。
[field:arcurl/]: 文章的完整链接地址。
[field:title/]: 文章标题。
[field:litpic/]: 文章的缩略图地址。
[field:info/]: 文章的内容(正文)。
[field:description/]: 文章的摘要(描述)。
[field:pubdate function='strftime("%Y-%m-%d", @me)'/]: 发布日期,function 可以用来格式化日期。
常见问题与自定义技巧
如何显示产品的价格?
默认的“文章模型”没有价格字段,你需要:
- 在后台“核心” -> “内容模型管理” -> “添加新模型”,创建一个“产品”模型,并添加一个“价格”字段(建议使用“数字”类型)。
- 将你的产品栏目设置为使用这个新的“产品”模型。
- 在
list_product.htm 中,使用 [field:price/] 来调用价格,注意:如果某个产品没有填写价格,可能需要用 if 标签判断一下是否显示。
如何修改列表的排序方式?
在 {dede:list} 标签中添加 orderway='desc' 可以实现按发布时间倒序排列,如果需要按其他字段(如价格)排序,你需要:
- 确保该字段在模型中存在。
- 在后台“系统” -> “系统基本参数” -> “核心设置” 中,找到 “列表页排序选项”,添加你的字段,如
价格 asc,desc。
- 在列表页模板中,用户就可以通过点击表头等方式来切换排序了(这需要前端JS配合,比较复杂)。
如何调用子栏目的产品?
默认 {dede:list} 只调用当前栏目的内容,如果你想调用当前栏目及其所有子栏目的产品,可以使用 {dede:arclist}
{dede:arclist typeid='顶级栏目ID' channelid='你的产品模型ID' row='12' titlelen='40'}
<!-- 循环内容与 {dede:list} 内部一样 -->
<li>
<a href="[field:arcurl/]"><img src="[field:litpic/]" alt="[field:title/]"></a>
<h3><a href="[field:arcurl/]">[field:title/]</a></h3>
</li>
{/dede:arclist}
希望这份详细的指南能帮助你理解和修改DedeCMS的产品列表页代码!
用于生成分页导航链接。
- 常用属性:
listsize='数字': 设置页码显示的个数。listsize='4'会显示... 3 4 [5] 6 7 ...这样的效果。listitem='...': 设置分页条显示哪些项目。info: 显示 "共几页" 等信息。index: 显示首页。pre: 显示上一页。next: 显示下一页。end: 显示尾页。pageno: 显示页码。
{dede:field}
用于获取当前栏目的某个字段信息。
field.title: 栏目标题。
field.keywords: 栏目关键词。
field.description: 栏目描述。
field.position: 获取栏目位置的面包屑导航代码,首页 > 产品中心 > 手机。
{dede:channelartlist}
用于生成带有当前样式和子栏目的分类导航,非常适合用在列表页的侧边栏。
typeid='0': 从顶级栏目开始,如果只想显示某个栏目的子栏目,就写上它的ID,如 typeid='5'。
currentstyle='...': 为当前栏目所在的 <a> 标签设置样式。currentstyle='class="active"',会生成 <a href="..." class="active">栏目名</a>。
内部循环变量 (在 {dede:list} 内部使用)
这些变量用于获取每条产品(文章)的具体信息。
[field:arcurl/]: 文章的完整链接地址。
[field:title/]: 文章标题。
[field:litpic/]: 文章的缩略图地址。
[field:info/]: 文章的内容(正文)。
[field:description/]: 文章的摘要(描述)。
[field:pubdate function='strftime("%Y-%m-%d", @me)'/]: 发布日期,function 可以用来格式化日期。
常见问题与自定义技巧
如何显示产品的价格?
默认的“文章模型”没有价格字段,你需要:
- 在后台“核心” -> “内容模型管理” -> “添加新模型”,创建一个“产品”模型,并添加一个“价格”字段(建议使用“数字”类型)。
- 将你的产品栏目设置为使用这个新的“产品”模型。
- 在
list_product.htm 中,使用 [field:price/] 来调用价格,注意:如果某个产品没有填写价格,可能需要用 if 标签判断一下是否显示。
如何修改列表的排序方式?
在 {dede:list} 标签中添加 orderway='desc' 可以实现按发布时间倒序排列,如果需要按其他字段(如价格)排序,你需要:
- 确保该字段在模型中存在。
- 在后台“系统” -> “系统基本参数” -> “核心设置” 中,找到 “列表页排序选项”,添加你的字段,如
价格 asc,desc。
- 在列表页模板中,用户就可以通过点击表头等方式来切换排序了(这需要前端JS配合,比较复杂)。
如何调用子栏目的产品?
默认 {dede:list} 只调用当前栏目的内容,如果你想调用当前栏目及其所有子栏目的产品,可以使用 {dede:arclist}
{dede:arclist typeid='顶级栏目ID' channelid='你的产品模型ID' row='12' titlelen='40'}
<!-- 循环内容与 {dede:list} 内部一样 -->
<li>
<a href="[field:arcurl/]"><img src="[field:litpic/]" alt="[field:title/]"></a>
<h3><a href="[field:arcurl/]">[field:title/]</a></h3>
</li>
{/dede:arclist}
希望这份详细的指南能帮助你理解和修改DedeCMS的产品列表页代码!
用于获取当前栏目的某个字段信息。
field.title: 栏目标题。field.keywords: 栏目关键词。field.description: 栏目描述。field.position: 获取栏目位置的面包屑导航代码,首页 > 产品中心 > 手机。
{dede:channelartlist}
用于生成带有当前样式和子栏目的分类导航,非常适合用在列表页的侧边栏。
typeid='0': 从顶级栏目开始,如果只想显示某个栏目的子栏目,就写上它的ID,如 typeid='5'。
currentstyle='...': 为当前栏目所在的 <a> 标签设置样式。currentstyle='class="active"',会生成 <a href="..." class="active">栏目名</a>。
内部循环变量 (在 {dede:list} 内部使用)
这些变量用于获取每条产品(文章)的具体信息。
[field:arcurl/]: 文章的完整链接地址。
[field:title/]: 文章标题。
[field:litpic/]: 文章的缩略图地址。
[field:info/]: 文章的内容(正文)。
[field:description/]: 文章的摘要(描述)。
[field:pubdate function='strftime("%Y-%m-%d", @me)'/]: 发布日期,function 可以用来格式化日期。
常见问题与自定义技巧
如何显示产品的价格?
默认的“文章模型”没有价格字段,你需要:
- 在后台“核心” -> “内容模型管理” -> “添加新模型”,创建一个“产品”模型,并添加一个“价格”字段(建议使用“数字”类型)。
- 将你的产品栏目设置为使用这个新的“产品”模型。
- 在
list_product.htm 中,使用 [field:price/] 来调用价格,注意:如果某个产品没有填写价格,可能需要用 if 标签判断一下是否显示。
如何修改列表的排序方式?
在 {dede:list} 标签中添加 orderway='desc' 可以实现按发布时间倒序排列,如果需要按其他字段(如价格)排序,你需要:
- 确保该字段在模型中存在。
- 在后台“系统” -> “系统基本参数” -> “核心设置” 中,找到 “列表页排序选项”,添加你的字段,如
价格 asc,desc。
- 在列表页模板中,用户就可以通过点击表头等方式来切换排序了(这需要前端JS配合,比较复杂)。
如何调用子栏目的产品?
默认 {dede:list} 只调用当前栏目的内容,如果你想调用当前栏目及其所有子栏目的产品,可以使用 {dede:arclist}
{dede:arclist typeid='顶级栏目ID' channelid='你的产品模型ID' row='12' titlelen='40'}
<!-- 循环内容与 {dede:list} 内部一样 -->
<li>
<a href="[field:arcurl/]"><img src="[field:litpic/]" alt="[field:title/]"></a>
<h3><a href="[field:arcurl/]">[field:title/]</a></h3>
</li>
{/dede:arclist}
希望这份详细的指南能帮助你理解和修改DedeCMS的产品列表页代码!
用于生成带有当前样式和子栏目的分类导航,非常适合用在列表页的侧边栏。
typeid='0': 从顶级栏目开始,如果只想显示某个栏目的子栏目,就写上它的ID,如typeid='5'。currentstyle='...': 为当前栏目所在的<a>标签设置样式。currentstyle='class="active"',会生成<a href="..." class="active">栏目名</a>。
内部循环变量 (在 {dede:list} 内部使用)
这些变量用于获取每条产品(文章)的具体信息。
[field:arcurl/]: 文章的完整链接地址。[field:title/]: 文章标题。[field:litpic/]: 文章的缩略图地址。[field:info/]: 文章的内容(正文)。[field:description/]: 文章的摘要(描述)。[field:pubdate function='strftime("%Y-%m-%d", @me)'/]: 发布日期,function可以用来格式化日期。
常见问题与自定义技巧
如何显示产品的价格?
默认的“文章模型”没有价格字段,你需要:
- 在后台“核心” -> “内容模型管理” -> “添加新模型”,创建一个“产品”模型,并添加一个“价格”字段(建议使用“数字”类型)。
- 将你的产品栏目设置为使用这个新的“产品”模型。
- 在
list_product.htm中,使用[field:price/]来调用价格,注意:如果某个产品没有填写价格,可能需要用if标签判断一下是否显示。
如何修改列表的排序方式?
在 {dede:list} 标签中添加 orderway='desc' 可以实现按发布时间倒序排列,如果需要按其他字段(如价格)排序,你需要:
- 确保该字段在模型中存在。
- 在后台“系统” -> “系统基本参数” -> “核心设置” 中,找到 “列表页排序选项”,添加你的字段,如
价格 asc,desc。 - 在列表页模板中,用户就可以通过点击表头等方式来切换排序了(这需要前端JS配合,比较复杂)。
如何调用子栏目的产品?
默认 希望这份详细的指南能帮助你理解和修改DedeCMS的产品列表页代码!{dede:list} 只调用当前栏目的内容,如果你想调用当前栏目及其所有子栏目的产品,可以使用 {dede:arclist}
{dede:arclist typeid='顶级栏目ID' channelid='你的产品模型ID' row='12' titlelen='40'}
<!-- 循环内容与 {dede:list} 内部一样 -->
<li>
<a href="[field:arcurl/]"><img src="[field:litpic/]" alt="[field:title/]"></a>
<h3><a href="[field:arcurl/]">[field:title/]</a></h3>
</li>
{/dede:arclist}
