我有一个文档类型page
,它包含一个blocks
数组,这些数组是对其他对象类型的引用。当我获取page
文档的数据时,它返回文档的草稿数据,但不返回数组中的引用。我写了这样的查询,它返回文档的草稿和非草稿数据:
*[_type == "page" && slug.current == "${querySlug === '/' ? 'home' : querySlug}"] {
_id,
title,
description,
showSubNav,
subNavigation[] -> {slug, title},
blocks[] -> {
...,
heroCardBlock -> {...},
oneColumnContent -> {...},
featuredNews -> {...},
newsCategories[] -> {...},
newsList[] -> {..., selectedCategory -> {...}},
caseStudiesListSource[] -> {...},
}
}
这将返回page
文档的草稿和非草稿数据,草稿可用于未引用的块,例如标题、描述、showSubNav等,但对于subNavigation和块数组(引用其他对象类型的数组),草稿数据不会返回,查询中仅返回已发布的数据。
我的桌面结构是这样的:Sanity Desk Structure
我如何获得这些参考的草稿数据?
2条答案
按热度按时间06odsfpq1#
解引用操作符(
->
)将始终只返回已发布的内容。要获取草稿内容,您需要使用子查询(并且查询必须经过身份验证,但如果您获取的是page
类型的草稿,则必须如此)。考虑一个更简单的例子可能是最简单的,然后你可以扩展到更大的查询。如果我们考虑这个:
我希望你能取回已发表的
heroCardBlock
参考文献。这个修订版应该强调取回已发表的参考文献和草稿参考文献之间的区别:我不知道
<HERO_CARD_BLOCK_TYPE>
是什么,但你需要指定它来帮助使这个查询更有效。需要双插入符号(^.^.
)来遍历两次到适当的范围。需要[0]
是因为draft
子查询将返回一个数组,即使它总是只有一个文档;指定此值会导致published
和draft
被格式化为相同的格式。66bbxpm52#
根据Geoff Ball的回答和本页:https://www.sanity.io/schemas/fetch-the-draft-or-published-version-of-a-document-Pb0aymVu0PGBy9kYL3Azh
我们可以这样做
它看起来像下面的结果,但首选草稿
您甚至可以在
->
或[0])}
之后使用{
...}
语法!