Как мне использовать сбор данных с gatsby и Netlify CMS

#javascript #reactjs #gatsby #netlify #netlify-cms

#javascript #reactjs #gatsby #netlify #netlify-cms

Вопрос:

Итак, я просто настроил установщик Gatsby в один клик с помощью Netlify CMS.

Я пытаюсь выяснить, как реализовать способ добавления сотрудников на страницу контактов по умолчанию.

в jekyllrb было определено простое содержимое коллекции _config.yml , из которого вы могли извлекать данные.

существует ли аналогичный способ использования «пользовательских» наборов данных с Gatsby? мне не нужна отдельная страница для каждого сотрудника, просто способ зациклить всех участников для отображения на странице и интеграции с Netlify-CMS, чтобы я мог ДОБАВЛЯТЬ / ОБНОВЛЯТЬ / УДАЛЯТЬ сотрудника. (я думаю, я хочу сделать это в вызываемом компоненте react <Staff /> или что-то подобное

я попытался добавить папку с данными, в которой, как я думал, может храниться md-файл для извлечения коллекций. но я получаю сообщение об ошибке, что src/data/collection.md файлу нужен шаблон (например) templateKey: product-page

 {
 resolve: `gatsby-source-filesystem`,
 options: {
   name: `data`,
   path: `${__dirname}/src/data/`,
   ignore: [`**/.*`], // ignore files starting with a dot
   },
 },
 

я понимаю, что это расплывчатый вопрос, но, может быть, кто-нибудь может указать мне правильное направление?

Ответ №1:

существует аналогичный способ использования «пользовательских» наборов данных с Gatsby?

Конечно, есть. Создайте /static папку в корне вашего проекта (если вы еще не создали ее). Там создайте другую /admin папку и поместите туда config.yml. Окончательная структура такова: /static/admin/config.yml .

По сути, config.yml файл, в котором ваши коллекции и CMS будут настроены на основе обширной документации от Netlify. Он также предоставляет localhost:8000/admin URL-адрес (или yourDomain.com/admin на рабочем месте) для входа в вашу частную CMS и выполнения действий CRUD с вашими коллекциями.

Случай, который вы описываете, может выглядеть примерно так:

 collections:
  - label: "Pages"
    name: "pages"
    files:
      - label: "Contact"
        name: "contact"
        file: "site/content/about.yml"
        fields:
          - {name: templateKey, label: Template Key, required: true, widget: hidden, default: contact}
          - {label: Title, name: title, widget: string}
          - label: Team
            name: team
            widget: list
            fields:
              - {label: Name, name: name, widget: string}
              - {label: Position, name: position, widget: string}
              - {label: Photo, name: photo, widget: image}
 

Примечание: вам нужно будет настроить несколько обязательных параметров, прежде чем начинать с коллекций. Поскольку они являются частными, я их опустил.

С помощью этого фрагмента вы создаете коллекцию страниц папок со страницей контактов внутри, остальные поля понятны сами по себе, используйте документацию в качестве поддержки для понимания полей и параметров по умолчанию / необязательных параметров каждого объекта.

На вашей странице контактов вам просто нужно использовать запрос страницы, отфильтрованный по templateKey полю:

 import { graphql } from 'gatsby';
import React, { useState } from 'react';
import Layout from '../components/templates/Layout/Layout';

const Contact = ({ data }) => {
   console.log("your staff data is", data)

  return <Layout>
          <Staff staff={data.team}/>
  </Layout>;
};

export const contactData = graphql`
    query getContactData {
        contact: allMarkdownRemark (
            filter: { frontmatter: { templateKey: { eq: "contact" }}}) {
            edges {
                node {
                    html
                    frontmatter {
                        team {
                          name
                          position
                          photo
                        }
                    }
                }
            }
        }
`;
 

Комментарии:

1. Спасибо, но я не уверен, что понимаю это. Я использую github.com/netlify-templates/gatsby-starter-netlify-cms и я не хочу добавлять страницу, просто файл для чтения. например, добавьте файл src/data/staff.md, содержащий всех сотрудников, а затем сможете прочитать его в компоненте react, который я использую на странице контактов.

2. Это работает в обоих направлениях @csk87 . Добавление коллекции файлов создаст staff.md и заполнит CMS этими данными, и наоборот, как только вы измените данные из CMS, файл .md также будет обновлен.