织梦datalist标签如何调用自定义字段?

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

{dede:datalist} 标签是什么?

{dede:datalist} 是一个循环输出标签,它的作用类似于其他编程语言中的 for 循环,它会从数据库中查询出符合条件的一组数据,然后将这组数据中的每一条记录,按照 {dede:datalist} 标签内部定义的模板结构,循环渲染一遍,最终生成完整的HTML列表页面。

织梦 datalist 标签
(图片来源网络,侵删)

核心功能: 循环遍历数据集,并格式化输出。


基本语法结构

{dede:datalist} 的基本结构如下:

{dede:datalist}
    <!-- 这里是循环体内的模板代码,会被重复执行 -->
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
    </li>
{/dede:datalist}
  • {dede:datalist}:循环开始标签。
  • 循环体,这里可以包含HTML标签和其他织梦标签。
  • {/dede:datalist}:循环结束标签。

核心属性

{dede:datalist} 的行为主要由其属性控制,最常用和最重要的属性是 sql

sql 属性

sql 属性允许你直接编写SQL查询语句来获取数据,这给了你极大的灵活性,可以查询任意表和字段。

织梦 datalist 标签
(图片来源网络,侵删)

语法: sql="你的SQL查询语句"

示例1:查询文章列表

{dede:datalist sql="SELECT id, title, pubdate, arcurl FROM dede_archives WHERE channel=1 ORDER BY id DESC LIMIT 10"}
    <div class="post-item">
        <h2><a href="[field:arcurl/]">[field:title/]</a></h2>
        <p>发布时间:[field:pubdate function="MyDate('Y-m-d', @me)"/]</p>
    </div>
{/dede:datalist}

说明:

  • SELECT id, title, pubdate, arcurl FROM dede_archives:从 dede_archives (文章主表) 中查询 id, title, pubdate, arcurl 这四个字段。
  • WHERE channel=1:筛选条件,只查询内容模型ID为1的文章(文章模型”)。
  • ORDER BY id DESC:按文章ID降序排列,即最新的文章在前。
  • LIMIT 10:只获取最新的10条记录。

示例2:查询自定义模型数据 假设你有一个产品模型,其数据表为 dede_product

{dede:datalist sql="SELECT id, pname, price, brand FROM dede_product ORDER BY price ASC"}
    <div class="product">
        <h3>[field:pname/]</h3>
        <p>价格:¥[field:price/]</p>
        <p>品牌:[field:brand/]</p>
    </div>
{/dede:datalist}

内部字段调用 [field:字段名/]

{dede:datalist} 的循环体内,使用 [field:字段名/] 来输出当前循环到的那条记录的指定字段的值。

字段来源:

  1. sql 查询的字段:如上面的 [field:title/], [field:pubdate/]
  2. 系统关键字段:即使 sql 没有查询,一些关键字段也可以直接使用,
    • [field:id/]:记录的ID。
    • [field:arcurl/]:文章的链接(适用于文章模型)。
    • [field:fulltitle/]:文章完整标题(不带副标题)。
    • [field:typelink/]:栏目链接。

字段格式化:function 属性

[field:字段名/] 还可以通过 function 属性调用PHP函数来对输出值进行处理。

语法: [field:字段名 function="处理函数(@me)"/]

常用 function 示例:

  • 日期格式化

    [field:pubdate function="MyDate('Y-m-d H:i:s', @me)"/]

    pubdate (时间戳) 格式化为 年-月-日 时:分:秒

  • 截取字符串

    [field:description function="cn_substr(@me, 100)"/]

    截取 description ( 字符串的前100个字符。

  • 去除HTML标签

    [field:body function="htmlspecialchars(@me)"/]

    body (文章内容) 进行HTML实体转义,防止XSS攻击,或者使用 strip_tags() 函数去除所有HTML标签。

  • 自定义函数: 你可以在 /include/helpers/ 目录下创建自定义的PHP函数文件(如 extention.helper.php),然后在模板中调用。

    [field:title function="MyCustomFunction(@me)"/]

分页功能

{dede:datalist} 本身不直接处理分页,但它通常与分页标签 {dede:pagelist} 配合使用,实现分页的关键在于 sql 语句中必须包含 LIMIT 子句。

分页实现步骤:

  1. 在列表页模板文件中(如 list_article.htm,使用 {dede:datalist} 并在 sql 中使用 LIMIT
  2. {dede:datalist} 循环结束后,添加 {dede:pagelist}

示例模板 (list_article.htm):

<html>
<head>{dede:field.title/}</title>
</head>
<body>
    <h1>{dede:field.title/}</h1>
    <!-- 文章列表循环 -->
    <ul>
        {dede:datalist sql="SELECT id, title, pubdate, arcurl FROM dede_archives WHERE channel=1 ORDER BY id DESC LIMIT 0,10"}
            <li>
                <a href="[field:arcurl/]" target="_blank">[field:title/]</a>
                <span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
            </li>
        {/dede:datalist}
    </ul>
    <!-- 分页条 -->
    <div class="page-nav">
        {dede:pagelist listitem="info,index,end,pre,next,pageno" listsize="5"/}
    </div>
</body>
</html>

说明:

  • LIMIT 0,10:这里的 0 是起始位置,10 是每页显示的数量。
  • {dede:pagelist}:会自动解析URL中的 page 参数,并生成上一页、下一页、页码等链接。
  • listitem:用于控制显示哪些分页元素。
  • listsize:控制页码显示的数量。

{dede:list} 的区别

很多新手会混淆 {dede:datalist}{dede:list},这是一个非常重要的区别点:

特性 {dede:datalist} {dede:list}
数据来源 自定义 sql 语句,可查询任意表。 固定,查询 dede_archives 表,并根据栏目、频道等系统参数自动生成 WHERE 条件。
灵活性 极高,可以跨表查询,实现复杂的业务逻辑。 较低,主要用于标准的文章列表,灵活性受限于系统预设。
使用场景 自定义列表页、产品列表、下载列表、调用其他模型数据等。 标准的文章列表页,如首页、栏目页。
分页 需要手动在 sql 中写 LIMIT,并配合 {dede:pagelist} 自动处理分页,无需手动写 LIMIT
性能 sql 写得不好,性能可能较差。 性能较好,因为经过了系统优化。

简单总结:

  • 如果你的列表是标准文章,并且是按栏目分类的,直接用 {dede:list},最简单。
  • 如果你的列表需要自定义查询条件查询非文章模型、或者需要跨表关联数据,那么必须用 {dede:datalist}

完整示例:调用产品列表并分页

假设你有一个产品模型,数据表为 dede_product,包含 pid, pname, price, brand, pic 等字段。

  1. 创建一个模板文件 list_product.htm
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">产品列表 - {dede:field.seotitle/}</title>
    <link rel="stylesheet" href="/css/style.css">
</head>
<body>
    <div class="container">
        <h1>我们的产品</h1>
        <div class="product-list">
            {dede:datalist sql="SELECT pid, pname, price, brand, pic FROM dede_product ORDER BY pid DESC LIMIT 0,12"}
                <div class="product-item">
                    <img src="[field:pic/]" alt="[field:pname/]">
                    <h3>[field:pname/]</h3>
                    <p class="brand">品牌:[field:brand/]</p>
                    <p class="price">价格:<strong>¥[field:price/]</strong></p>
                    <a href="/product-detail.php?id=[field:pid/]" class="view-detail">查看详情</a>
                </div>
            {/dede:datalist}
        </div>
        <div class="pagination">
            {dede:pagelist listitem="info,index,end,pre,next" listsize="3"}
        </div>
    </div>
</body>
</html>
  1. 在后台创建一个自定义列表页
    • 进入后台 -> 核心 -> 频道模型 -> 自定义列表
    • 列表名称:填写一个名称,如“产品列表”。
    • 列表模板:选择你刚创建的 list_product.htm
    • 命名规则:可以自定义,如 product-{page}.html
    • 附加SQL条件:这里可以留空,因为条件已经写在模板的 sql 属性里了。
    • 保存后,系统会生成一个列表页链接,你就可以访问这个产品列表页了。

{dede:datalist} 是织梦CMS中一个功能极其强大的标签,它打破了 {dede:list} 的限制,让开发者可以自由地从数据库中获取和展示数据,掌握它的核心在于:

  1. 理解 sql 属性:如何编写高效的SQL查询语句。
  2. 掌握 [field:xx/]:如何在循环体内调用和格式化字段。
  3. 学会配合分页:如何与 {dede:pagelist} 协作实现数据分页。
  4. 区分 {dede:list}:知道在什么场景下使用哪个标签。

希望这份详细的解析能帮助你完全理解并熟练运用 {dede:datalist}

-- 展开阅读全文 --
头像
dede tags.php 模板
« 上一篇 2025-12-23
linux c语言 进程是否存在
下一篇 » 2025-12-23

相关文章

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