Skip to content

This issue was moved to a discussion.

You can continue the conversation there. Go to discussion →

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

【更强大的自定义表头】自定义数据库表头后如何提取对应数据 #1627

Closed
RylanBot opened this issue Nov 11, 2023 · 5 comments
Assignees
Labels
enhancement New feature or request good first issue Good for newcomers help wanted Extra attention is needed

Comments

@RylanBot
Copy link
Contributor

为什么提出这个新的特性改动
想要在文章详情页的 Header 部分显示某个数据库的自定义字段,但不知道要如何传参?没找到调用 post 的来源。
是否方便告知具体是在哪个代码文件,我自己摸索看看。

描述一下你推荐的解决方案
...

描述一下你考虑过的其它替代解决方案
...

补充说明
...

@RylanBot RylanBot added the enhancement New feature or request label Nov 11, 2023
@tangly1024 tangly1024 added the help wanted Extra attention is needed label Nov 21, 2023
@tangly1024
Copy link
Owner

具体是新增什么字段,不太建议增加数据表结构,这样表也会变得臃肿。

可以结合最新的NotionConfig机制。
image

然后在代码中引用 : siteConfig('TEST') 即可获得您的自定义配置,获得帮助

@RylanBot
Copy link
Contributor Author

RylanBot commented Nov 21, 2023

具体是新增什么字段,不太建议增加数据表结构,这样表也会变得臃肿。

可以结合最新的NotionConfig机制。 image

然后在代码中引用 : siteConfig('TEST') 即可获得您的自定义配置,获得帮助

我想在每个post添加一个属性(文章的归档/完成时间),根据不同post进行手动设置。
【主要是有时候某篇文章写完很久了,几个月后重新轻微调整了一下格式,哪怕只删除了一个句号,就会触发它修改这篇文章的最后更新时间,所以我想实现手动再添加一个日期,取消显示自动的最后更新时间,而是显示我设置的完成日期】

因此我需要的config并不是固定死的,但siteConfig('TEST')是固定的?

@RylanBot
Copy link
Contributor Author

RylanBot commented Nov 21, 2023

具体是新增什么字段,不太建议增加数据表结构,这样表也会变得臃肿。

可以结合最新的NotionConfig机制。 image

然后在代码中引用 : siteConfig('TEST') 即可获得您的自定义配置,获得帮助

我觉得我的想法跟另外一个issue #1536 的思路有点类似?(虽然对方是固定的config,4.1版本后确实可以解决了)

但基于大家的想法都五花八门的,是否考虑给post新增一个自定义数据库字段(比如custom),然后对应的内容是JSON格式,方便用户自己填写key和value后在header渲染?

@tangly1024
Copy link
Owner

我觉得我的想法跟另外一个issue #1536 的思路有点类似?(虽然对方是固定的config,4.1版本后确实可以解决了)

但基于大家的想法都五花八门的,是否考虑给post新增一个自定义数据库字段(比如custom),然后对应的内容是JSON格式,方便用户自己填写key和value后在header渲染?

好想法

很好的想法,每一个POST留一个custom字段,方便使用,而且有很大的操作空间

更短期的方案

我觉得这个想法有些超前了,而且json字段用起来其实挺麻烦的,如果只是加一个字段例如 【完成日期】,可以围绕这个代码进行尝试修改:

关键就在于 blog.config.js 中式允许用户自定义表头的,利用这点我们可以添加无数自定义字段。

NotionNext/blog.config.js

Lines 359 to 382 in 23ac219

