> ## Knowledge Base Index
> Fetch the complete knowledge base index at: https://help.customeow.io/sitemap.xml
> Use this file to discover available pages before exploring further.
> Pure-Markdown content can be obtained by appending a '.md' suffix to the content URLs listed in the sitemap (without the trailing slash).

# 关于加价产品和追销产品以及其在购物车绑定方法

## 大白话修改方法：

加车时，主商品和关联商品会带隐藏属性，用来表示绑定关系。

**主商品会带：**

```text
_scm_bind = 唯一绑定 ID
```

**addPrice 加价购商品会带：**

```text
_scm_bind_to = 主商品的 _scm_bind
_scm_inject_type = addPrice
```

**upsell 追销商品会带：**

```text
_scm_bind_to = 主商品的 _scm_bind
_scm_inject_type = upsell
```

> 请不要通过商品标题、SKU、handle、商品 ID 写死判断 `addPrice` 或 `upsell`，必须通过这些隐藏属性判断。

## 需要实现：

### 1. 读取购物车商品属性

在购物车行项目里解析商品属性/properties/line item properties，读取：

- `_scm_bind`
- `_scm_bind_to`
- `_scm_inject_type`
- `_scm_bind_qty`
- `_scm_bind_delete`

### 2. 建立绑定关系：

- 主商品：有 `_scm_bind`
- 关联商品：有 `_scm_bind_to`
- 当关联商品的 `_scm_bind_to` 等于主商品的 `_scm_bind` 时，认为两者绑定

### 3. addPrice 商品规则：

`_scm_inject_type = addPrice`

**需要做到：**

- 不允许单独删除
- 不允许手动修改数量
- 数量必须跟随主商品
- 主商品删除时，绑定的 `addPrice` 也要删除
- `addPrice` 显示价格 = `addPrice` 单价 × 当前数量

> 注意：不要完全依赖购物车接口返回的 `line_price`，因为有些平台/主题里 `line_price` 会比 `quantity` 慢一拍。`addPrice` 的展示价格应优先用单价乘数量计算。

### 4. upsell 商品规则：

`_scm_inject_type = upsell`

**默认：**

- 可以识别为关联商品
- 不强制数量跟随主商品
- 通常允许单独删除

### 5. 如果存在规则字段，则按规则字段优先：

#### 数量规则：

`_scm_bind_qty`

| 值 | 含义 |
| ---- | ---- |
| `1 / allow` | 允许单独改数量 |
| `2 / not_allow` | 不允许改数量 |
| `3 / follow` | 跟随主商品数量 |

#### 删除规则：

`_scm_bind_delete`

| 值 | 含义 |
| ---- | ---- |
| `1 / allow` | 允许单独删除 |
| `2 / not_allow` | 不允许单独删除 |

### 6. 购物车交互要求：

#### 当主商品数量变化时：

1. 找到所有 `_scm_bind_to = 主商品 _scm_bind` 的 `addPrice`
2. 把 `addPrice` 数量同步成主商品数量
3. 同步后刷新购物车 UI / 小计 / 总价

#### 当主商品删除时：

1. 找到所有 `_scm_bind_to = 主商品 _scm_bind` 的 `addPrice`
2. 一起删除这些 `addPrice`
3. 删除后刷新购物车 UI / 小计 / 总价

### 7. UI 要求：

#### addPrice 商品：

- 隐藏删除按钮
- 隐藏数量加减按钮
- 只显示当前数量
- 价格显示为 单价 × 当前数量

#### upsell 商品：

- 不要误套 `addPrice` 的强绑定逻辑
- 除非 `_scm_bind_qty` / `_scm_bind_delete` 明确要求

### 8. 兼容性要求：

不同平台字段名称可能不同，例如：

- `properties`
- `line_item.properties`
- `item.properties`
- `attributes`
- `lineItemProperties`

请写一个通用读取函数，能从对象、JSON 字符串、数组属性里读取 `_scm_*` 字段。

### 9. 不要做的事：

- 不要写死具体商品 ID
- 不要写死具体 SKU
- 不要写死商品标题
- 不要只靠 URL handle 判断
- 不要只隐藏按钮但不处理接口同步
- 不要只改数量不改价格显示
- 不要只改前端显示，不处理主商品删除后的 `addPrice` 残留

## 最终目标：

- 用户只能操作主商品。
- `addPrice` 自动跟随主商品数量和删除状态。
- `upsell` 可识别但不被误强制绑定。
- 新增 `addPrice` / `upsell` 商品时，只要加车属性带对，不需要再改主题代码。

## 给开发看的极简版

一句话就是：

> 请在购物车里按 `_scm_bind` / `_scm_bind_to` / `_scm_inject_type` 实现关联商品绑定。`addPrice` 必须跟随主商品数

> 本指南只实现功能逻辑，并不涉及UI样式等。


## 拓展阅读

### 新手入门

- [连接店铺](https://help.customeow.io/zh/article/6le5o6l5bqx6zo6-1hgumgi/)
- [新手向：跟着教程创建你的第一个定制功能](https://help.customeow.io/zh/article/5paw5oml5zcr77ya6lef552a5pwz56il5yib5bu65l2g55qe56ys5lia5liq5a6a5yi25yqf6io9-1mdw4s4/)
- [如何让「定制功能」集成到产品落地页？（产品详情页）](https://help.customeow.io/zh/article/5aac5l2v6k6p44cm5a6a5yi25yqf6io944cn6zug5oiq5yiw5lqn5zob6jc95zyw6ag177yf77yi5lqn5zob6km5oof6ag177yj-2ivrml/)

### 进阶功能

- [定制喵中的「模板」](https://help.customeow.io/zh/article/5a6a5yi25za15lit55qe44cm5qih5p244cn-1fy2no5/)
- [使用组件的条件判断实现组件的显示隐藏控制](https://help.customeow.io/zh/article/5l255so57ue5lu255qe5p2h5lu25yik5pat5a6e546w57ue5lu255qe5pi56s66zqq6jep5o6n5yi2-1dxls92/)
- [工作流-WorkFlow能干什么](https://help.customeow.io/zh/article/workflow-36no1x/)

### 加价与追销

- [什么是追销产品？](https://help.customeow.io/zh/article/5lua5lmi5piv6l96zsa5lqn5zob77yf-1ggsy/)
- [什么是加价产品？](https://help.customeow.io/zh/article/5lua5lmi5piv5yqg5lu35lqn5zob77yf-pbohnp/)