Graphql 如何在GATSBY.js中获取博客文章的“最后更新日期”
你好,我不是开发人员,所以这个问题对你们来说很简单。我用的是盖茨比网站上的先发制人。该博客工作完美,但我需要提供我的标题下的最后更新时间。寻找一些解决办法,但没有一个奏效。你能提供一些帮助吗 gatsby-node.jsGraphql 如何在GATSBY.js中获取博客文章的“最后更新日期”,graphql,gatsby,Graphql,Gatsby,你好,我不是开发人员,所以这个问题对你们来说很简单。我用的是盖茨比网站上的先发制人。该博客工作完美,但我需要提供我的标题下的最后更新时间。寻找一些解决办法,但没有一个奏效。你能提供一些帮助吗 gatsby-node.js exports.onCreateNode = ({ node, getNode, actions }) => { const { createNodeField } = actions; if (node.internal.type !== 'MarkdownRe
exports.onCreateNode = ({ node, getNode, actions }) => {
const { createNodeField } = actions;
if (node.internal.type !== 'MarkdownRemark') {
return;
}
const fileNode = getNode(node.parent);
createNodeField({
node,
name: 'modifiedTime',
value: fileNode.mtime
});
};
`````````````````````````
PostListing.jsx
class PostListing extends React.Component {
getPostList() {
const postList = [];
this.props.postEdges.forEach(postEdge => {
postList.push({
path: postEdge.node.fields.slug,
tags: postEdge.node.frontmatter.tags,
cover: postEdge.node.frontmatter.cover,
title: postEdge.node.frontmatter.title,
date: postEdge.node.fields.date,
excerpt: postEdge.node.excerpt,
timeToRead: postEdge.node.timeToRead,
modifiedTime:postEdge.node.modifiedTime
});
});
return postList;
}
render() {
const postList = this.getPostList();
return (
<div className='posts'>
{/* Your post list here. */
postList.map(post => (
<Fragment>
<div className='singlePost__date'>
<h4 style={{color:'white'}}> {post.modifiedTime}</h4>
</div>
<div className='singlePost__Title'>
<Link classname='singlePost' to={post.path} key={post.title}>
<h1 className='singlePost__title'>{post.title}</h1>
</Link>
</div>
</Fragment>
))}
</div>
);
}
}
export default PostListing;
I expect something like
TITLE
last updated : 3/2/2019
编辑:下面的答案实际上是错误的,因为文件。modifiedTime是标记文件本身的modifiedTime,而不是内容的modifiedTime。例如,如果您将博客部署在Netlify上,那么其中文件的修改时间将与本地环境不同
我认为正确的答案是分开追踪。如果您使用的是像NetlifyCMS这样的CMS,您可以创建一个字段,在每次编辑时自动更新日期/时间
无论您在哪里查询降价文件,都可以使用以下字段:
query {
allMarkdownRemark {
edges {
node {
frontmatter { /* other stuff */ }
parent {
... on File {
modifiedTime(formatString: "MM/DD/YYYY")
}
}
}
}
}
}
并通过postEdge.node.parent.modifiedTime在您的中访问它:下面的答案实际上是错误的,因为文件。modifiedTime是标记文件本身的modifiedTime,而不是内容的modifiedTime。例如,如果您将博客部署在Netlify上,那么其中文件的修改时间将与本地环境不同
我认为正确的答案是分开追踪。如果您使用的是像NetlifyCMS这样的CMS,您可以创建一个字段,在每次编辑时自动更新日期/时间
无论您在哪里查询降价文件,都可以使用以下字段:
query {
allMarkdownRemark {
edges {
node {
frontmatter { /* other stuff */ }
parent {
... on File {
modifiedTime(formatString: "MM/DD/YYYY")
}
}
}
}
}
}
并通过postEdge.node.parent.modifiedTime访问它。您可以使用存储在Git中的信息获取文件修改的最新时间 第一种方法 手动跟踪它,但如果忘记编辑修改的时间,则很容易出错。因此,如果你不能让其他人工作,我建议你把它作为最后的选择 第二种方法 您可以编辑gatsby-node.js以从Git中提取信息,如下所示: const{execSync}=requirechild\u进程 exports.onCreateNode={node,actions}=>{ // ... 如果node.internal.type===markdown备注{ const gitoauthortime=execSync `git log-1-pretty=格式:%aI${node.fileAbsolutePath}` .托斯特林 actions.createNodeField{ 节点, 姓名:gitAuthorTime, 值:gitAuthorTime, } } // ... } 然后,在模板中,您可以获取它:
query($slug: String!) {
markdownRemark(fields: { slug: { eq: $slug } }) {
# ...
fields {
gitAuthorTime
}
# ...
}
}
最后,在JSX中使用它,如下所示:
import React from "react"
const BlogPost = (props) => {
const { gitAuthorTime } = props.data.markdownRemark.fields
render(<p>Updated at: ${gitAuthorTime}</p>)
}
export default BlogPost
如果你想查看的话,我在我的博客文章中写了更多关于这方面的内容。你可以使用存储在Git中的信息获取文件修改的最新时间 第一种方法 手动跟踪它,但如果忘记编辑修改的时间,则很容易出错。因此,如果你不能让其他人工作,我建议你把它作为最后的选择 第二种方法 您可以编辑gatsby-node.js以从Git中提取信息,如下所示: const{execSync}=requirechild\u进程 exports.onCreateNode={node,actions}=>{ // ... 如果node.internal.type===markdown备注{ const gitoauthortime=execSync `git log-1-pretty=格式:%aI${node.fileAbsolutePath}` .托斯特林 actions.createNodeField{ 节点, 姓名:gitAuthorTime, 值:gitAuthorTime, } } // ... } 然后,在模板中,您可以获取它:
query($slug: String!) {
markdownRemark(fields: { slug: { eq: $slug } }) {
# ...
fields {
gitAuthorTime
}
# ...
}
}
最后,在JSX中使用它,如下所示:
import React from "react"
const BlogPost = (props) => {
const { gitAuthorTime } = props.data.markdownRemark.fields
render(<p>Updated at: ${gitAuthorTime}</p>)
}
export default BlogPost
如果你想查看的话,我在我的博客文章中写了更多关于这方面的内容