菜单树-更新

接口信息

  • 接口地址: {your-site-url}/api/skill/menu/update
  • 基础 URL: {your-site-url} 需替换为你自己的独立站 URL 地址,如 https://your-domain.com/apimanager666
  • 请求方式: POST
  • 说明: 此接口用于更新一个已有的菜单树(包括菜单子项的增删改)。将传入的完整 menu_items 替换菜单树原有的子项结构。返回 data 为空数组表示更新成功。

⚠️ 重要:更新前请务必先通过 菜单树-详细 获取当前菜单的完整数据(menu_tree_items),在此基础上修改后再提交更新。直接用旧数据或构造不全的数据提交会导致丢失未包含的子项。

认证

请求头中需要携带 skill-access-token

Header
skill-access-token {your-skill-access-token} (请替换为你自己的 token)
Content-Type application/json

请求参数 (JSON Body)

字段 类型 必填 说明
menu_id int 要更新的菜单树 ID
menu_name string 菜单树名称
menu_items Array[Object] 完整的菜单子项数组。系统会用传入的 menu_items 替换原有的所有子项(即传入什么,最终就是什么)
字段 类型 必填 说明
id int/string 现有项必填/新增留空 菜单子项 ID。已有子项传入数据库 id(整数),新增子项留空 ""。系统根据是否传入有效 id 判断是更新还是新增
name string 菜单子项名称
url_type int/string 链接类型 code。值从 菜单-Url选择器 获取,对应返回值中的 code 字段。新增未选类型时可留空 ""
url_value string 链接值。对应 菜单-Url选择器 返回值中的 url 字段。新增未选链接时可留空 ""。不同 url_type 对应的 url 格式见下表
object_id int/string 链接类型对应的实体 ID(如商品 ID、页面 ID 等)。固定链接类型或无实体时留空 ""
object_title string 对应实体的显示标题,无内容留空 ""
open_new int 是否新窗口打开。1 = 是,2 = 否
is_hidden int 是否隐藏。1 = 是,2 = 否
child Array[Object] 下级子菜单数组,结构同 menu_items,支持无限级嵌套。无子项传空数组 []

url_type 类型枚举

code text url 说明
1 首页 / 网站首页
2 商品专辑页 /collections/{handle} 需选择具体专辑
3 商品详情页 /products/{handle} 需选择具体商品
4 博客专辑页 /blogs/{handle} 需选择具体博客专辑
5 博客文章页 /blog/{handle} 需选择具体文章
6 自定义页面 /pages/{handle} 需选择具体页面
7 查询订单 /account/order-query 固定页面
8 自定义 URL (手动输入) 可输入任意 URL
9 Contacts /contacts 联系我们
10 商品专辑页(所有商品) /collections/all 展示所有商品
11 商品评论页 /review/all 所有评论
12 专辑列表页(指定专辑) /collections 专辑列表入口

url 拼接规则

  • 固定链接(code 1、7、9、10、11、12):url_value 直接取表中 url 的值
  • 动态链接(code 2、3、4、5、6):将 url 中的 {handle} 替换为所选实体的 handle
    • 例:商品 handle 为 diamond-chain-earrings-02d9fu8a,code=3 → url_value = /products/diamond-chain-earrings-02d9fu8a
  • code 8(自定义 URL):手动填写任意完整 URL,如 https://example.com/page

以下字段后端自动处理,无需传入(即使获取详情时返回了,提交时也不需要传):

  • shop_idmenu_idparent_idlevelposition — 后端根据菜单树和嵌套层级自动设置
  • created_atupdated_at — 后端自动维护
  • remote_id — 后端自动处理

前端辅助字段(后端忽略,可传可不传):

  • randomId — 前端用于列表渲染的临时唯一标识
  • isDown — 前端用于标记子项展开/折叠状态

请求示例

示例一:更新已有菜单(保留现有子项 + 修改 + 新增)

{
    "menu_id": 745,
    "menu_name": "terry tree",
    "menu_items": [
        {
            "id": 2372,
            "name": "Home",
            "url_type": 1,
            "url_value": "/",
            "object_id": "",
            "object_title": "",
            "open_new": 2,
            "is_hidden": 2,
            "child": []
        },
        {
            "id": 2373,
            "name": "Collections",
            "url_type": 2,
            "url_value": "/collections/spu",
            "object_id": 366,
            "object_title": "智能专辑:spu",
            "open_new": 2,
            "is_hidden": 2,
            "child": [
                {
                    "id": "",
                    "name": "child dress",
                    "url_type": "",
                    "url_value": "",
                    "object_id": "",
                    "object_title": "",
                    "open_new": 2,
                    "is_hidden": 2,
                    "child": []
                }
            ]
        },
        {
            "id": "",
            "name": "dress",
            "url_type": 2,
            "url_value": "/collections/spu",
            "object_id": 366,
            "object_title": "智能专辑:spu",
            "open_new": 2,
            "is_hidden": 2,
            "child": []
        }
    ]
}

示例说明:

  • id: 2372 → 有 ID,更新现有子项 "Home"
  • id: 2373 + child 中的 id: "" → 父项更新,子项新增
  • 最后一个 id: "" → 新增一级菜单项 "dress"
  • 未包含在 menu_items 中的旧子项将被删除

cURL

curl --location --request POST '{your-site-url}/api/skill/menu/update' \
--header 'skill-access-token: {your-skill-access-token}' \
--header 'Content-Type: application/json' \
--data-raw '{"menu_id":747,"menu_name":"Main Menu","menu_items":[{"id":"","name":"Home","url_type":1,"url_value":"/","object_id":"","object_title":"","open_new":2,"is_hidden":2,"child":[]},{"id":"","name":"Products","url_type":3,"url_value":"/products/diamond-chain-earrings-02d9fu8a","object_id":7042,"object_title":"Diamond Chain Earrings","open_new":2,"is_hidden":2,"child":[{"id":"","name":"Sub Product","url_type":2,"url_value":"/collections/53535243","object_id":372,"object_title":"53535243","open_new":1,"is_hidden":1,"child":[]}]}]}'

返回结果

code200 表示调用成功;code 不为 200 表示调用失败。

成功响应

{
    "code": 200,
    "data": [],
    "message": "success"
}

返回字段说明

字段 类型 说明
code Number 状态码,200 表示成功
message String 执行结果的文字描述
data Array 成功时为空数组 []

注意事项

更新流程

  1. 先调用 菜单树-详细 获取当前菜单完整数据
  2. 取出 data.menu_tree_items,在此基础上进行修改(增删改子项、修改名称/链接等)
  3. 提交时只保留必要字段,去掉 shop_idmenu_idparent_idlevelpositioncreated_atupdated_atremote_id

增删改规则

  • 更新采用全量替换策略:传入的 menu_items 会完全替换该菜单树下原有的所有子项
  • 已存在的子项传入数据库 id(整数),系统根据 id 判断是更新
  • 新增的子项 id 留空 "",系统会自动分配新 ID
  • 未包含在 menu_items 中的旧子项将被删除
  • child 支持无限级嵌套,父级关系由嵌套层级自动推断,无需手动设置 parent_id
  • url_type 和对应的 object_id / url_value 需匹配,新项目可先留空
Copyright © fecify.com 2025 all right reserved,powered by Gitbook该文件修订时间: 2026-06-13 10:33:36

results matching ""

    No results matching ""