#graphql #gridsome #yaml-front-matter #gridsome-plugin #gridsome-source-filesystem
#graphql #gridsome #yaml-front-matter #gridsome-плагин #исходный код сетки-файловая система
Вопрос:
Я использую @gridsome/source-filesystem
с этой конфигурацией:
{
use: '@gridsome/source-filesystem',
options: {
typeName: 'Post',
path: 'content/posts/**/*.md',
refs: {
tags: {
typeName: 'Tag',
create: true
},
author: {
typeName: 'Author',
create: true
}
}
},
}
Теперь я хочу добавить description
только для одного тега, поэтому я создал новый документ в content/posts/my-tag.md
:
---
title: Tag-Title
description:tag description
---
Как я могу подключить этот документ к allTags
коллекции?
Или любым другим способом (например, без @gridsome/source-filesystem
for Tags
) добавить description
к exists node
в collection
?
Ответ №1:
Если вы хотите просто добавить allTags
, вы можете создать markdown для этого.
в gridsome.config.js
...
{
use: '@gridsome/source-filesystem',
options: {
path: 'content/tags/**/*.md',
typeName: 'Tag'
},
}
...
добавить файл content/tags/my-tag.md
---
title: Tag-Title
description: tag description
---
вы можете использовать
{
allTag {
edges {
node {
id
title
description
}
}
}
}
{
"data": {
"allTag": {
"edges": [
{
"node": {
"id": "******", // random hash
"title": "Tag-Title",
"description": "tag description"
}
},
{
"node": {
"id": "foo",
"title": "foo",
"description": ""
}
},
...
но это не позволяет подключиться к вашему Post
.
или просто добавить описание в Tag
, вы можете использовать addSchemaResolvers
. в gridsome.server.js
module.exports = function(api) {
api.loadSource(async ({ addSchemaResolvers }) => {
addSchemaResolvers({
Tag: {
description: {
type: "String",
resolve(obj) {
if (!obj.description) {
// coding your logic
return "set description";
} else {
return obj.description;
}
}
}
}
});
});
};
Комментарии:
1. Это кажется хорошим направлением. Я понимаю, что логика будет выполняться при каждом обращении к свойству. Невозможно загрузить всю информацию один раз? То есть добавить информацию поверх информации, сгенерированной из исходной файловой системы?
2. Если вам не нужно создавать тег в Post, вы можете связать файлы markdown друг с другом.
{ typeName: 'Tag', create: false }
и добавитьid: your-id
кcontent/tags/my-tag.md
, добавитьtags: ['your-id']
кcontent/posts/**/*.md
. Если вам нужен образец, я добавлю другой ответ, просто запросите его.3. Но таким образом я должен создать
x-tag.md
файл для каждого тега вcontent/posts/**/*.md
, верно? Здесь есть компромисс — создавать теги в отдельных файлах или с помощьюpost
, но нет официального способа ** создать из post, если не существует в другом файле **? Если нет, я отмечу этот вопрос как ответ, поскольку в моем вопросе есть ограничение не создавать.md
для каждого тега, поэтому другое решение не будет принято.4. вы правы. извините, я не могу придумать лучшего способа сделать это: ( спасибо