Как мне изменить заголовок поста Гэтсби?

Вы можете использовать LENGTH() для этого

SELECT * FROM department WHERE  (LENGTH(loc) - LENGTH(REPLACE(UPPER(loc),'O'))) = 1
1
задан cbillowes 20 January 2019 в 04:35
поделиться

2 ответа

Мне довелось изменить способ gatsby-transformer-remark модифицировать frontmatter, и это напомнило мне этот вопрос. То, как вы это сделали, прекрасно, я думаю, я просто хочу предоставить другой вариант. Вот как вы можете переопределить frontmatter:

Внутренне, gatsby-transformer-remark использовать graymatter для анализа frontmatter уценки (трактуя md как yaml). Мы можем изменить поведение парсера по умолчанию Graymatter, чтобы напрямую переопределить frontmatter.

// should come with `gatsby-transformer-remark` by default
// if it's missing, install it `yarn add js-yaml`
const yaml = require('js-yaml');

const customParser = (str) => {
  const result = yaml.safeLoad(str);

  // modify `title`. In Gatsby, `title` is guaranteed to exist,
  // but you might want to add a check for other properties.
  if (result.title) {
    result.title = result.title.toUpperCase();
  }
  return result;
}

А затем передать его в gatsby-transformer-remark, как

{
  resolve: `gatsby-transformer-remark`,
  options: {
+   engines: {
+     yaml: customParser,
+   },
    plugins: [
      ...
    ],
  },
},

Результаты запроса Гэтсби:

{
  "data": {
    "markdownRemark": {
      "frontmatter": {
        "title": "I AM CAPITALIZED"
      }
    }
  }
}
0
ответ дан Derek Nguyen 20 January 2019 в 04:35
поделиться

Я нашел решение, которое я считаю взломанным. Frontmatter может быть переопределен во время создания узла onCreateNode путем обновления узла, прежде чем он будет передан в массив узлов. Я использую массив postNodes (глобальный массив для контекста узла Гэтсби) для создания страниц моего блога.

createNodeField({ node, name: "slug", value: slug })
node.frontmatter.title = _.startCase(_.toLower(node.frontmatter.title))
postNodes.push(node)

Затем, когда создаются страницы сообщений exports.createPages, используются postNodes, которые имеют обновленные значения.

    let idx = 0;
    postNodes.map(node => {
      let previous = idx - 1 < 0 ? postNodes[postNodes.length - 1] : postNodes[idx - 1]
      let next = idx + 1 >= postNodes.length ? postNodes[0] : postNodes[idx + 1]

      createPage({
        path: node.fields.slug,
        component: postPage,
        context: {
          slug: node.fields.slug,
          prev: previous.fields.slug,
          next: next.fields.slug
        }
      })
      idx += 1;
    })

Примечание Предыдущая и следующая не работали на момент написания этого кода, поэтому его необходимо пересмотреть.

0
ответ дан cbillowes 20 January 2019 в 04:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: