dede arclist标签如何修改?

99ANYc3cd6
预计阅读时长 24 分钟
位置: 首页 DEDE建站 正文

修改 arclist 标签通常分为几个层面:

dede arclist 标签修改
(图片来源网络,侵删)
  1. 前端模板调用修改:最常用,通过修改标签属性来实现不同的调用效果。
  2. 底层字段修改:通过修改底层模板来改变每条信息的显示格式。
  3. 核心文件修改:不推荐,用于修改标签本身的默认行为或添加新功能。

前端模板调用修改(最常用)

这是绝大多数用户需要掌握的修改方式,通过修改 arclist 标签的属性来控制输出的内容、数量、排序等。

基本语法

{dede:arclist typeid='' row='' titlelen='' orderby='' channelid=''}
    <a href='[field:arcurl/]'>[field:title/]</a>
    <span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
{/dede:arclist}

常用属性列表

属性名 参数说明 示例
typeid 指定栏目ID,调用指定栏目下的文章,多个ID用逗号隔开。 typeid='1,3' (调用栏目ID为1和3下的文章)
row 调用条数,数字。 row='10' (调用10条文章)
infolen 内容简介长度,数字,单位是字节。 infolen='100' (简介显示100个字节)
orderby 排序方式,常用值有:pubdate (发布日期,默认)、click (点击量)、id (文章ID)、arcrank (置顶级别)、hot (热度) 等。 orderby='click' (按点击量从高到低排序)
orderway 排序顺序desc (降序,默认) 或 asc (升序)。 orderway='asc' (升序排列)
channelid 指定模型ID1代表文章,2代表图集,以此类推。 channelid='1' (只调用文章模型)
limit 记录起始-结束,格式为 起始数,记录数 limit='0,5' (从第0条开始,调用5条,即前5条)
flag 特定属性文章,用 分隔,如 h (头条)、c (推荐)、p (图片)、a (跳转页) 等。 flag='h,c' (调用头条和推荐的文章)
subday 指定天数内,数字,表示调用N天内的文章。 subday='7' (调用最近7天内发布的文章)
keyword ,调用包含指定关键词的文章。 keyword='DedeCMS' (调用标题或简介中包含“DedeCMS”的文章)
att 特定附加属性,如 att='2' 表示调用文章的第二个自定义字段。 (较少单独使用,更多用于底层字段)

修改示例

示例1:调用指定栏目下的“头条”文章,按点击量排序,显示10条

{dede:arclist typeid='5' flag='h' row='10' orderby='click'}
    <li>
        <a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
        <span class="click">阅读([field:click/])</span>
    </li>
{/dede:arclist}

示例2:调用首页最新文章,不限制栏目,显示20条,标题长度30

{dede:arclist row='20' titlelen='30' orderby='pubdate'}
    <div class="news-item">
        <h3><a href="[field:arcurl/]">[field:title/]</a></h3>
        <p class="info">[field:pubdate function="MyDate('Y-m-d H:i',@me)"]</p>
        <p class="summary">[field:info/]...</p>
    </div>
{/dede:arclist}

底层字段修改

arclist 标签内的内容({dede:arclist}...{/dede:arclist})就是底层模板,通过修改这里的代码,你可以控制每条信息的显示样式。

dede arclist 标签修改
(图片来源网络,侵删)

常用底层字段

字段名 说明 示例
[field:title/] [field:title/]
[field:arcurl/] 文章链接 <a href="[field:arcurl/]">标题</a>
[field:picname/] 文章首图地址 <img src="[field:picname/]" alt="[field:title/]">
[field:info/] 简介(截取infolen长度) [field:info/]
[field:pubdate/] 发布时间(时间戳) [field:pubdate function="MyDate('Y-m-d',@me)"]
[field:click/] 点击量 [field:click]
[field:writer/] 作者 [field:writer]
[field:source/] 来源 [field:source]
[field:textlink/] <a> 链接标签 [field:textlink/] (等同于 <a href='[field:arcurl/]'>[field:title/]</a>)
[field:image/] <img> 图片标签 [field:image/] (等同于 <img src='[field:picname/]' alt='[field:title/]' />)
[field:id/] 文章ID [field:id]
[field:typename/] 所属栏目名称 [field:typename]
[field:typeurl/] 所属栏目链接 [field:typeurl]

底层字段修改示例

