dede分类信息如何调用?

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

调用分类信息主要通过 DedeCMS 的 arclist 标签和 sql 标签来实现,下面我将分门别类地介绍各种常用的调用方法。

dede分类信息调用
(图片来源网络,侵删)

准备工作:确保模型和栏目正确设置

在调用之前,请确保你已经正确设置了分类信息:

  1. 模型管理

    • 进入 后台 -> 核心 -> 内容模型管理 -> 添加模型
    • 创建一个用于分类信息的模型,分类信息”,你可以添加自定义字段,如“联系人”、“电话”、“价格”、“地址”等。
  2. 栏目管理

    • 进入 后台 -> 栏目 -> 添加栏目
    • 选择你刚才创建的“分类信息”模型。
    • 关键步骤:在“栏目选项”中,务必勾选“使用栏目交叉功能”,这是调用子栏目的前提。
    • 创建多个子栏目,招聘信息”、“房屋租赁”、“二手交易”等,并将它们设置为顶级栏目“分类信息”的子栏目。

使用 arclist 标签调用

arclist 是最常用、最灵活的调用标签,适合调用单个子栏目或多个指定栏目的信息。

dede分类信息调用
(图片来源网络,侵删)

调用指定单个栏目的信息

这是最基础的用法,用于调用某一个特定栏目(如 ID 为 5 的“招聘信息”)的最新内容。

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

