主题实现指南

本指南将引导开发者构建自定义主题(涵盖布局、组件、可选主题页面及资源),并完善导航、目录、前后页、语言切换及特殊页面处理等核心框架功能。

推荐目录结构

建议结构:

theme/
  index.js          # 导出主题对象
  page.jsx          # 模板组件(Layout)
  components/       # 默认 MDX 组件(可选)
  pages/            # 主题自带页面(可选)
  public/           # 主题 Public 静态资源(可选)
  sources/          # theme.sources 映射的资源(可选)

配置启用主题

methanol.config.js

import PageTemplate from './theme/page.jsx'

export default () => ({
	theme: {
		root: './theme',
		template: PageTemplate
	}
})

主题对象定义

theme/index.js

import PageTemplate from './page.jsx'

export default () => ({
	theme: {
		root: '.',
		template: PageTemplate,
		componentsDir: './components',
		pagesDir: './pages',
		publicDir: './public',
		sources: {
			'/theme': './sources'
		}
	}
})

模板接口规范(Template Contract)

theme.template 将接收以下参数:

最小模板示例:

import { HTMLRenderer } from 'methanol'

export default ({ PageContent, ExtraHead, ctx }) => (
	<>
		{HTMLRenderer.rawHTML`<!doctype html>`}
		<html lang="en">
			<head>
				<meta charset="UTF-8" />
				<meta name="viewport" content="width=device-width" />
				<ExtraHead />
				<title>{ctx.page.title || ctx.site.name}</title>
			</head>
			<body>
				<PageContent />
			</body>
		</html>
	</>
)

在实际主题开发中,通常需集成导航、目录及页面信息等模块。各功能实现详解如下: