dede价格区间调用

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

使用Dede自带的 arclist 标签(推荐,最简单)

这是最直接、最简单的方法,特别适合在列表页调用,它通过两次 arclist 标签分别获取最低价和最高价。

dede价格区间调用
(图片来源网络,侵删)

核心思路:

  1. 使用一个 arclist 标签,配合 orderby='price'orderway='asc'(升序),取第一条记录的价格,即为最低价。
  2. 再使用一个 arclist 标签,配合 orderby='price'orderway='desc'(降序),取第一条记录的价格,即为最高价。

代码示例:

将以下代码放在你需要显示价格区间的模板文件中(list_article.htm)。

<p>
    价格区间:
    <!-- 获取最低价 -->
    <strong>
        [field:array name='min_price']
            [field:price/]
        [/field:array]
    </strong>
    元 至 
    <!-- 获取最高价 -->
    <strong>
        [field:array name='max_price']
            [field:price/]
        [/field:array]
    </strong>
    元
</p>

代码解释:

dede价格区间调用
(图片来源网络,侵删)
  • [field:array name='min_price']...[/field:array][field:array name='max_price']...[/field:array]arclist 标签的特殊用法,用于获取指定条件的单条数据。
  • orderby='price' 表示按 price 字段排序。
  • orderway='asc' 表示升序排序(从小到大),第一条就是最低价。
  • orderway='desc' 表示降序排序(从大到小),第一条就是最高价。
  • [field:price/] 用于输出获取到的价格值。

优点:

  • 简单直接,无需修改任何PHP文件。
  • 效率较高,Dede对 arclist 标签做了很好的优化。

缺点:

  • 如果该分类下没有商品,可能会显示错误或空白。

使用自定义函数(更灵活,推荐用于复杂逻辑)

如果你的需求更复杂,或者想在其他地方调用,创建一个自定义函数是更好的选择。

核心思路:

dede价格区间调用
(图片来源网络,侵删)
  1. include/extend.func.php 文件中添加一个PHP函数,用于查询指定栏目下的最低价和最高价。
  2. 在模板中调用这个自定义函数。

第一步:添加自定义函数

打开 include/extend.func.php 文件,在文件末尾添加以下PHP代码:

/**
 * 获取指定栏目ID下的商品价格区间
 * @param int $typeid 栏目ID
 * @return string 返回格式为 "最低价-最高价" 的字符串,如果无数据则返回 "暂无"
 */
function GetPriceRange($typeid = 0) {
    if (empty($typeid)) {
        return '暂无';
    }
    global $dsql;
    // 构建SQL查询,获取最低价和最高价
    $query = "SELECT MIN(price) AS min_price, MAX(price) AS max_price FROM `#@__arctiny` a 
              LEFT JOIN `#@__addonshop` s ON a.id = aid 
              WHERE a.typeid = $typeid AND a.arcrank > -1";
    $row = $dsql->GetOne($query);
    if (empty($row['min_price'])) {
        return '暂无';
    }
    return $row['min_price'] . '-' . $row['max_price'];
}

代码解释:

  • GetPriceRange($typeid) 函数接收一个栏目ID作为参数。
  • 使用 MIN(price)MAX(price) 聚合函数一次性查询出最低价和最高价,效率比方法一更高。
  • #@__arctiny 是Dede的文章(商品)主表,#@__addonshop 是Dede商城的附加表,price 字段通常在附加表中。
  • a.typeid = $typeid 用于限定查询的栏目。
  • a.arcrank > -1 用于过滤掉被删除或审核未通过的文章。

第二步:在模板中调用

在模板文件中,使用 {dede:} 标签来调用这个函数。

<p>
    价格区间:
    <strong>
        {dede:getprice range='min' typeid='栏目ID'/}
    </strong>
    元 至 
    <strong>
        {dede:getprice range='max' typeid='栏目ID'/}
    </strong>
    元
</p>

或者,如果你想让函数直接返回区间字符串(推荐):

修改你的函数,让它直接返回区间字符串,然后在模板中直接调用。

修改后的函数:

function GetPriceRange($typeid = 0) {
    // ... (函数内部代码同上)
    return $row['min_price'] . '-' . $row['max_price'];
}

模板调用方式:

<p>
    价格区间:
    <strong>
        {dede:global.name function='GetPriceRange(@me)'/}
    </strong>
    元
</p>
  • 这种方式更简洁,但需要确保 typeid 能正确传递,通常在列表页,@me 可以代表当前栏目ID,或者使用 {dede:field name='typeid'/} 来获取。

修改 arclist 标签源码(不推荐,仅作了解)

这种方法功能最强大,可以让你直接使用 [field:minprice/][field:maxprice/],但需要修改Dede核心文件,升级时可能会被覆盖,不推荐新手使用。

核心思路: 修改 include/taglib/arclist.lib.php 文件,在查询数据时,增加一个子查询来获取当前栏目下的价格区间,并将结果附加到每条记录中。

操作步骤(简述):

  1. 打开 include/taglib/arclist.lib.php
  2. 找到生成 $query 的SQL语句。
  3. 修改这个SQL,使用 JOIN 和一个子查询来为每条记录附加 min_pricemax_price 字段。
  4. 在模板中就可以直接使用 [field:minprice/][field:maxprice/]

由于此方法涉及修改核心文件,且代码逻辑较为复杂,容易出错,因此强烈建议优先使用方法一方法二


总结与建议

方法 优点 缺点 适用场景
arclist 简单、无需修改文件、效率高 需要写两个标签,无商品时可能空白 绝大多数情况下的首选,特别是列表页。
自定义函数 灵活、效率高(一次查询)、可复用 需要修改 extend.func.php 文件 需要在多处调用,或逻辑较复杂时。
修改源码 功能强大,标签简洁 危险(覆盖核心文件)、升级麻烦、不易维护 不推荐,除非你有特殊需求且非常熟悉Dede。

给你的最终建议:

  • 如果你只是想在商品列表页显示价格区间,直接使用方法一,它最简单也最可靠。
  • 如果你想在多个页面(如首页、栏目页)都使用这个功能,或者想对价格进行更复杂的处理(如格式化),那么使用方法二创建自定义函数是最佳选择。
-- 展开阅读全文 --
头像
C语言trigraph是什么?
« 上一篇 04-16
sizeof在C语言中到底如何计算变量大小?
下一篇 » 04-16

相关文章

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

目录[+]