目标:实现一个带缩略图、标题、日期和简介的图文列表

{dede:arclist row='6' titlelen='40' orderby='pubdate' type='image'}
    <div class="article-item">
        <div class="thumb">
            <a href="[field:arcurl/]">
                <img src="[field:picname/]" alt="[field:title/]" />
            </a>
        </div>
        <div class="text">
            <h3><a href="[field:arcurl/]">[field:title/]</a></h3>
            <p class="date">[field:pubdate function="MyDate('Y-m-d',@me)"]</p>
            <p class="summary">[field:info/]...</p>
        </div>
    </div>
{/dede:arclist}

说明:

  • type='image':这个属性会自动过滤掉没有缩略图的文章,非常适合调用图文列表。
  • [field:picname/]:调用文章的第一张图片作为缩略图,如果文章没有图,这个字段为空,配合 type='image' 使用效果更好。
  • function="MyDate('Y-m-d',@me)":这是对时间戳进行格式化,@me 代表当前字段的原始值(时间戳)。

核心文件修改(高级/不推荐)

如果你想修改 arclist 的默认行为,或者添加一个系统没有的属性,就需要修改 PHP 源文件。

强烈建议: 在修改前,务必备份原文件!并且不要直接在系统目录下修改,最好通过二次开发的方式,或者使用 include 标签引入你修改过的文件。

定位核心文件

arclist 的解析逻辑主要在以下文件中: /include/taglib/arclist.lib.php

修改流程(以添加一个新属性为例)

假设我们想添加一个 myorder 属性,可以指定按 idclick 排序。

  1. 打开 /include/taglib/arclist.lib.php 文件。
  2. 找到获取 $orderby 值的代码段。 通常在文件开头附近,类似这样:
    // ... 其他代码 ...
    if($orderby=='') $orderby = 'default';
    if($orderway=='') $orderway = 'desc';
    // ... 其他代码 ...
    $ordersql = '';
    if($orderby=='hot' || $orderby=='click') $ordersql = " ORDER BY arc.click $orderway";
    else if($orderby=='pubdate') $ordersql = " ORDER BY arc.pubdate $orderway";
    else if($orderby=='sortrank' || $orderby=='rank') $ordersql = " ORDER BY arc.sortrank $orderway";
    else $ordersql = " ORDER BY arc.id $orderway";
    // ... 其他代码 ...
  3. 修改或添加逻辑。 我们修改 else if 部分,增加一个 myorder 的判断:
    // ... 其他代码 ...
    $ordersql = '';
    if($orderby=='hot' || $orderby=='click') {
        $ordersql = " ORDER BY arc.click $orderway";
    } else if($orderby=='pubdate') {
        $ordersql = " ORDER BY arc.pubdate $orderway";
    } else if($orderby=='sortrank' || $orderby=='rank') {
        $ordersql = " ORDER BY arc.sortrank $orderway";
    } else if($orderby=='myorder') { // 新增 myorder 属性
        // myorder 的值是 'click',则按点击排序,否则默认按 id 排序
        if($myorder == 'click') {
            $ordersql = " ORDER BY arc.click $orderway";
        } else {
            $ordersql = " ORDER BY arc.id $orderway";
        }
    } else {
        $ordersql = " ORDER BY arc.id $orderway";
    }
    // ... 其他代码 ...
  4. 使用新属性。 现在你就可以在模板中使用了:
    {dede:arclist row='10' orderby='myorder' myorder='click'}
        <a href="[field:arcurl/]">[field:title/]</a>
    {/dede:arclist}

    这个调用会按点击量排序。

修改类型 修改位置 难度 风险 适用场景
前端调用 模板文件 99% 的日常需求,如调整列表样式、数量、排序等。
底层字段 模板文件 改变每条信息的显示内容,如添加缩略图、作者、来源等。
核心文件 /include/taglib/arclist.lib.php 添加系统没有的标签属性,或改变 arclist 的底层逻辑。

对于绝大多数用户来说,熟练掌握第一部分(前端调用)第二部分(底层字段)就足以应对绝大多数 arclist 标签的修改需求。请谨慎进行第三部分(核心文件)的修改

-- 展开阅读全文 --
头像
C语言string与string有何区别?
« 上一篇 昨天
C语言strcpy函数的参数为何用&?
下一篇 » 昨天

相关文章

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

目录[+]