dede的datalist

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

datalist 是 DedeCMS 中一个非常核心且常用的列表标签,主要用于在页面上以列表形式(如文章列表、产品列表、图片列表等)循环输出数据,它的作用类似于 PHP 中的 foreach 循环,但使用了 DedeCMS 的模板标签语法,使得在模板文件中调用数据变得非常简单和高效。

dede的datalist
(图片来源网络,侵删)

datalist 的基本语法

datalist 标签通常由两部分组成:<dl> 标签和其内部的 <dd>

{dede:datalist sort='...'}
    <dd>
        <!-- 这里是循环输出的单条内容模板 -->
        <!-- 文章标题、缩略图、发布时间等 -->
    </dd>
{/dede:datalist}
  • {dede:datalist ...}: 这是循环的开始标签,可以包含多个属性来控制数据查询。
  • <dd>: 这是循环体内的标签,每循环一次,就会输出一个 <dd> 及其内部的内容,你可以使用其他标签(如 arclist 的子标签)来获取当前条目的具体信息。
  • {/dede:datalist}: 这是循环的结束标签。

datalist 的常用属性

datalist 的强大之处在于其丰富的属性,可以精确地控制要获取哪些数据、如何排序、分页等。

属性名 含义 示例值 说明
typeid 栏目ID 1, 1,2,3 核心属性,指定要获取哪个或哪些栏目下的内容,不填则获取所有栏目的内容。
row 获取记录数 10, 20 每页显示多少条数据,通常与分页标签配合使用。
infolen 摘要长度 120, 200 截取文章摘要(description)的字符长度。
orderby 排序方式 pubdate (默认), hot, click, id 按什么字段排序。pubdate (发布时间), hot (浏览量), click (点击率), id (文章ID), sortrank (自定义排序)
orderway 排序方向 desc (默认), asc desc (降序,从大到小/新到旧), asc (升序,从小到大/旧到新)
channelid 模型ID 1 (文章), -1 (所有模型) 指定要获取的内容模型。1 是普通文章模型,-1 表示获取所有模型的数据。
limit 起始位置与记录数 0,10, 10,20 用于分页,格式为 起始条数,显示条数{dede:page/} 标签会自动计算这个值。
flag 特定属性 h, c, p 筛选具有特定属性的内容。h (头条), c (推荐), p (图片), s (滚动) 等,可组合如 hc
subday 天数筛选 7, 30 只获取最近 N 天内发布的内容。
keyword 关键词筛选 织梦,DedeCMS 或关键词包含指定文字的内容。

datalist 的常用子标签(在 <dd> 内部使用)

<dd> 标签内部,你可以使用 DedeCMS 的各种字段标签来获取当前循环条目的具体信息。

子标签 含义 示例
[field:title/] <a href="[field:arcurl/]">[field:title/]</a>
[field:description/] 文章摘要 [field:description function='cn_substr(@me, 100)'/]
[field:pubdate function='MyDate('Y-m-d', @me)'/] 发布时间 MyDate 是自定义函数,格式化日期。
[field:click/] 点击次数 <span>点击: [field:click/]</span>
[field:litpic/] 缩略图地址 <img src="[field:litpic/]" alt="[field:title/]">
[field:arcurl/] 文章链接 这是获取文章详情页地址最重要的标签。
[field:id/] 文章ID [field:id/]
[field:typeid/] 所属栏目ID [field:typeid/]
[field:typename/] 所属栏目名称 [field:typename/]
[field:typelink/] 所属栏目链接 <a href="[field:typelink/]">[field:typename/]</a>

实战示例

示例1:调用文章列表(最常用)

假设我们要在首页调用 ID 为 1 的栏目下的最新 10 篇文章。

模板代码 (index.htm):

dede的datalist
(图片来源网络,侵删)
<h2>最新文章</h2>
<ul>
    {dede:datalist typeid='1' row='10' orderby='pubdate' orderway='desc'}
        <li>
            <span class="date">[field:pubdate function='MyDate('m-d', @me)'/]</span>
            <a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
        </li>
    {/dede:datalist}
