Я использую Drupal 8 как безголовую CMS с Гэтсби, генерирующим статические страницы.
В Drupal я настроил несколько типов узлов (Article, Image, other ...). Все сущности имеют brand
и category
срочные отношения.
category
- это одиночный выбор, а brand
- это множественный выбор
Гэтсби создает страницы из моего шаблона по URL-адресам, как.
http://example.com/category-1/brand-1/
http://example.com/category-1/brand-2/
http://example.com/category-2/brand-1/
http://example.com/category-2/brand-2/
Статьи и узлы изображений с выбранными терминами будут отображаться на соответствующих URL.
Проблема, с которой я столкнулся, заключается в том, что я изменил термин бренда на множественный выбор, некоторые URL не создаются.
Из-за field_brand[0].name
Гэтсби будет создавать URL только для первого выбора бренда в узле товара.
// gatsby-node.js
exports.createPages = ({ graphql, actions }) => {
const { createPage } = actions;
const pageTemplate = path.resolve(`src/templates/pageTemplate.js`);
return graphql(`
{
taxonomyTermBrand {
field_colours
name
}
allNodeImage {
nodes {
relationships {
field_image_drop {
uri {
url
}
}
}
}
}
allNodeArticle {
nodes {
body {
processed
}
relationships {
field_brand {
name
}
field_category {
name
}
}
}
}
}
`, { limit: 1 }).then(result => {
if (result.errors) {
throw result.errors
}
result.data.allNodeArticle.nodes.forEach(node => {
const brand_path = node.relationships.field_brand[0].name;
const category_path = node.relationships.field_category.name;
createPage({
path: `${category_path}/${brand_path}`,
component: pageTemplate,
context: {
brandName: node.relationships.field_brand[0].name,
categoryName: node.relationships.field_category.name,
},
})
})
})
}
По существу значение taxonomyTermBrand.name
совпадает с node.relationships.field_brand[0].name
, когда данные передаются в шаблон, но я не могу использовать taxonomyTermBrand.name
, потому что path
в createPage
находится в allNodeArticle.forEach()
Есть ли лучший подход или другой способ задания путей и отображения помеченного содержимого на этих страницах?