核心概念:列表页的工作原理
在开始自定义之前,必须理解织梦列表页的基本流程:

-
URL触发:用户访问一个栏目链接,
https://www.yoursite.com/list-1-1.html。list: 固定,表示列表页。1: 栏目的ID (typeid=1)。1: 页码 (page=1)。
-
PHP脚本处理:服务器会执行
list_1.php这个文件(如果不存在,则执行根目录下的list.php,并将栏目ID作为参数传入)。 -
数据查询:
list_1.php文件会根据栏目ID和页码,从数据库中查询该栏目下的所有文章信息。 -
模板渲染:查询到的数据会被加载到对应的列表模板文件中,最终生成HTML页面并发送给浏览器。
(图片来源网络,侵删)
关键文件:
- PHP文件:
list.php(通用) 或list_{栏目ID}.php(特定栏目专用) - 模板文件:
list_{栏目ID}.htm(特定栏目专用) 或/templets/default/list.htm(默认通用模板)
基础自定义:修改列表页模板 (list.htm)
这是最常见也是最简单的自定义方式,主要影响页面的HTML结构和样式。
修改列表标题和描述
在 list.htm 中,你可以直接修改HTML标签来添加标题、描述等。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">{dede:field.title/}_{dede:global.cfg_webname/}</title>
<meta name="description" content="{dede:field.description function='html2text(@me)'/}">
<meta name="keywords" content="{dede:field.keywords/}">
</head>
<body>
<h1>{dede:field.title/}</h1>
<p class="description">{dede:field.description/}</p>
<!-- 其他内容 -->
</body>
</html>
{dede:field.title/}: 当前栏目标题。{dede:field.description/}: 当前栏目描述。{dede:global.cfg_webname/}: 网站名称。
自定义文章列表循环 (arclist
这是列表页的核心,使用 {dede:arclist} 标签来循环输出文章列表。
基本用法:
<ul class="news-list">
{dede:arclist}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span class="date">[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
</li>
{/dede:arclist}
</ul>
常用属性:
属性名
作用
示例
typeid
指定栏目ID,通常留空表示当前栏目
typeid='1'
row
获取文章数量
row='10' (获取10条)
infolen
简介/摘要长度
infolen='100'
orderby
排序方式
orderby='hot' (按点击量), orderby='pubdate' (按发布时间), orderby='sortrank' (按后台排序)
orderway
排序方向
orderway='desc' (降序), orderway='asc' (升序)
limit
限制起始和条数
limit='0,10' (从第0条开始,取10条)
imgwidth / imgheight
缩略图尺寸
imgwidth='200' imgheight='150'
进阶用法 - 自定义样式和字段:
<div class="article-list">
{dede:arclist row='6' titlelen='40' orderby='pubdate' orderway='desc'}
<article class="item">
<div class="thumb">
<a href="[field:arcurl/]">
<img src="[field:litpic/]" alt="[field:title/]" width="300" height="200">
</a>
</div>
<h2><a href="[field:arcurl/]">[field:title/]</a></h2>
<p class="summary">[field:description function='cn_substr(@me, 100)'/]...</p>
<div class="meta">
<span class="author">作者:[field:writer/]</span>
<span class="date">发布于:[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
<span class="views">阅读:[field:click/]</span>
</div>
</article>
{/dede:arclist}
</div>
进阶自定义:调用自定义字段
如果你的文章模型添加了自定义字段(如:video_url, author_intro),你需要在列表页也调用它们。
确保字段在列表页可用
在后台 -> 系统 -> SQL命令工具 中,执行以下SQL,确保你的自定义字段在列表页的缓存中可用(以video_url为例):
ALTER TABLE `dede_archives` ADD `video_url` VARCHAR(255) NOT NULL DEFAULT '';
注意:这只是一个示例,如果你的字段已经存在,此操作会报错,更稳妥的方法是在添加自定义字段时,确保选择了“在列表页使用”的选项。
在模板中调用自定义字段
在 {dede:arclist} 标签内,使用 [field:自定义字段名/] 即可。
{dede:arclist}
<div>
<a href="[field:arcurl/]">[field:title/]</a>
<!-- 调用自定义的视频链接字段 -->
<p>视频链接:<a href="[field:video_url/]">点击观看</a></p>
<!-- 调用自定义的作者简介字段 -->
<p>简介:[field:author_intro/]</p>
</div>
{/dede:arclist}
高级自定义:修改列表页PHP逻辑 (list.php)
当你需要改变默认的查询逻辑,只调用指定分类的文章、调用自定义模型的文章、修改排序规则等,就需要修改 list.php 文件。
操作前警告: 修改核心文件有风险,建议先备份原文件,最好是为特定栏目创建专用的 list_{栏目ID}.php,而不是修改通用的 list.php。
示例:在列表页调用另一个栏目(如ID=5)的文章
假设你想让栏目ID=1的列表页,显示的是栏目ID=5下的文章。
- 创建或编辑
list_1.php 文件。
- 找到查询数据库的核心代码,通常在
//获得列表查询 注释下方。
- 修改
$typeid 变量的值。
修改前 (默认逻辑):
// list_1.php
// ...
//获得列表查询
$tid = $typeid;
if($typeid>0){
$tp = new TypeLink($typeid);
$typeid = $tp->TypeInfos['reid']==0 ? $typeid : $tp->TypeInfos['reid'];
}
// ... 后续查询会用到 $typeid
修改后 (强制调用栏目5):
// list_1.php
// ...
//获得列表查询
// 将原来的逻辑注释掉或替换掉
// $tid = $typeid;
// if($typeid>0){
// $tp = new TypeLink($typeid);
// $typeid = $tp->TypeInfos['reid']==0 ? $typeid : $tp->TypeInfos['reid'];
// }
// --- 自定义逻辑开始 ---
// 强制指定要查询的栏目ID为5
$tid = 5; // 这个变量可能影响分页,确保正确
$typeid = 5; // 直接覆盖 $typeid,让后续查询使用这个值
// --- 自定义逻辑结束 ---
// ...
通过这种方式,你可以灵活地控制列表页的数据来源。
高级自定义:自定义分页
织梦自带的分页标签是 {dede:pagelist/},你可以通过CSS来美化它,或者通过修改其属性来改变显示方式。
在模板中使用分页标签
将 {dede:pagelist/} 放在你希望显示分页的位置。
<div class="pagination">
{dede:pagelist listsize='4' listitem='info,index,end,pre,next,pageno'}
</div>
分页标签常用属性
属性名
作用
示例
listsize
显示的页码数量,中间的页码数
listsize='4' (显示2个前缀页码,2个后缀页码)
listitem
显示的分页项目
listitem='index,end,pre,next,pageno' (显示首页、尾页、上一页、下一页、页码)
template
指定分页模板样式文件
template='/templets/default/pagenote.htm'
自定义分页样式 (pagenote.htm)
如果你想完全自定义分页的HTML结构,可以创建一个 pagenote.htm 文件,并使用 {dede:pagelist/} 的 template 属性来调用它。
在 /templets/default/ 目录下创建 pagenote.htm:
<!-- pagenote.htm -->
<div class="my-pagination">
<ul>
<!-- 首页 -->
<li><a href="{dede:global name='indexurl'/}">首页</a></li>
<!-- 上一页 -->
<li><a href="{dede:pagelist listitem='pre' runphp='yes']">上一页</a></li>
<!-- 页码 -->
{dede:pagelist listitem='pageno' listsize='2'/}
<!-- 下一页 -->
<li><a href="{dede:pagelist listitem='next' runphp='yes']">下一页</a></li>
<!-- 尾页 -->
<li><a href="{dede:pagelist listitem='end'/}">尾页</a></li>
</ul>
</div>
然后在你的 list.htm 中这样调用:
{dede:pagelist template='/templets/default/pagenote.htm' listsize='2'/}
你就可以通过CSS来美化 .my-pagination 了。
自定义类型
关键文件/标签
适用场景
模板结构/样式
list_{栏目ID}.htm
改变列表页的HTML布局、CSS样式,添加/删除标题、描述等。
文章列表调用
{dede:arclist} 及其属性
控制显示哪些文章、数量、排序方式、标题长度等。
调用自定义字段
[field:自定义字段名/]
在列表页显示文章模型的扩展字段,如视频、作者简介等。
数据查询逻辑
list_{栏目ID}.php
改变列表页的数据来源,例如调用其他栏目的文章、修改复杂的排序规则。
分页显示
{dede:pagelist}, pagenote.htm
自定义分页的样式和显示内容(首页、上一页等)。
从简单的模板修改到复杂的PHP逻辑调整,织梦为列表页的自定义提供了足够的灵活性,建议从基础开始,逐步深入,确保每一步都进行测试和备份。
这是列表页的核心,使用 {dede:arclist} 标签来循环输出文章列表。
基本用法:
<ul class="news-list">
{dede:arclist}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span class="date">[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
</li>
{/dede:arclist}
</ul>
常用属性:
| 属性名 | 作用 | 示例 |
|---|---|---|
typeid |
指定栏目ID,通常留空表示当前栏目 | typeid='1' |
row |
获取文章数量 | row='10' (获取10条) |
infolen |
简介/摘要长度 | infolen='100' |
orderby |
排序方式 | orderby='hot' (按点击量), orderby='pubdate' (按发布时间), orderby='sortrank' (按后台排序) |
orderway |
排序方向 | orderway='desc' (降序), orderway='asc' (升序) |
limit |
限制起始和条数 | limit='0,10' (从第0条开始,取10条) |
imgwidth / imgheight |
缩略图尺寸 | imgwidth='200' imgheight='150' |
进阶用法 - 自定义样式和字段:
<div class="article-list">
{dede:arclist row='6' titlelen='40' orderby='pubdate' orderway='desc'}
<article class="item">
<div class="thumb">
<a href="[field:arcurl/]">
<img src="[field:litpic/]" alt="[field:title/]" width="300" height="200">
</a>
</div>
<h2><a href="[field:arcurl/]">[field:title/]</a></h2>
<p class="summary">[field:description function='cn_substr(@me, 100)'/]...</p>
<div class="meta">
<span class="author">作者:[field:writer/]</span>
<span class="date">发布于:[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
<span class="views">阅读:[field:click/]</span>
</div>
</article>
{/dede:arclist}
</div>
进阶自定义:调用自定义字段
如果你的文章模型添加了自定义字段(如:video_url, author_intro),你需要在列表页也调用它们。
确保字段在列表页可用
在后台 -> 系统 -> SQL命令工具 中,执行以下SQL,确保你的自定义字段在列表页的缓存中可用(以video_url为例):
ALTER TABLE `dede_archives` ADD `video_url` VARCHAR(255) NOT NULL DEFAULT '';
注意:这只是一个示例,如果你的字段已经存在,此操作会报错,更稳妥的方法是在添加自定义字段时,确保选择了“在列表页使用”的选项。
在模板中调用自定义字段
在 {dede:arclist} 标签内,使用 [field:自定义字段名/] 即可。
{dede:arclist}
<div>
<a href="[field:arcurl/]">[field:title/]</a>
<!-- 调用自定义的视频链接字段 -->
<p>视频链接:<a href="[field:video_url/]">点击观看</a></p>
<!-- 调用自定义的作者简介字段 -->
<p>简介:[field:author_intro/]</p>
</div>
{/dede:arclist}
高级自定义:修改列表页PHP逻辑 (list.php)
当你需要改变默认的查询逻辑,只调用指定分类的文章、调用自定义模型的文章、修改排序规则等,就需要修改 list.php 文件。
操作前警告: 修改核心文件有风险,建议先备份原文件,最好是为特定栏目创建专用的 list_{栏目ID}.php,而不是修改通用的 list.php。
示例:在列表页调用另一个栏目(如ID=5)的文章
假设你想让栏目ID=1的列表页,显示的是栏目ID=5下的文章。
- 创建或编辑
list_1.php文件。 - 找到查询数据库的核心代码,通常在
//获得列表查询注释下方。 - 修改
$typeid变量的值。
修改前 (默认逻辑):
// list_1.php
// ...
//获得列表查询
$tid = $typeid;
if($typeid>0){
$tp = new TypeLink($typeid);
$typeid = $tp->TypeInfos['reid']==0 ? $typeid : $tp->TypeInfos['reid'];
}
// ... 后续查询会用到 $typeid
修改后 (强制调用栏目5):
// list_1.php
// ...
//获得列表查询
// 将原来的逻辑注释掉或替换掉
// $tid = $typeid;
// if($typeid>0){
// $tp = new TypeLink($typeid);
// $typeid = $tp->TypeInfos['reid']==0 ? $typeid : $tp->TypeInfos['reid'];
// }
// --- 自定义逻辑开始 ---
// 强制指定要查询的栏目ID为5
$tid = 5; // 这个变量可能影响分页,确保正确
$typeid = 5; // 直接覆盖 $typeid,让后续查询使用这个值
// --- 自定义逻辑结束 ---
// ...
通过这种方式,你可以灵活地控制列表页的数据来源。
高级自定义:自定义分页
织梦自带的分页标签是 {dede:pagelist/},你可以通过CSS来美化它,或者通过修改其属性来改变显示方式。
在模板中使用分页标签
将 {dede:pagelist/} 放在你希望显示分页的位置。
<div class="pagination">
{dede:pagelist listsize='4' listitem='info,index,end,pre,next,pageno'}
</div>
分页标签常用属性
| 属性名 | 作用 | 示例 |
|---|---|---|
listsize |
显示的页码数量,中间的页码数 | listsize='4' (显示2个前缀页码,2个后缀页码) |
listitem |
显示的分页项目 | listitem='index,end,pre,next,pageno' (显示首页、尾页、上一页、下一页、页码) |
template |
指定分页模板样式文件 | template='/templets/default/pagenote.htm' |
自定义分页样式 (pagenote.htm)
如果你想完全自定义分页的HTML结构,可以创建一个 pagenote.htm 文件,并使用 {dede:pagelist/} 的 template 属性来调用它。
在 /templets/default/ 目录下创建 pagenote.htm:
<!-- pagenote.htm -->
<div class="my-pagination">
<ul>
<!-- 首页 -->
<li><a href="{dede:global name='indexurl'/}">首页</a></li>
<!-- 上一页 -->
<li><a href="{dede:pagelist listitem='pre' runphp='yes']">上一页</a></li>
<!-- 页码 -->
{dede:pagelist listitem='pageno' listsize='2'/}
<!-- 下一页 -->
<li><a href="{dede:pagelist listitem='next' runphp='yes']">下一页</a></li>
<!-- 尾页 -->
<li><a href="{dede:pagelist listitem='end'/}">尾页</a></li>
</ul>
</div>
然后在你的 list.htm 中这样调用:
{dede:pagelist template='/templets/default/pagenote.htm' listsize='2'/}
你就可以通过CSS来美化 .my-pagination 了。
| 自定义类型 | 关键文件/标签 | 适用场景 |
|---|---|---|
| 模板结构/样式 | list_{栏目ID}.htm |
改变列表页的HTML布局、CSS样式,添加/删除标题、描述等。 |
| 文章列表调用 | {dede:arclist} 及其属性 |
控制显示哪些文章、数量、排序方式、标题长度等。 |
| 调用自定义字段 | [field:自定义字段名/] |
在列表页显示文章模型的扩展字段,如视频、作者简介等。 |
| 数据查询逻辑 | list_{栏目ID}.php |
改变列表页的数据来源,例如调用其他栏目的文章、修改复杂的排序规则。 |
| 分页显示 | {dede:pagelist}, pagenote.htm |
自定义分页的样式和显示内容(首页、上一页等)。 |
从简单的模板修改到复杂的PHP逻辑调整,织梦为列表页的自定义提供了足够的灵活性,建议从基础开始,逐步深入,确保每一步都进行测试和备份。
