织梦list自定义字段如何调用与显示?

99ANYc3cd6
预计阅读时长 26 分钟
位置: 首页 织梦建站 正文

核心概念:列表页的工作原理

在开始自定义之前,必须理解织梦列表页的基本流程:

织梦 list 自定义
(图片来源网络,侵删)
  1. URL触发:用户访问一个栏目链接,https://www.yoursite.com/list-1-1.html

    • list: 固定,表示列表页。
    • 1: 栏目的ID (typeid=1)。
    • 1: 页码 (page=1)。
  2. PHP脚本处理:服务器会执行 list_1.php 这个文件(如果不存在,则执行根目录下的 list.php,并将栏目ID作为参数传入)。

  3. 数据查询list_1.php 文件会根据栏目ID和页码,从数据库中查询该栏目下的所有文章信息。

  4. 模板渲染:查询到的数据会被加载到对应的列表模板文件中,最终生成HTML页面并发送给浏览器。

    织梦 list 自定义
    (图片来源网络,侵删)

关键文件

  • 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下的文章。

  1. 创建或编辑 list_1.php 文件。
  2. 找到查询数据库的核心代码,通常在 //获得列表查询 注释下方。
  3. 修改 $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如何获取当前文章标题?
« 上一篇 今天
织梦如何自动获取tag标签?
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码