// 自定义配置notion数据库字段名
NOTION_PROPERTY_NAME: {
password: process.env.NEXT_PUBLIC_NOTION_PROPERTY_PASSWORD || 'password',
type: process.env.NEXT_PUBLIC_NOTION_PROPERTY_TYPE || 'type', // 文章类型,
type_post: process.env.NEXT_PUBLIC_NOTION_PROPERTY_TYPE_POST || 'Post', // 当type文章类型与此值相同时,为博文。
type_page: process.env.NEXT_PUBLIC_NOTION_PROPERTY_TYPE_PAGE || 'Page', // 当type文章类型与此值相同时,为单页。
type_notice:
process.env.NEXT_PUBLIC_NOTION_PROPERTY_TYPE_NOTICE || 'Notice', // 当type文章类型与此值相同时,为公告。
type_menu: process.env.NEXT_PUBLIC_NOTION_PROPERTY_TYPE_MENU || 'Menu', // 当type文章类型与此值相同时,为菜单。
type_sub_menu:
process.env.NEXT_PUBLIC_NOTION_PROPERTY_TYPE_SUB_MENU || 'SubMenu', // 当type文章类型与此值相同时,为子菜单。
title: process.env.NEXT_PUBLIC_NOTION_PROPERTY_TITLE || 'title', // 文章标题
status: process.env.NEXT_PUBLIC_NOTION_PROPERTY_STATUS || 'status',
status_publish:
process.env.NEXT_PUBLIC_NOTION_PROPERTY_STATUS_PUBLISH || 'Published', // 当status状态值与此相同时为发布,可以为中文
status_invisible:
process.env.NEXT_PUBLIC_NOTION_PROPERTY_STATUS_INVISIBLE || 'Invisible', // 当status状态值与此相同时为隐藏发布,可以为中文 , 除此之外其他页面状态不会显示在博客上
summary: process.env.NEXT_PUBLIC_NOTION_PROPERTY_SUMMARY || 'summary',
slug: process.env.NEXT_PUBLIC_NOTION_PROPERTY_SLUG || 'slug',
category: process.env.NEXT_PUBLIC_NOTION_PROPERTY_CATEGORY || 'category',
date: process.env.NEXT_PUBLIC_NOTION_PROPERTY_DATE || 'date',
tags: process.env.NEXT_PUBLIC_NOTION_PROPERTY_TAGS || 'tags',
icon: process.env.NEXT_PUBLIC_NOTION_PROPERTY_ICON || 'icon'
},

