【问题标题】:On Gatsby CMS how can i set the about page as a index page在 Gatsby CMS 上,我如何将关于页面设置为索引页面
【发布时间】:2019-07-31 18:01:35
【问题描述】:

您好,我用 netlify 安装了 gatsby cms starter,这个项目带有一个名为 kaldi 的启动模板,它有一个基本的帖子和页面,很容易创建字段和构建 grapql 数据,但我混淆了路由的工作方式,例如我找不到将abot页面作为索引页面的方法

这是来自帖子字段的数据信息的索引页面

import React from 'react'
import PropTypes from 'prop-types'
import { Link, graphql } from 'gatsby'
import Layout from '../components/Layout'

export default class IndexPage extends React.Component {
  render() {
    const { data } = this.props
    const { edges: posts } = data.allMarkdownRemark

    return (
      <Layout>
        <section className="section">
          <div className="container">
            <div className="content">
              <h1 className="has-text-weight-bold is-size-2">Latest Stories</h1>
            </div>
            {posts
              .map(({ node: post }) => (
                <div
                  className="content"
                  style={{ border: '1px solid #eaecee', padding: '2em 4em' }}
                  key={post.id}
                >
                  <p>
                    <Link className="has-text-primary" to={post.fields.slug}>
                      {post.frontmatter.title}
                    </Link>
                    <span> &bull; </span>
                    <small>{post.frontmatter.date}</small>
                  </p>
                  <p>
                    {post.excerpt}
                    <br />
                    <br />
                    <Link className="button is-small" to={post.fields.slug}>
                      Keep Reading →
                    </Link>
                  </p>
                </div>
              ))}
          </div>
        </section>
      </Layout>
    )
  }
}

IndexPage.propTypes = {
  data: PropTypes.shape({
    allMarkdownRemark: PropTypes.shape({
      edges: PropTypes.array,
    }),
  }),
}

export const pageQuery = graphql`
  query IndexQuery {
    allMarkdownRemark(
      sort: { order: DESC, fields: [frontmatter___date] },
      filter: { frontmatter: { templateKey: { eq: "blog-post" } }}
    ) {
      edges {
        node {
          excerpt(pruneLength: 400)
          id
          fields {
            slug
          }
          frontmatter {
            title
            templateKey
            date(formatString: "MMMM DD, YYYY")
          }
        }
      }
    }
  }
`

我更改了过滤器以引用关于页面,这为我带来了有关字段的所有数据表单,但在 netlify 内容管理器中没有显示预览页面

有什么想法吗?

【问题讨论】:

    标签: javascript reactjs gatsby netlify netlify-cms


    【解决方案1】:

    Gatsby 默认会根据文件名生成路径。因此,如果您在 pages/index.js 有一个文件,它将生成一个名为 public/index.html 的文件,该文件通常用作根目录索引。

    要更改此页面,您有几个选项。

    1. 将您的服务器配置为将 public/about.html 作为根目录索引,尽管这种情况并不常见,并且以后可能难以调试。
    2. pages/index.js 替换为您的pages/about.js 文件的内容。
    3. 默认从pages/index.js 导出pages/about.js 的顶级组件

    【讨论】:

    • 如果 about 页面是使用页面模板和 graphQL 查询以编程方式生成的,那么我不能只将页面模板导出到 index.js 中,对吗?那么唯一的选择就是我将服务器设置为以编程方式创建的页面作为根目录索引。
    • @user2030942 您需要做的就是在 gatsby-node.js 中更改传递给 createPage 的路径。例如。 createPage({ path: "/index/", component: "./src/templates/anything.jsx" })
    • 我的 createPage 函数如下所示: allWordpressPage.edges.forEach(edge => { if (edge.node.status === 'publish') { createPage({ path: edge.node.slug ,组件:斜线(pageTemplate),上下文:{ id:edge.node.id,父:edge.node.wordpress_parent,wpId:edge.node.wordpress_id,}})}});
    • 你是不是建议我在第一次调用创建/index/路径后再次调用createPage,传入主页的id?
    • @user2030942 不,我的意思是,如果您希望 slug about 成为 index,您可以直接覆盖它。如果你有不同的问题,你应该打开一个单独的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 2012-03-25
    • 2011-07-09
    • 1970-01-01
    相关资源
    最近更新 更多