菜单

基本布局和导航

相关源文件

本文档描述了roadmap.sh平台中使用的核心布局结构和导航组件。这些基础组件构成了所有内容页面的视觉外壳,并提供了整个站点一致的用户体验。有关特定页面内容和渲染的信息,请参阅路线图页面和渲染的相关文档。

概述

roadmap.sh平台在所有页面上都使用一致的布局结构,通过Astro组件实现。基本布局处理HTML文档结构、元数据、脚本和分析,而各种导航组件则管理用户在站点中的移动。

组件层次结构

来源:src/layouts/BaseLayout.astro1-242 src/components/Navigation/Navigation.astro1-165

基本布局结构

BaseLayout.astro组件是roadmap.sh所有页面的基础模板。它创建了一个一致的HTML结构,包裹每个页面的特定内容。

组件属性 (Props)

BaseLayout接受各种属性(props)来控制页面行为和元数据

属性类型描述
title字符串页面标题(默认为站点标题)
ogImageUrl字符串用于社交分享的Open Graph图片URL
description字符串用于meta标签的页面描述
keywords字符串数组页面的SEO关键词
noIndex布尔值控制搜索引擎是否应该索引该页面
canonicalUrl字符串用于SEO的规范URL
resourceId字符串正在显示资源的ID
resourceType资源类型正在显示资源的类型
hasVarify布尔值是否包含Varify脚本
......用于特殊功能的其他属性

来源:src/layouts/BaseLayout.astro24-40

基本布局流程

来源:src/layouts/BaseLayout.astro72-242

HTML 结构

BaseLayout生成一个完整的HTML文档,其结构如下

  1. 包含以下内容的<head>部分

    • 字符集和视口设置
    • 页面标题和元描述
    • Open Graph和社交媒体元标签
    • Favicon和manifest链接
    • 分析脚本标签
    • 用于额外head内容的自定义插槽
  2. 包含以下内容的<body>部分

    • 课程公告组件(可选插槽)
    • 导航头部(带有默认导航组件的插槽)
    • 主要内容(主插槽)
    • 页面页脚(带有默认页脚组件的插槽)
    • 认证组件
    • UI工具组件(命令菜单、进度指示器等)

该布局广泛使用插槽元素,以实现在保持一致结构的同时,对不同部分的定制化。

来源:src/layouts/BaseLayout.astro72-242

导航系统由多个协同工作的组件组成,以提供全站导航。

主导航组件(Navigation.astro)渲染站点的顶部栏,并包含

  1. 站点标志/链接
  2. 主要导航项
  3. 路线图及其他内容的下拉菜单
  4. 依赖于认证状态的元素
  5. 移动导航切换

来源:src/components/Navigation/Navigation.astro10-162

导航系统包括两个主要的下拉菜单

  1. 导航下拉菜单NavigationDropdown.tsx):包含指向各种内容类型的链接,包括

    • SQL课程
    • 项目
    • 最佳实践
    • 问题
    • 指南
    • 视频
    • 商店
    • 广告
  2. 路线图下拉菜单RoadmapDropdownMenu.tsx):包含指向不同路线图类别的链接

    • 官方路线图
    • AI路线图
    • 社区路线图

这两个下拉组件都使用类似的模式

  • 使用nanostores进行状态管理
  • 点击和悬停交互
  • 视觉过渡
  • 语义化标记(角色、ARIA属性)

来源:src/components/NavigationDropdown.tsx1-150 src/components/RoadmapDropdownMenu/RoadmapDropdownMenu.tsx1-116

移动导航

移动导航实现为一个全屏覆盖层,在汉堡菜单按钮触发时出现。它包括

  • 关闭按钮
  • 导航链接的垂直列表
  • 条件性认证相关链接
  • 处理可见性切换的JavaScript

来源:src/components/Navigation/Navigation.astro78-161

页脚组件(Footer.astro)在每个页面底部提供全站链接和信息

  • 主要导航链接(路线图、最佳实践、指南等)
  • 站点标识和品牌
  • 法律链接(条款、隐私)
  • 联系方式和社交媒体链接
  • 合作伙伴/赞助商信息 (The New Stack)

页脚是响应式的,针对移动和桌面视口有不同的布局。

来源:src/components/Footer.astro1-140

分析和跟踪集成

BaseLayout集成了多个分析和跟踪组件

  1. Google Analytics(谷歌分析)Analytics.astro):标准谷歌分析跟踪
  2. Microsoft ClarityClarity.astro):热图和会话记录
  3. Reddit PixelRedditPixel.astro):Reddit的转化跟踪
  4. Google Ads(谷歌广告)GoogleAd.astro):广告投放和跟踪

这些组件在文档的头部部分加载并初始化,以便在页面加载后开始跟踪用户行为。

来源:src/components/Analytics/Analytics.astro1-13 src/components/Analytics/Clarity.astro1-14 src/components/Analytics/RedditPixel.astro1-19 src/components/Analytics/GoogleAd.astro1-109

状态管理

导航组件结合使用局部和全局状态管理

  1. 局部组件状态:

    • React的useStateuseRef用于组件特定状态
    • 用户交互的事件处理器
  2. 使用Nanostores的全局状态:

    • navigationDropdownOpenroadmapsDropdownOpen用于协调下拉菜单状态
    • pageProgressMessage用于显示加载/进度消息

来源:src/components/NavigationDropdown.tsx15-17 src/components/RoadmapDropdownMenu/RoadmapDropdownMenu.tsx6-8

身份验证集成

BaseLayout包含用于认证处理的组件

  1. Authenticator(认证器):管理认证状态和令牌处理
  2. LoginPopup(登录弹窗):提供登录界面
  3. 数据属性:元素使用data-auth-requireddata-guest-required属性进行装饰,以便根据认证状态有条件地显示/隐藏

导航组件使用JavaScript根据用户的认证状态更新这些元素的显示。

来源:src/layouts/BaseLayout.astro219-222 src/components/Navigation/Navigation.astro60-74 src/components/Navigation/Navigation.astro124-158

UI工具组件

除了主布局和导航之外,还包括几个UI工具组件

  1. CommandMenu(命令菜单):提供键盘可访问的命令面板
  2. PageProgress(页面进度):显示加载状态和进度消息
  3. PageSponsors(页面赞助商):显示赞助商信息
  4. Toaster(提示器):提供吐司通知(弹窗通知)
  5. PageVisit(页面访问):跟踪页面访问

这些组件增强了用户体验,并提供了在整个应用程序中运行的附加功能。

来源:src/layouts/BaseLayout.astro224-240

组件交互流程

来源:src/layouts/BaseLayout.astro1-242 src/components/Navigation/Navigation.astro1-165

结论

基本布局和导航组件构成了roadmap.sh平台的结构基础。它们为所有内容页面提供了一致的用户界面外壳,管理用户导航,并集成了分析和认证等基本实用工具。这种模块化方法允许特定内容的页面专注于其独特功能,同时继承一致的整体结构和导航体验。