织梦如何调用数据库字段?

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

下面我将从基础到高级,详细讲解如何调用数据库字段,并提供清晰的示例。

织梦调用数据库字段
(图片来源网络,侵删)

核心标签:{dede:field}{dede:global}

在织梦模板中,调用字段主要使用两个核心的底层模板标签:

  1. {dede:field}:用于调用(文章、栏目、图集等)的字段。
  2. {dede:global}:用于调用全局变量,通常是系统配置或当前环境信息。

调用当前文章的字段

这是最常见的情况,比如在文章详情页 article_article.htm 中。

调用文章自带字段

织梦文章模型有很多默认字段,如标题、内容、发布时间、作者等,调用它们非常简单。

常用字段列表:

织梦调用数据库字段
(图片来源网络,侵删)

| 字段名 | 说明 | 调用示例 | | :--- | :--- | :--- | | 文章标题 | {dede:field.title/} | | body | 文章正文内容 | {dede:field.body/} | | description | 如果填写了) | {dede:field.description function='htmlspecialchars(@me)'/} | | pubdate | 发布时间(时间戳格式) | {dede:field.pubdate function='MyDate('Y-m-d H:i:s', @me)'/} | | senddate | 入库时间(时间戳格式) | {dede:field.senddate function='MyDate('Y-m-d', @me)'/} | | writer | 作者 | {dede:field.writer/} | | source | 来源 | {dede:field.source/} | | click | 点击量 | {dede:field.click/} | | typeid | 栏目ID | {dede:field.typeid/} | | arcrank | 文章状态(-1为待审核,0为正常) | {dede:field.arcrank/} |

示例代码(在文章详情页 article_article.htm 中):

<h1>{dede:field.title/}</h1>
<div class="info">
    <span>作者:{dede:field.writer/}</span> |
    <span>来源:{dede:field.source/}</span> |
    <span>发布时间:{dede:field.pubdate function='MyDate('Y-m-d H:i:s', @me)'/}</span> |
    <span>点击:{dede:field.click/}</span>
</div>
<div class="content">
    {dede:field.body/}
</div>

function 函数: function 用于对获取到的字段值进行二次处理,

  • MyDate('格式', @me):将时间戳格式化为指定格式。
  • htmlspecialchars(@me):将HTML实体转义,防止XSS攻击,常用于调用摘要。
  • cn_substr(@me, 100):截取字符串前100个字符。

调用当前栏目的字段

在栏目列表页 category_list.htm 或文章列表页 list_article.htm 中,需要调用当前栏目的信息。

织梦调用数据库字段
(图片来源网络,侵删)

调用栏目自带字段

常用字段列表:

字段名 说明 调用示例
typename 栏目名称 {dede:field.typename/}
description 栏目描述 {dede:field.description/}
seo_title 栏目SEO标题 {dede:field.seotitle/}
keywords 栏目关键词 {dede:field.keywords/}
id 栏目ID {dede:field.id/}

示例代码(在列表页 list_article.htm 中):

<h1>{dede:field.typename/}</h1>
<div class="description">{dede:field.description/}</div>
{dede:list pagesize='10'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <span>[field:pubdate function="MyDate('Y-m-d', @me)"]</span>
    </li>
{/dede:list}
{dede:pagelist listsize='5'/}

高级调用:使用SQL查询任意数据

当默认字段无法满足需求时,比如需要调用某个特定文章的字段,或者调用自定义模型的数据,就需要使用 dede:sql

{dede:sql} 标签格式: {dede:sql sql='你的SQL语句'} [field:字段名/] {/dede:sql}

调用指定文章的字段

场景: 在首页或某个栏目页,想调用ID为 10 的文章的标题和摘要。

SQL语句: SELECT title, description FROM dede_archives WHERE id = 10

模板代码:

{dede:sql sql='SELECT title, description FROM dede_archives WHERE id = 10'}
    <h3><a href="[field:arcurl/]">[field:title/]</a></h3>
    <p>[field:description function='cn_substr(@me, 100)']...</p>
{/dede:sql}

注意:

  • dede_archives 是文章主表,存放标题、发布时间等基本信息。
  • dede_addonarticle 是文章附加表,存放正文内容。
  • [field:arcurl/] 是一个特殊变量,织梦会自动根据文章ID生成其URL,非常方便。

调用自定义模型/附加表字段

场景: 你创建了一个“产品”自定义模型,其数据在 dede_addonproduct 附加表中,有一个名为 price 的价格字段,现在想在首页调用最新5个产品的名称和价格。

步骤:

  1. 确定自定义模型的ID(比如是 1)。
  2. 确定附加表的表名(dede_addonproduct)和字段名(price)。
  3. 编写SQL语句,关联主表和附加表。

SQL语句:

SELECT a.title, p.price
FROM dede_archives AS a
LEFT JOIN dede_addonproduct AS p ON a.id = p.aid
WHERE a.arctypeid = 1 -- 这里用模型的ID或对应的栏目ID
ORDER BY a.pubdate DESC
LIMIT 5

模板代码:

{dede:sql sql='SELECT a.title, p.price FROM dede_archives AS a LEFT JOIN dede_addonproduct AS p ON a.id = p.aid WHERE a.arctypeid = 1 ORDER BY a.pubdate DESC LIMIT 5'}
    <div class="product">
        <h4>[field:title/]</h4>
        <p>价格:¥[field:price/] 元</p>
    </div>
{/dede:sql}

调用系统全局变量

{dede:global} 用于调用系统配置信息,通常放在模板的 <head> 头部。

常用全局变量:

变量名 说明 调用示例
cfg_webname 网站名称 <title>{dede:global.cfg_webname/}</title>
cfg_weburl 网站根URL <link rel="canonical" href="{dede:global.cfg_weburl/}" />
cfg_keywords 网站默认关键词 <meta name="keywords" content="{dede:global.cfg_keywords/}" />
cfg_description 网站默认描述 <meta name="description" content="{dede:global.cfg_description/}" />
templeturl 当前模板目录 <link rel="stylesheet" href="{dede:global.templeturl/}/css/style.css" />

示例代码(在 head.htm 公共头部文件中):

<head>
    <meta charset="UTF-8">{dede:field.title/}_{dede:global.cfg_webname/}</title>
    <meta name="keywords" content="{dede:field.keywords/},{dede:global.cfg_keywords/}" />
    <meta name="description" content="{dede:field.description/},{dede:global.cfg_description/}" />
    <link rel="stylesheet" href="{dede:global.templeturl/}/css/bootstrap.min.css">
</head>

总结与最佳实践

  1. 优先使用底层标签:对于调用当前内容或栏目,直接使用 {dede:field} 是最简单、最高效的方式。
  2. SQL查询要谨慎{dede:sql} 功能强大,但频繁复杂的SQL查询会增加数据库负担,影响网站性能,尽量使用缓存或减少不必要的SQL调用。
  3. 注意字段前缀:如果自定义模型附加表的字段名与主表或其他表冲突,SQL查询时最好使用 AS 给字段起别名,如 SELECT a.title, p.price AS product_price
  4. 善用函数function 是处理字段值的利器,特别是日期格式化、字符串截取和HTML转义,能让你更灵活地控制输出格式。
  5. 安全第一:在调用用户提交或不确定的数据时(如评论内容),务必使用 htmlspecialchars 函数进行转义,防止XSS攻击。

掌握了以上方法,你就可以在织梦CMS中自如地调用任何你需要的数据库字段了。

-- 展开阅读全文 --
头像
织梦生成文档为何没反应?
« 上一篇 04-19
织梦管理员之家双语,为何要双语?
下一篇 » 04-19

相关文章

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