</ul>

说明:

  • typeid='1': 只调用栏目ID为1的文章。
  • row='10': 每页显示10条。
  • orderby='pubdate' orderway='desc': 按发布时间降序排列(最新的在前)。

示例2:带缩略图和摘要的文章列表

<div class="article-list">
    {dede:datalist typeid='2' row='6' titlelen='40' infolen='120'}
        <dd class="article-item">
            <div class="thumb">
                <a href="[field:arcurl/]">
                    <img src="[field:litpic/]" alt="[field:title/]">
                </a>
            </div>
            <div class="info">
                <h3><a href="[field:arcurl/]">[field:title/]</a></h3>
                <p class="desc">[field:description/]</p>
                <p class="meta">
                    <span>[field:pubdate function='MyDate('Y-m-d', @me)'/]</span>
                    <span>阅读: [field:click/]</span>
                </p>
            </div>
        </dd>
    {/dede:datalist}
</div>

示例3:结合分页标签 {dede:page/}

datalist 本身只负责输出列表数据,分页功能需要由分页标签 {dede:page/} 来实现。

模板代码:

<!-- 列表内容区域 -->
{dede:datalist typeid='1' row='10'}
    <dd>
        <a href="[field:arcurl/]">[field:title/]</a>
        <span>[field:pubdate function='MyDate('Y-m-d', @me)'/]</span>
    </dd>
{/dede:datalist}
<!-- 分页区域 -->
<div class="dede_pages">
    <ul class="pagelist">
        {dede:page/}
    </ul>
</div>

说明:

  • {dede:datalist}{dede:page/} 同时存在时,DedeCMS 会自动处理分页逻辑。
  • datalistlimit 属性会被 {dede:page/} 自动填充,你无需手动设置。
  • 你需要确保在后台的“频道模型” -> “内容分页选项”中,为该栏目设置了“列表每页显示条数”,否则分页可能不生效。

datalistarclist 的区别

很多新手会混淆 datalistarclist,它们都是列表标签,但有重要区别:

特性 arclist (文章列表) datalist (数据列表)
主要用途 调用文章模型 调用任意模型,包括自定义模型。
灵活性 较为固定,专为文章优化。 非常灵活,可以配合 SQL 查询,功能更强大。
性能 性能较好,有专门的缓存机制。 如果使用 sql 属性,性能取决于 SQL 查询效率。
常用场景 首页、栏目页调用普通文章列表。 调用产品、软件下载、图集等自定义模型列表;或需要复杂筛选时。

datalistsql 属性(高级用法)

datalist 最强大的地方在于它可以通过 sql 属性直接执行自定义的 SQL 语句。

{dede:datalist sql='SELECT * FROM dede_archives WHERE typeid=3 ORDER BY pubdate DESC LIMIT 0, 5'}
    <dd>
        <a href="/plus/view.php?aid=[field:id/]">[field:title/]</a>
    </dd>
{/dede:datalist}

注意:

  • 使用 sql 属性时,typeidrow 等其他属性可能会失效。
  • 表前缀(如 dede_)需要根据你的实际安装情况修改。
  • 直接写 SQL 有一定的安全风险,请确保输入经过过滤。

  • datalist 是 DedeCMS 的万能列表标签,用于循环输出数据。
  • 通过 typeid, row, orderby 等属性可以轻松控制数据源和显示方式。
  • <dd> 内部使用 [field:xxx/] 子标签来获取单条数据的各个字段。
  • 它与 {dede:page/} 标签配合使用可以实现分页功能。
  • 相比 arclistdatalist 更通用,特别是对于调用自定义模型的数据或进行复杂查询时,优势明显。

掌握 datalist 标签是进行 DedeCMS 模板开发的基础和关键一步。

-- 展开阅读全文 --
头像
织梦上传本地图片,如何实现?
« 上一篇 今天
dede datalist
下一篇 » 今天

相关文章

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