模型如何调用?

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

模型?

在 DedeCMS 中,内容模型 是定义不同类型内容“结构”的框架,默认情况下,DedeCMS 有一个“文章”模型,但你可以根据网站需求创建新的模型,

dede内容模型调用
(图片来源网络,侵删)
  • 产品模型:包含品牌、型号、价格、规格、产品图片集等字段。
  • 下载模型:包含软件大小、授权方式、运行环境、下载链接等字段。
  • 房产模型:包含价格、面积、户型、朝向、所在楼层等字段。
  • 招聘模型:包含薪资、工作地点、学历要求、工作经验等字段。

每个模型都由一组自定义字段 组成,调用内容模型,本质上就是调用这些模型及其字段的数据。


调用方法总览

模型的数据主要有以下几种方式,由简到繁:

  1. {dede:arclist}:主要用于调用文章模型的数据列表,最常用。
  2. {ded:list}:与 arclist 类似,用于调用文章列表,但通常与分页结合使用。
  3. {dede:sql}:最灵活、最强大的方法,可以直接写 SQL 语句查询任何模型的数据。
  4. {dede:loop}:用于循环执行任意代码,可以结合 sql 标签使用。
  5. {dede:field}:主要用于在内容详情页(如 article_article.htm)中调用当前文章的自定义字段。

详细调用方法与示例

使用 {dede:arclist} 标签(主要用于文章模型)

arclist 是调用文章列表的利器,虽然主要用于“文章”模型,但通过 channelid 属性也可以调用其他模型。

基本语法:

dede内容模型调用
(图片来源网络,侵删)
{dede:arclist typeid='' row='' titlelen='' orderby='' channelid=''}
    <a href='[field:arcurl/]'>[field:title/]</a>
    <p>[field:description function='cn_substr(@me,100)'/]...</p>
    <small>发布时间:[field:pubdate function='MyDate('Y-m-d',@me)'/]</small>
{/dede:arclist}

常用属性说明:

属性名 说明 示例
typeid 调用指定栏目ID下的文章,多个ID用逗号隔开。 typeid='5,6'
row 调用文章的数量。 row='10'
orderby 排序方式,常用值:pubdate(发布时间), click(点击量), id(文章ID), rand(随机)。 orderby='click'
channelid 关键属性! 指定要调用的模型ID,默认为1(文章模型)。 channelid='2' (假设产品模型的ID是2)
addfields 关键属性! 当调用非文章模型时,需要指定要调用的自定义字段名,多个字段用逗号隔开。 addfields='price,brand'
innertext 循环体内的模板代码,即每条记录的显示格式。 -

示例1:调用文章模型

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

示例2:调用“产品”模型(假设产品模型ID为2)

{dede:arclist channelid='2' typeid='10' row='4' addfields='price,brand' orderby='pubdate'}
    <div class="product-item">
        <a href="[field:arcurl/]">
            <img src="[field:litpic/]" alt="[field:title/]">
            <h3>[field:title/]</h3>
            <p>品牌:[field:brand/]</p>
            <p>价格:¥[field:price/]</p>
        </a>
    </div>
{/dede:arclist}

注意: 使用 addfields 后,在 innertext 中就可以直接通过 [field:字段名/] 来调用这些自定义字段了。

dede内容模型调用
(图片来源网络,侵删)

使用 {dede:sql} 标签(最灵活)

arclist 无法满足需求时(需要跨栏目、跨模型进行复杂查询),sql 标签是你的终极武器。

基本语法:

{dede:sql sql='SELECT 字段 FROM 表名 WHERE 条件'}
    [field:字段名/]
{/dede:sql}

核心难点: 你需要知道 DedeCMS 的表名和字段名。

常用数据表:

表名 说明
dede_archives 文章主表,存放所有文章的公共信息(标题、发布时间、点击量等)。
dede_addonarticle 文章附加表,存放文章模型的自定义字段(如作者、来源、内容等)。
dede_arctype 栏目表。
dede_channeltype 模型表,记录所有模型的信息。
dede_addonXX 关键! 其他模型的附加表,XX 是模型的ID,产品模型ID为2,则附加表名为 dede_addon2

示例1:查询并显示所有“产品”模型的数据(假设产品模型ID为2,附加表为dede_addon2

{dede:sql sql='SELECT a.id, a.title, a.litpic, b.price, b.brand FROM dede_archives as a LEFT JOIN dede_addon2 as b ON a.id = b.aid WHERE a.channel=2 ORDER BY a.pubdate DESC LIMIT 0, 5'}
    <div class="product">
        <a href="/plus/view.php?aid=[field:id/]">
            <img src="[field:litpic/]" alt="[field:title/]">
            <h3>[field:title/]</h3>
            <p>品牌:[field:brand/]</p>
            <p>价格:¥[field:price/]</p>
        </a>
    </div>
{/dede:sql}

SQL语句解析:

  • SELECT a.id, a.title, a.litpic, b.price, b.brand: 从主表a和附加表b中选取需要的字段。
  • FROM dede_archives as a LEFT JOIN dede_addon2 as b: 关联主表和产品模型的附加表。as aas b 是给表起别名,方便书写。
  • ON a.id = b.aid: 关联条件,主表的id等于附加表的aid
  • WHERE a.channel=2: 只查询模型ID为2(产品模型)的数据。
  • ORDER BY a.pubdate DESC LIMIT 0, 5: 按发布时间倒序排列,并只取前5条。

在详情页调用自定义字段

当用户点击文章进入详情页(如 article_article.htm)时,使用 {dede:field} 标签来显示当前文章的自定义字段。

基本语法:

{dede:field.字段名/}

示例: 假设你的“产品”模型有一个自定义字段 guige (规格),在详情页模板中这样调用:

<h1>[field:title/]</h1>
<img src="[field:litpic/]" alt="[field:title/]">
<p><strong>产品规格:</strong>{dede:field.guige/}</p>
<p><strong>产品价格:</strong>{dede:field.price/}</p>
<p>{dede:field.body/}</p> <!-- {dede:field.body/} 是调用文章内容 -->

总结与最佳实践

  1. 首选 arclist:如果只是调用单一模型的数据列表,优先使用 {dede:arclist},因为它性能最好,使用最简单,记得设置 channelidaddfields
  2. 复杂查询用 sql:当需要关联多张表、跨模型、跨栏目进行复杂的数据筛选和排序时,果断使用 {dede:sql},这需要你对 DedeCMS 的数据表结构有一定了解。
  3. 详情页用 field详情页,使用 {dede:field.字段名/} 来展示当前内容的特定字段。
  4. 善用调试:如果调用不出来数据,可以:
    • 检查模型ID和栏目ID是否正确。
    • 检查自定义字段名是否拼写正确。
    • 对于 sql 标签,可以先在数据库管理工具(如phpMyAdmin)里单独执行你的SQL语句,看是否能查出数据。
    • 检查模板标签是否被禁用(后台“系统” -> “系统基本参数” -> “性能选项”)。

希望这份详细的指南能帮助你完全掌握 DedeCMS 内容模型的调用!

-- 展开阅读全文 --
头像
strerror函数如何返回错误信息字符串?
« 上一篇 04-18
strcomp函数如何比较字符串?
下一篇 » 04-18

相关文章

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