本文档描述了roadmap.sh平台中使用的核心布局结构和导航组件。这些基础组件构成了所有内容页面的视觉外壳,并提供了整个站点一致的用户体验。有关特定页面内容和渲染的信息,请参阅路线图页面和渲染的相关文档。
roadmap.sh平台在所有页面上都使用一致的布局结构,通过Astro组件实现。基本布局处理HTML文档结构、元数据、脚本和分析,而各种导航组件则管理用户在站点中的移动。
组件层次结构
来源:src/layouts/BaseLayout.astro1-242 src/components/Navigation/Navigation.astro1-165
BaseLayout.astro组件是roadmap.sh所有页面的基础模板。它创建了一个一致的HTML结构,包裹每个页面的特定内容。
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
BaseLayout生成一个完整的HTML文档,其结构如下
包含以下内容的<head>部分
包含以下内容的<body>部分
该布局广泛使用插槽元素,以实现在保持一致结构的同时,对不同部分的定制化。
来源:src/layouts/BaseLayout.astro72-242
导航系统由多个协同工作的组件组成,以提供全站导航。
主导航组件(Navigation.astro)渲染站点的顶部栏,并包含
来源:src/components/Navigation/Navigation.astro10-162
导航系统包括两个主要的下拉菜单
导航下拉菜单(NavigationDropdown.tsx):包含指向各种内容类型的链接,包括
路线图下拉菜单(RoadmapDropdownMenu.tsx):包含指向不同路线图类别的链接
这两个下拉组件都使用类似的模式
来源:src/components/NavigationDropdown.tsx1-150 src/components/RoadmapDropdownMenu/RoadmapDropdownMenu.tsx1-116
移动导航实现为一个全屏覆盖层,在汉堡菜单按钮触发时出现。它包括
来源:src/components/Navigation/Navigation.astro78-161
页脚组件(Footer.astro)在每个页面底部提供全站链接和信息
页脚是响应式的,针对移动和桌面视口有不同的布局。
来源:src/components/Footer.astro1-140
BaseLayout集成了多个分析和跟踪组件
Analytics.astro):标准谷歌分析跟踪Clarity.astro):热图和会话记录RedditPixel.astro):Reddit的转化跟踪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
导航组件结合使用局部和全局状态管理
局部组件状态:
useState和useRef用于组件特定状态使用Nanostores的全局状态:
navigationDropdownOpen和roadmapsDropdownOpen用于协调下拉菜单状态pageProgressMessage用于显示加载/进度消息来源:src/components/NavigationDropdown.tsx15-17 src/components/RoadmapDropdownMenu/RoadmapDropdownMenu.tsx6-8
BaseLayout包含用于认证处理的组件
data-auth-required和data-guest-required属性进行装饰,以便根据认证状态有条件地显示/隐藏导航组件使用JavaScript根据用户的认证状态更新这些元素的显示。
来源:src/layouts/BaseLayout.astro219-222 src/components/Navigation/Navigation.astro60-74 src/components/Navigation/Navigation.astro124-158
除了主布局和导航之外,还包括几个UI工具组件
这些组件增强了用户体验,并提供了在整个应用程序中运行的附加功能。
来源:src/layouts/BaseLayout.astro224-240
来源:src/layouts/BaseLayout.astro1-242 src/components/Navigation/Navigation.astro1-165
基本布局和导航组件构成了roadmap.sh平台的结构基础。它们为所有内容页面提供了一致的用户界面外壳,管理用户导航,并集成了分析和认证等基本实用工具。这种模块化方法允许特定内容的页面专注于其独特功能,同时继承一致的整体结构和导航体验。