# 折扣

> 用 discount_applications 与 line_item 对象在 Shoplazza 主题中展示折扣，覆盖购物车、结账与订单级折扣。

折扣可以在行项目级别，或购物车、结账或订单级别应用。这意味着折扣可以直接作用于特定行项目，也可以作用于整个购物车或订单。

本教程将介绍如何在 theme 中展示折扣。

## 前提条件

您已创建 [cart template](../../architecture/templates/cart) 或 [order](/docs/theme/references/liquid/objects/order) template。

## 资源

要在 theme 中展示折扣，您需要使用以下资源：

* [discount\_applications object](./discounts#discount_applications-object)
* [line\_item object](./discounts#line_item-object)
* [spz-cart 组件](https://lessjs.shoplazza.com/latest/components/spz-cart/)

### `discount_applications` object

[discount\_application object](/docs/theme/references/liquid/objects/discount_application) 在购物车、结账或订单级别注册折扣。根据您实现折扣展示的位置，可通过相关父 object 访问折扣应用信息：

* 对于 [cart](../../architecture/templates/cart) template
  * [cart.discount\_applications](/docs/theme/references/liquid/objects/cart)
* 对于 [order](/docs/theme/references/liquid/objects/order) template
  * [order.order\_info.discount\_applications](/docs/theme/references/liquid/objects/order_info)

### `line_item` object

要完成价格展示，您需要使用 [line\_item](/docs/theme/references/liquid/objects/line_item) object 中的价格和折扣属性，包括：

* [original\_line\_price](/docs/theme/references/liquid/objects/line_item)
* [final\_price](/docs/theme/references/liquid/objects/line_item)
* [final\_line\_price](/docs/theme/references/liquid/objects/line_item)

## 实现折扣展示

由于折扣可以作用于行项目或整个购物车/订单，您应在两个地方展示折扣信息：

* [与各行项目一起展示](./discounts#行项目折扣)
* [与合计摘要一起展示](./discounts#购物车折扣)

本教程中的示例使用 [cart template](../../architecture/templates/cart#使用说明)。

## 行项目折扣

如果折扣作用于特定行项目，则应与这些项目一起展示。要与行项目一起展示折扣，需要在展示中包含以下内容：

* [行项目价格](./discounts#行项目价格)
* [行项目折扣](./discounts#行项目折扣-1)

### 行项目价格

如果行项目已应用折扣，应显示折后新价格。可以通过 Liquid [line\_item object](/docs/theme/references/liquid/objects/line_item) 的以下属性访问：

* [final\_price](/docs/theme/references/liquid/objects/line_item)
* [final\_line\_price](/docs/theme/references/liquid/objects/line_item)

### 行项目折扣

如果行项目已应用折扣，应显示每个已应用的折扣及其关联的折扣金额或折扣图标。

```liquid title="示例"
<spz-cart layout="container">
  <template>
    <div>
      <div spz-for="line_item in data.line_items">
        <div spz-for="discount_application in line_item.discount_applications">
          <div>
            <spz-img
              spz-if="${!!discount_application.icon}"
              src="${discount_application.icon}"
              layout="fixed"
              width="16"
              height="16"
            ></spz-img>
            <span>${discount_application.title}</span>
          </div>
          <span spz-if="${discount_application.discount_amount > 0 || discount_application.amount > 0}">
            (-<spz-currency style="display: inline-block;" layout="container" value="${discount_application.discount_amount || discount_application.amount}"></spz-currency>)
          </span>
        </div>
      </div>
    </div>
  </template>
</spz-cart>
```

## 购物车折扣

行价格是行项目折扣应用后的行项目总价，总价是购物车折扣应用后的购物车总价。

```liquid title="示例"
<spz-cart layout="container">
  <template>
    <div>
      <div>行价格：<spz-currency layout="container" value="${data.line_price}" style="display: inline-block;"></spz-currency></div>

      <div spz-if="${data.total_discount > 0}">
        折扣：-<spz-currency layout="container" value="${data.total_discount}" style="display: inline-block;"></spz-currency>
      </div>

      <div>
        总计：<spz-currency layout="container" value="${data.total_price}" style="display: inline-block;"></spz-currency>
      </div>
    </div>
  </template>
</spz-cart>
```
