# 编写 mm Pendant 挂件脚本

## 规则（Rules）

- pendant.js 位于 `app/{模块名}/pendant/{挂件名}/pendant.js`
- 导出 `module.exports` 对象，至少包含 `main` 方法
- `main` 方法返回的数据对象会注入到 `pendant.html` 模板中
- `main` 方法签名：`async main(params)`，`params` 为挂件调用时传入的参数

## 方法（Methods）

### 步骤1：编写基础挂件脚本

```javascript
module.exports = {
    async main(params) {
        var list = await db.new('cms_article', 'article_id').get(
            { state: 1 },
            "sort desc",
            "article_id, title, create_time"
        );
        return { list: list };
    }
};
```

### 步骤2：编写带参数的挂件

```javascript
module.exports = {
    async main(params) {
        // params 中包含调用时传入的参数
        var pageSize = params.size || 10;
        var db_data = db.new('cms_article', 'article_id');
        db_data.size = pageSize;
        var list = await db_data.get({ state: 1 });
        return { list: list, total: list.length };
    }
};
```

## 技巧（Tips）

- `main` 方法返回的对象属性在 `pendant.html` 中直接以变量名使用（如 `${list}`）
- 通过 `db.new(表名, 主键)` 获取数据管理器查询数据
- 分页控制：设置 `db_data.size = N` 限制返回数量
- 挂件脚本只负责数据获取，展示逻辑放在 `pendant.html` 中