操作三步骤

  1. 新增一个字段 finish_date 在您的notion表头中,类型可以是Date或Text等
  2. 在blog.config.js 中加入自定义字段的配置
  // 自定义配置notion数据库字段名
  NOTION_PROPERTY_NAME: {
   ... 其它现有字段,
    finish_date: process.env.NEXT_PUBLIC_NOTION_PROPERTY_FINISH_DATE || 'finish_date',
  1. 在博客列表中展示这个字段
    以example主题为例,要将文章详情页展示的最后日期改为自定义的完结日期,相关代码在这

{locale.COMMON.LAST_EDITED_TIME}: {post?.lastEditedDay}

post?.lastEditedDay 改为 post?.finish_date

修改前

                    <span className='mx-2 text-gray-400 dark:text-gray-500'>
                        {locale.COMMON.LAST_EDITED_TIME}: {post?.lastEditedDay}
                    </span>

修改后

                    <span className='mx-2 text-gray-400 dark:text-gray-500'>
                        {locale.COMMON.LAST_EDITED_TIME}: {post?.finish_date}
                    </span>

@tangly1024 tangly1024 changed the title 自定义数据库表头后如何提取对应数据 【更强大的自定义表头】自定义数据库表头后如何提取对应数据 Nov 26, 2023
@tangly1024 tangly1024 added the good first issue Good for newcomers label Nov 26, 2023
@RylanBot
Copy link
Contributor Author

我觉得我的想法跟另外一个issue #1536 的思路有点类似?(虽然对方是固定的config,4.1版本后确实可以解决了)

但基于大家的想法都五花八门的,是否考虑给post新增一个自定义数据库字段(比如custom),然后对应的内容是JSON格式,方便用户自己填写key和value后在header渲染?

好想法

很好的想法,每一个POST留一个custom字段,方便使用,而且有很大的操作空间

更短期的方案

我觉得这个想法有些超前了,而且json字段用起来其实挺麻烦的,如果只是加一个字段例如 【完成日期】,可以围绕这个代码进行尝试修改:

关键就在于 blog.config.js 中式允许用户自定义表头的,利用这点我们可以添加无数自定义字段。

NotionNext/blog.config.js

Lines 359 to 382 in 23ac219

// 自定义配置notion数据库字段名
NOTION_PROPERTY_NAME: {
password: process.env.NEXT_PUBLIC_NOTION_PROPERTY_PASSWORD || 'password',
type: process.env.NEXT_PUBLIC_NOTION_PROPERTY_TYPE || 'type', // 文章类型,
type_post: process.env.NEXT_PUBLIC_NOTION_PROPERTY_TYPE_POST || 'Post', // 当type文章类型与此值相同时,为博文。
type_page: process.env.NEXT_PUBLIC_NOTION_PROPERTY_TYPE_PAGE || 'Page', // 当type文章类型与此值相同时,为单页。
type_notice:
process.env.NEXT_PUBLIC_NOTION_PROPERTY_TYPE_NOTICE || 'Notice', // 当type文章类型与此值相同时,为公告。
type_menu: process.env.NEXT_PUBLIC_NOTION_PROPERTY_TYPE_MENU || 'Menu', // 当type文章类型与此值相同时,为菜单。
type_sub_menu:
process.env.NEXT_PUBLIC_NOTION_PROPERTY_TYPE_SUB_MENU || 'SubMenu', // 当type文章类型与此值相同时,为子菜单。
title: process.env.NEXT_PUBLIC_NOTION_PROPERTY_TITLE || 'title', // 文章标题
status: process.env.NEXT_PUBLIC_NOTION_PROPERTY_STATUS || 'status',
status_publish:
process.env.NEXT_PUBLIC_NOTION_PROPERTY_STATUS_PUBLISH || 'Published', // 当status状态值与此相同时为发布,可以为中文
status_invisible:
process.env.NEXT_PUBLIC_NOTION_PROPERTY_STATUS_INVISIBLE || 'Invisible', // 当status状态值与此相同时为隐藏发布,可以为中文 , 除此之外其他页面状态不会显示在博客上
summary: process.env.NEXT_PUBLIC_NOTION_PROPERTY_SUMMARY || 'summary',
slug: process.env.NEXT_PUBLIC_NOTION_PROPERTY_SLUG || 'slug',
category: process.env.NEXT_PUBLIC_NOTION_PROPERTY_CATEGORY || 'category',
date: process.env.NEXT_PUBLIC_NOTION_PROPERTY_DATE || 'date',
tags: process.env.NEXT_PUBLIC_NOTION_PROPERTY_TAGS || 'tags',
icon: process.env.NEXT_PUBLIC_NOTION_PROPERTY_ICON || 'icon'
},

操作三步骤

  1. 新增一个字段 finish_date 在您的notion表头中,类型可以是Date或Text等
  2. 在blog.config.js 中加入自定义字段的配置
  // 自定义配置notion数据库字段名
  NOTION_PROPERTY_NAME: {
   ... 其它现有字段,
    finish_date: process.env.NEXT_PUBLIC_NOTION_PROPERTY_FINISH_DATE || 'finish_date',
  1. 在博客列表中展示这个字段
    以example主题为例,要将文章详情页展示的最后日期改为自定义的完结日期,相关代码在这

{locale.COMMON.LAST_EDITED_TIME}: {post?.lastEditedDay}

post?.lastEditedDay 改为 post?.finish_date

修改前

                    <span className='mx-2 text-gray-400 dark:text-gray-500'>
                        {locale.COMMON.LAST_EDITED_TIME}: {post?.lastEditedDay}
                    </span>

修改后

                    <span className='mx-2 text-gray-400 dark:text-gray-500'>
                        {locale.COMMON.LAST_EDITED_TIME}: {post?.finish_date}
                    </span>

按照步骤修改后部署失败

疑似解码失败

image

自行修改了一些其他文件

在 getNotion.js 和 getPageProperties.js 仿造之前的代码(虽不懂原理)引入了几行配置

image
image

部署成功了,但页面日期显示:

image

确认是日期类型解码失败

最后解决办法

把本地数据库的数据类型从 Date 修改为 Text 才显示成功

求问是否有优化读取日期的具体代码?

Repository owner locked and limited conversation to collaborators Mar 5, 2024
@tangly1024 tangly1024 converted this issue into discussion #2113 Mar 5, 2024

This issue was moved to a discussion.

You can continue the conversation there. Go to discussion →

Labels
enhancement New feature or request good first issue Good for newcomers help wanted Extra attention is needed
Projects
None yet
Development

No branches or pull requests

2 participants