Можно ли создать подзапрос GraphQL для создания массива как элемента markdownRemark? - PullRequest
1 голос
/ 27 марта 2019

Я делаю веб-страницу для языковой школы и сейчас пытаюсь создать страницы о преподаваемых там языках. Предполагается, что они должны включать название языка, краткое описание и список элементов расписания, связанных с ними. В Netlify CMS я сделал для них 2 коллекции. Один из них имеет общую информацию о языке, а другой содержит элементы расписания.

Когда я захожу на веб-страницу языка, я хотел бы получить общую информацию из коллекции language_pages и массива schedule_items с тем же значением в поле language, но я вроде почесывая голову, пытаясь понять, как это сделать.

Каждая из 2 коллекций включает поле templateKey, которое различает коллекции. Значения language-post для общей информации о языке и schedule-item для элементов расписания.

Мой основной запрос для получения страницы на одном языке следующий:

query {
 markdownRemark(frontmatter: { language: { eq: "Niemiecki" }}) {
  html
    frontmatter {
      language
      description
    }
  }
}

Язык полей также существует в коллекции элементов расписания, поэтому я думаю, что мне следует каким-то образом использовать его для фильтрации коллекции. Однако, я полный noob из GraphQL, и я пока не нашел, и пример того, что я пытаюсь здесь сделать, уже готов. Моя полная подделка привела к чему-то вроде этого:

 query {
  markdownRemark(frontmatter: { language: { eq: "Niemiecki" }}) {
    html
    frontmatter {
      language
      description

    }
    children {
      id
      group
      room
      time
    }
  }
}

Что даже не работает должным образом, и я, честно говоря, не знаю, как я мог бы заставить его работать.

1 Ответ

2 голосов
/ 27 марта 2019

Вы можете сделать 2 запроса бок о бок и отфильтровать по имени папки с помощью регулярного выражения:

query LanguageInfo($lang: String) {
  languagePage: markdownRemark(
    frontmatter: { language: { eq: $lang }},
    fileAbsolutePath: {
        regex: "/your-language-folder-name/"
      }
  ) {
    frontmatter { ... }
  }

  scheduledItem: markdownRemark(
    frontmatter: { language: { eq: $lang }},
    fileAbsolutePath: {
        regex: "/your-schedule-folder-name/"
      }
  ) {
    frontmatter { ... }
  }
}
  • lang может быть переменной, которую вы передаете в действие createPage при создании страницы программным путем,Затем вы можете использовать его в запросе шаблона страницы.Пример из документа на тот случай, если вам это нужно:
createPage({
  path: `/my-sweet-new-page/`,
  component: path.resolve(`./src/templates/my-sweet-new-page.js`),
  // The context is passed as props to the component as well
  // as into the component's GraphQL query.
  context: {
    lang: `english`,
  },
})
  • languagePage & scheduledItem - псевдоним, который облегчает получение ваших данных.Вы можете получить доступ к таким данным, как data.languagePage... & data.scheduledItem...

Дайте мне знать, если это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...