EN
Shopify 知识库 · 概念

导航菜单与链接列表:Menus、层级与主题呈现

说明 Shopify Content > Menus 里的菜单与菜单项、链接目标类型、层级深度上限,以及 Liquid 的 linklists、linklist、link 对象怎样把菜单交给主题,并给出把新页面加入菜单与验证页头页脚的步骤。

Shopify 的菜单(Menus)是商家在后台维护的链接列表:每个菜单有标题与 handle,由若干菜单项组成,菜单项可以嵌套。主题只负责把菜单输出到页头、页脚或抽屉里。本文解决「菜单在哪里改、能链到什么、能嵌几层、主题怎样读到」;它不规定菜单该怎样分类,也不写各主题的具体样式。Menus and links。

本库哪些内容依赖它

本文是 Shopify 菜单与链接列表的权威来源,其他文章只写各自页面语境下的用法:

核心对象与概念

对象含义备注
菜单(menu / linklist)一个命名的链接列表有 handle、title、links、levels;默认菜单是 Main menu,handle 为 main-menu
菜单项(menu item / link)菜单里的一条链接有名称与目标;名称可含特殊字符或 emoji
链接目标类型Home page、Search、Collections、Products、Pages、Blogs、Blog posts、Policies、Customer accounts、External page、Email link来自帮助中心的类型表;Liquid 的 link.type 取值另列
嵌套拖动菜单项到顶层项之下,形成下拉顶层项之下最多两层嵌套
# 链接顶层项不指向任何页面时填的值官方给的做法;用于只作分组标题的项
link_list 设置主题设置类型,让商家为区块选择菜单在 shopify.dev 导航教程中出现

在哪里配置

  • 帮助中心写明在 Shopify admin 的 Content > Menus 查看和修改菜单;菜单显示在主题的哪个位置,在 Theme settings 里选择(多数主题也可在页头分区里改默认主菜单)。
  • shopify.dev 的导航教程写的是 Online Store > Navigation 里定义的菜单。两页的后台路径写法不同,并列记录;后台实际入口以当时界面为准。
  • 添加菜单项:菜单页点 Add menu item,填名称,在 Search or paste a link 里选类型与具体目标,点 Add,再点 Save 或 Save menu。选具体集合时可以用标签过滤,只显示同时匹配所有标签的商品。
  • 顺序:菜单项按列表顺序显示,拖动手柄调整;删除带下级的顶层项会连同下级一起删除。
  • 编辑计数:每次添加、编辑、删除、移动都算一次变更,累计 200 次后限制继续操作,直到点 Save;官方建议经常保存。
  • 编辑菜单项、下拉菜单。

与主题、Liquid 和 API 的连接

  • linklists:全局对象,包含店铺全部菜单,按 handle 取用,如 linklists.main-menu.links 或 linklists['footer'].links。官方示例数据里出现了 footer 这个 handle,属示例,不等于每个店铺都有同名菜单。
  • linklist:handle、levels(嵌套层数)、links(link 数组)、title;页面明写最多 3 层。
  • link:active(当前路径与链接相同或包含链接路径)、child_active、current(当前路径与链接 URL 相同,忽略 URL 参数)、child_current、handle、levels、links(子链接)、object、title、type、url,以及 data_sharing_opt_out_icon。
  • link.object 可能是 article、blog、collection、metaobject、page、policy 或 product。
  • link.type 取值:article_link、blog_link、catalog_link、collection_link、collections_link、customer_account_page_link、frontpage_link、http_link(外部页面,或商品类型 / 供应商集合)、metaobject_link、page_link、policy_link、product_link、search_link。
  • 主题让商家选菜单:在区块里声明 link_list 类型设置,再用 section.settings.menu.links 读取;导航教程写明链接最多嵌套三层,并提醒示例只演示遍历,不是完整导航功能。导航教程。
  • link.current 与 child_current 把集合上下文中的商品 URL 与标准商品 URL 视为相同;within 过滤器生成带集合上下文的商品 URL、需评估 SEO 影响,见 Navigation Menu 展现。
  • Admin API:TranslatableResourceType 枚举里有 MENU(可翻译字段 title)与 LINK(可翻译字段 title);本文未读到菜单读写的 Admin API 页面,未核验。

限制、数值与易错点

  • 层级:linklist 页写最多 3 层;帮助中心写顶层项之下最多两层嵌套下拉,并提示更新主题以显示全部三层。多数主题支持最多两层嵌套下拉,具体主题要查文档或实测。Dawn 与 Horizon 的固定版本处理见上面两篇主题正文。
  • 数量:帮助中心写每个菜单最多 10,000 项,店铺最多 1,000 个菜单;带下级的菜单项在下拉里另计一个菜单计入该限制。建议顶层项不超过 7 个(官方最佳实践,属建议)。
  • 页脚与下拉:同一页里前文写「页脚菜单只能显示顶层项,下拉不能用在页脚」,后文又写「下拉也可以用在页脚菜单」。两处矛盾,本文不选边;页脚实际能否显示嵌套项以主题实现为准。页脚与页头菜单本质上是同一种对象,区别在于主题把哪个菜单输出到哪个区域。
  • 顶层项行为:官方写多数主题把下拉标题实现成按钮而不是链接;要让顾客到达分类页,把「全部商品」等入口作为下拉里的第一项。移动端点顶层项发生跳转时,检查链接字段是否为 #。
  • 手动粘贴 URL:官方警告,改菜单项 URL 或粘贴 URL 而不直接选择页面,可能断开菜单项与资源的关联而出现 404;外部页面需在下拉里选中目标后再添加,不能只粘贴后按 Enter 或保存。
  • 删除资源:删除菜单里引用的集合、页面或商品,对应菜单项一并被删除,看起来像「菜单项无故消失」。
  • 早期店铺:创建嵌套菜单时可能出现「Menu cannot contain nested menus」错误,官方说明这通常影响 2018 年前创建的店铺,需联系 Shopify Support。
  • 同一目标多处出现:多个导航项指向同一页面(如首页)时,主题可能显示错误的子菜单。

把新页面加入菜单

  1. 在 Online Store > Pages 创建页面。Visibility 有 Visible(保存后默认可见)与 Hidden,可为 Hidden 页面设置发布日期;Future publishing 页写明页面可以定时发布,并提示先确认 General 设置里的时区。创建与编辑页面。
  2. 页面创建后,在菜单里选 Pages 类型并直接选该页面,不要粘贴 URL。
  3. 隐藏或未发布页面加入菜单后,顾客会看到什么,官方页面未读到明文,本文不下结论:必须在保存菜单后用未登录浏览器访问,分别记录页面处于 Hidden 与 Visible 时该菜单项的显示与点击结果。
  4. 页面改 handle 后旧地址是否需要重定向,见 URL 重定向。

验证一次

  1. 在 Content > Menus 记录菜单 handle 与嵌套结构,保存后刷新预览。
  2. 用未登录浏览器检查页头、页脚与移动端菜单,确认三层数据在目标主题里都可达。
  3. 依次点每个菜单项,记录最终地址,特别是 # 分组标题、外部链接与账户页链接。
  4. 切换店面语言,检查菜单项标题是否已翻译(见翻译与本地化)。
  5. 删除测试页面前先核对哪些菜单引用它。

待继续完善

  • 隐藏与未发布页面在菜单中的行为未核验;
  • 页脚是否支持嵌套项的官方说法互相矛盾,需要在具体主题实测;
  • 菜单是否随 Markets 变化,官方页未读到,需另查;
  • 「Content > Menus」与「Online Store > Navigation」两处入口名称哪个是当前后台,需要在真实后台确认。