Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Notion config的配置项可以使用对象数组等复杂结构和HEO主题的站点信息文案支持从Notion配置 #3077

Merged
merged 4 commits into from
Dec 28, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 30 additions & 8 deletions lib/notion/getNotionConfig.js
Original file line number Diff line number Diff line change
Expand Up @@ -157,18 +157,24 @@ export async function getConfigMapFromConfigPage(allPages) {
// 只导入生效的配置
if (config.enable) {
// console.log('[Notion配置]', config.key, config.value)
notionConfig[config.key] = config.value || null
notionConfig[config.key] =
parseTextToJson(config.value) || config.value || null
// 配置不能是undefined,至少是null
}
}
}

// 最后检查Notion_Config页面的INLINE_CONFIG,是否是一个js对象
const combine = Object.assign(
{},
deepClone(notionConfig),
parseConfig(notionConfig?.INLINE_CONFIG)
)
let combine = notionConfig
try {
// 将INLINE_CONFIG合并,@see https://docs.tangly1024.com/article/notion-next-inline-config
combine = Object.assign(
{},
deepClone(notionConfig),
notionConfig?.INLINE_CONFIG
)
} catch (err) {
console.warn('解析 INLINE_CONFIG 配置时出错,请检查JSON格式', err)
}
return combine
}

Expand All @@ -187,7 +193,23 @@ export function parseConfig(configString) {
const config = eval('(' + configString + ')')
return config
} catch (evalError) {
console.error('解析 eval(INLINE_CONFIG) 配置时出错:', evalError)
console.warn(
'解析 eval(INLINE_CONFIG) 配置时出错,请检查JSON格式',
evalError
)
return {}
}
}

/**
* 解析文本为JSON
* @param text
* @returns {any|null}
*/
export function parseTextToJson(text) {
try {
return JSON.parse(text)
} catch (error) {
return null
}
}
12 changes: 8 additions & 4 deletions themes/heo/components/AnalyticsCard.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,31 +11,35 @@ export function AnalyticsCard(props) {
const today = new Date()
const diffTime = today.getTime() - targetDate.getTime() // 获取两个日期之间的毫秒数差值
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24)) // 将毫秒数差值转换为天数差值
const postCountTitle = siteConfig('HEO_POST_COUNT_TITLE', null, CONFIG)
const siteTimeTitle = siteConfig('HEO_SITE_TIME_TITLE', null, CONFIG)
const siteVisitTitle = siteConfig('HEO_SITE_VISIT_TITLE', null, CONFIG)
const siteVisitorTitle = siteConfig('HEO_SITE_VISITOR_TITLE', null, CONFIG)

const { postCount } = props
return <>
<div className='text-md flex flex-col space-y-1 justify-center px-3'>
<div className='inline'>
<div className='flex justify-between'>
<div>文章数:</div>
<div>{postCountTitle}</div>
<div>{postCount}</div>
</div>
</div>
<div className='inline'>
<div className='flex justify-between'>
<div>建站天数:</div>
<div>{siteTimeTitle}</div>
<div>{diffDays} 天</div>
</div>
</div>
<div className='hidden busuanzi_container_page_pv'>
<div className='flex justify-between'>
<div>访问量:</div>
<div>{siteVisitTitle}</div>
<div className='busuanzi_value_page_pv' />
</div>
</div>
<div className='hidden busuanzi_container_site_uv'>
<div className='flex justify-between'>
<div>访客数:</div>
<div>{siteVisitorTitle}</div>
<div className='busuanzi_value_site_uv' />
</div>
</div>
Expand Down
6 changes: 6 additions & 0 deletions themes/heo/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,12 @@ const CONFIG = {
HEO_SOCIAL_CARD_TITLE_3: '点击加入社群',
HEO_SOCIAL_CARD_URL: 'https://docs.tangly1024.com/article/how-to-question',

// 底部统计面板文案
HEO_POST_COUNT_TITLE: '文章数:',
HEO_SITE_TIME_TITLE: '建站天数:',
HEO_SITE_VISIT_TITLE: '访问量:',
HEO_SITE_VISITOR_TITLE: '访客数:',

// ***** 以下配置无效,只是预留开发 ****
// 菜单配置
HEO_MENU_INDEX: true, // 显示首页
Expand Down
Loading