参数说明

  • typeid='5':指定要调用的栏目 ID,如果留空 typeid='',则默认调用当前栏目的内容,len='30'`:标题长度,截取 30 个字符。
  • row='10':获取文章的数量,这里是 10 条。
  • orderby='pubdate':排序方式,按发布时间排序,其他选项有 hot (浏览量)、click (点击量)、id (文章ID) 等。
  • orderway='desc':排序方式,desc 为降序(最新在前),asc 为升序。
  • [field:arcurl/]:文章的链接地址。
  • [field:title/]
  • [field:pubdate/]:发布日期,可以使用 function 进行格式化,如 MyDate('Y-m-d',@me)

调用多个指定栏目的信息

如果需要同时调用几个不同子栏目的信息,用逗号隔开栏目 ID 即可。

{dede:arclist typeid='5,6,7' titlelen='30' row='10'}
    <li>
        <span class="category">[field:typename/]</span>
        <a href="[field:arcurl/]">[field:title/]</a>
    </li>
{/dede:arclist}
  • typeid='5,6,7':同时调用 ID 为 5、6、7 的三个栏目的信息。
  • [field:typename/]:显示文章所属的栏目名称。

调用顶级栏目及其所有子栏目的信息

这是非常常见的需求,例如调用“分类信息”这个顶级栏目下的所有内容(包括其所有子栏目)。

dede分类信息调用
(图片来源网络,侵删)

使用 topidtypeid 组合

{dede:arclist typeid='5' topid='5' row='10'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
    </li>
{/dede:arclist}
  • typeid='5':指定顶级栏目 ID。
  • topid='5':表示调用顶级栏目为 ID 5 的所有子栏目的内容,这个组合是实现此功能的关键。

使用 channel 标签获取顶级栏目 ID,再嵌套 arclist

更灵活的方式是先获取顶级栏目 ID,再进行调用。

{dede:channel type='top' typeid='5'}
    {dede:arclist typeid='[field:id/]' topid='[field/id/]' row='10'}
        <li>
            <a href="[field:arcurl/]">[field:title/]</a>
        </li>
    {/dede:arclist}
{/dede:channel}

这种方法在模板结构上更清晰,适合复杂的调用场景。


使用 sql 标签调用

arclist 标签无法满足复杂的查询需求时(需要根据自定义字段进行筛选),sql 标签是更强大的选择。

调用指定分类信息表的数据

DedeCMS 的分类信息通常存储在 dede_addonarticle 表中(如果你的模型名称是“分类信息”),你需要通过 JOIN 关联主表 dede_archives 来获取标题、链接等信息。

示例:调用顶级栏目 ID 为 5 的所有招聘信息,并按自定义字段“price”排序

{dede:sql sql="
    SELECT a.id, a.title, a.pubdate, t.body, t.price
    FROM dede_archives AS a
    JOIN dede_addonarticle AS t ON a.id = t.aid
    WHERE a.typeid IN (
        SELECT id FROM dede_arctype WHERE topid = 5
    )
    ORDER BY t.price DESC
    LIMIT 0, 10
"}
    <li>
        <a href="[field:arcurl function='str_replace("~","",$cfg_cmspath)"/]/plus/view.php?aid=[field:id/]">[field:title/]</a>
        <span>价格:[field:price/] 元</span>
    </li>
{/dede:sql}

代码解析

  • sql="...":这里是完整的 SQL 查询语句。
  • SELECT ... FROM dede_archives AS a JOIN dede_addonarticle AS t ON a.id = t.aid:关联主表和附加表,以获取标题和自定义字段。
  • WHERE a.typeid IN (SELECT id FROM dede_arctype WHERE topid = 5):这个子查询用于找到顶级栏目 ID 为 5 的所有子栏目的 ID,IN 关键字确保只查询这些子栏目下的文章。
  • ORDER BY t.price DESC:按附加表中的 price 字段降序排列。
  • LIMIT 0, 10:限制返回 10 条记录。
  • [field:arcurl function='str_replace("~","",$cfg_cmspath)"/]/plus/view.php?aid=[field:id/]:由于 sql 标签默认不生成文章链接,我们需要手动构造。[field:id/] 是文章 ID,plus/view.php?aid= 是 DedeCMS 默认的文章查看链接。
  • [field:price/]:直接调用附加表中的 price 字段值。

调用自定义字段

无论使用 arclist 还是 sql,调用自定义字段的方法都是一样的。

假设你在“分类信息”模型中添加了一个名为 contact (联系人) 的自定义字段。

arclist 中调用

arclist 默认不调用附加表字段,需要使用 array 属性来指定。

{dede:arclist typeid='5' row='5' addfields='contact,phone'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <p>联系人:[field:contact/]</p>
        <p>电话:[field:phone/]</p>
    </li>
{/dede:arclist}
  • addfields='contact,phone':指定需要调用的附加表字段名,多个用逗号隔开。

sql 中调用

如上面的 SQL 示例所示,直接在 SELECT 语句中写出字段名即可,如 t.contact, t.phone


总结与最佳实践

调用需求 推荐标签 示例代码片段
调用单个栏目 arclist {dede:arclist typeid='5' row='10'}...
调用多个指定栏目 arclist {dede:arclist typeid='5,6,7' row='10'}...
调用顶级栏目及其所有子栏目 arclist (推荐) {dede:arclist typeid='5' topid='5' row='10'}...
根据自定义字段排序或筛选 sql {dede:sql sql="SELECT ... WHERE t.price > 100 ..."}...
调用自定义字段 arclist / sql arclistaddfieldssql 直接在 SELECT 中写字段名。

建议

  • 优先使用 arclist:它的性能较好,且模板标签简洁,能满足大部分调用需求。
  • 谨慎使用 sql:虽然 sql 功能强大,但直接写 SQL 语句有安全风险(注意 SQL 注入),并且当网站数据量大时,复杂的 SQL 查询可能会影响页面加载速度,仅在 arclist 无法满足需求时使用。
  • 善用缓存:DedeCMS 有自己的缓存机制,对于不常更新的调用内容(如首页推荐信息),可以在后台开启“仅动态浏览”或使用缓存标签,以提升网站性能。

希望这份详细的教程能帮助你熟练掌握 DedeCMS 分类信息的调用!

-- 展开阅读全文 --
头像
C语言aliasing规则到底是什么?
« 上一篇 04-22
dede调用更新时间,如何正确显示?
下一篇 » 04-22

相关文章

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

目录[+]