Ограничение количества элементов в gatsby-plugin-feed - PullRequest
1 голос
/ 01 апреля 2020

Внутренние данные для gatsby-plugin-feed , похоже, указывают на то, что мы можем установить ограничение на количество сообщений, отображаемых в ленте:

{
  // Create a default RSS feed. Others may be added by using the format below.
  feeds: [
    {
      query: `
      {
        allMarkdownRemark(
          limit: 1000,
          sort: {
            order: DESC,
            fields: [frontmatter___date]
          }
        ) {
          edges {
            node {
              frontmatter {
                title
                date
              }
              fields {
                slug
              }
              excerpt
              html
            }
          }
        }
      }
    `,
    ...
  ]
}

Когда я пытаюсь изменить limit на 10 в моем собственном определении в пределах gatsby-config.js, это, похоже, не дает никакого эффекта. Существует ли стандартный способ ограничения количества элементов в ленте RSS, чтобы в нем не было более 250 сообщений?

Ответы [ 2 ]

1 голос
/ 03 апреля 2020

Я использую gatsby-plugin-feed в моем личном проекте. Я попытался использовать limit в запросе GraphQL, как вы предложили в своем вопросе, и в моем случае это сработало.

Я предполагаю, что какой-то другой плагин или код в вашем проекте мешает генерации xml. Единственный способ отладить вашу проблему - это создать базовый проект и попытаться сначала ограничить ваши элементы. Я помню, что я дважды перечислил gatsby-plugin-feed по ошибке, таким образом упрощая инструкции из первого списка.

Это мой код. Может быть, это поможет вам:

// gatsby-config.js

{
  resolve: `gatsby-plugin-feed`,
  options: {
    query: `
      {
        site {
          siteMetadata {
            title
            description
            siteUrl
            site_url: siteUrl
          }
        }
      }
    `,
    feeds: [
      {
        serialize: ({ query: { site, allMarkdownRemark } }) => {
          return allMarkdownRemark.edges.map(edge => {
            return Object.assign({}, edge.node.frontmatter, {
              description: edge.node.excerpt,
              url: site.siteMetadata.siteUrl + "/blog" + edge.node.fields.slug,
              guid: site.siteMetadata.siteUrl + "/blog" + edge.node.fields.slug,
              categories: ["Startup"],
              custom_elements: [
                { "content:encoded": edge.node.html },
                { "author": edge.node.frontmatter.author },
                { "language": "en" },
              ],
            });
          });
        },
        query: `
          {
            allMarkdownRemark(
              sort: { order: DESC, fields: [frontmatter___date] },
              filter: {fileAbsolutePath: {regex: "content/blog/"}},
              limit: 2
            ) {
              edges {
                node {
                  excerpt
                  html
                  fields { slug }
                  frontmatter {
                    title
                    date
                    author
                  }
                }
              }
            }
          }
        `,
        output: "/rss.xml",
        title: "Blog",
        match: "^/blog/",
      },
    ],
  },
},

0 голосов
/ 10 апреля 2020

@ Ссылка на документацию Альберта Скибински в его комментарии помогла мне понять, что RSS-канал генерируется только на gatsby build. Я вносил изменения и пытался запустить gatsby develop, что никак не повлияло на вывод, который я проверял в папке public.

Я не большой поклонник перезаписи значений по умолчанию, которые не необходимо переопределить, поэтому я собрал свой собственный конфигурационный код, импортировав значения по умолчанию из gatsby-plugin-feed/internals:

const gatsbyFeedOpts = require('gatsby-plugin-feed/internals')

// Copy and replace limit in default options
let feedOpts = gatsbyFeedOpts.defaultOptions
feedOpts.feeds[0].query = feedOpts.feeds[0].query.replace(
  'limit: 1000',
  'limit: 10'
)

module.exports = {
  siteMetadata: {
    // Excluded for brevity
  },
  plugins: [
    // Other plugins excluded for brevity
    {
      resolve: `gatsby-plugin-feed`,
      options: feedOpts,
    },
  ],
}

Интересно отметить, что хотя в документации сказано, что нам нужно реализовать метод serialize в конфигурации фида он не был включен в импортированные значения по умолчанию, которые я здесь использую. Это может вызвать проблемы в будущих версиях gatsby-plugin-feed, но он отлично работает с версией, которую я сейчас использую (2.4.1).

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