课程栏目折叠子导航操作手册

课程栏目折叠子导航操作手册

目的:记录如何为课程页面添加锚点式子导航,并通过侧边栏实现“点击父栏目才展开子项”的折叠效果,可重复套用到新课程。

1. 侧边栏折叠逻辑

  • 文件:_includes/nav_list
  • 核心思路: 1) 仅当当前页面 URL 等于父级链接或以父级链接为前缀时,渲染该父级的子 ul;否则折叠。 2) active 类判定同时兼容精确匹配与带尾随 / 的情况。
  • 关键 Liquid 片段(摘录): ```liquid

    
    ## 2. 导航数据结构
    
    - 文件:`_data/navigation.yml`
    - 模式:
    ```yaml
    course_nav:
      - title: "离散数学"
        url: /course/discrete-math/
        children:
          - title: "命题逻辑"
            url: /course/discrete-math/#logic
          - title: "关系与集合"
            url: /course/discrete-math/#set
          ...
      - title: "数据库系统"
        url: /course/database/
        children:
          - title: "引言"
            url: /course/database/#intro
          ...
    

    3. 页面锚点约定

    • 在目标页面(如 _pages/discrete-math.md)的主段落标题后添加显式锚点:
      ## 命题逻辑 <a id="logic"></a>
      
    • 子导航 URL 使用 #logic 等锚点,确保点击时滚动到对应段落。

    4. 新课程/新子页面复用步骤

    1) 在目标页面插入锚点:<a id="xxx"></a>,一段对应一个子导航。 2) 在 _data/navigation.yml 为课程节点添加 children,指向 /<course>/<page>/#anchor。 3) 无需改模板,_includes/nav_list 已内置折叠逻辑。 4) 若有旧子页面被合并,给主页面加 redirect_from 列出旧路径。

    5. 快速检查

    • 本地或 Actions 构建:bundle exec jekyll build
    • 打开 /course/<page>/
      • 侧边栏默认父级折叠;点击或进入父级页面时,子项自动展开。
      • 子项高亮(class active)出现在当前锚点对应 URL。

    6. 已应用示例

    • 离散数学:/course/discrete-math/ + 子锚 #logic/#set/#graph/#algebra
    • 数据库系统:/course/database/ + 子锚 #intro/#rel/#design/#storage/#opt/#txn