问题描述
我想知道是否可以根据设定的标准过滤 Sanity Studio 中的内容。例如,返回所有已发布的帖子或特定类别内的所有帖子等。
这是一段简短的视频,展示了我的意思:https://www.loom.com/share/5af3a9dd79f045458de00e8f5365cf00
这可能吗?如果是这样,是否有任何有关如何操作的文档?
谢谢。
解决方法
我发现制作各种过滤器的最简单方法是使用结构生成器。使用它,您可以添加任意数量的部分,为它们命名,并以 groq 和 params 的形式为其提供您自己的过滤器。
Se 文档:https://www.sanity.io/docs/structure-builder-introduction
举个例子,我在 deskStructure.js 文件中添加了一个 S.listItem
,用于获取所有缺少模块字段的文章。
export default async () =>
S.list()
.title('Content')
.items([
// ...
S.listItem() // <-- New root item for my filters
.title('My article filters')
.icon(FaRegCopyright)
.child(
S.list() // <-- List of filters
.title('My article filters')
.items([
S.listItem() // <-- Item with filter description
.title('Articles without module')
.icon(FaCogs)
.child(
S.documentList() // <-- Filtered list of articles
.title('Articles without module')
.menuItems(S.documentTypeList(menuType).getMenuItems())
.filter('_type == $type && !defined(module)')
.params({ type: 'article' })
),S.listItem(),// more filters
S.listItem(),// more filters
])
),// ...
它不会对一个元素列表进行不同的过滤。更重要的是制作不同的列表,这些列表都已准备好根据您的需要进行过滤。你可以给它任何你想要的图标和文字。马铃薯/potàto,'-)
在排序列表中,除了添加更多排序之外,我认为您无能为力。当元素列表变大时它不起作用,所以我不会打扰。但它在排序顺序部分:https://www.sanity.io/docs/sort-orders