【发布时间】:2022-07-09 22:00:46
【问题描述】:
我们将位置(和位置页面)作为我们网站上的主要页面类型。
我们使用撇号事件模块来包含基本事件(日期、时间、位置等)信息,然后通过相关位置页面中的小部件呈现这些信息。我们的事件/事件页面定义有一个必需的“位置”字段来关联位置,并按预期工作。我们定义了一个“featured-event-widgets”,用于呈现单个选定的事件。
我正在尝试实现事件模块标准“events-widgets”,它呈现多个事件,但是我想按关联位置过滤返回的事件并且遇到了问题。
默认实现按预期工作 - 它找到 x 个即将发生的事件(即尚未发生/完成的事件),其中 x 是小部件中指定的任意数字,并将事件集合传递给 widget.html表达式模板。
我的问题是,默认小部件会提供下一个事件,而不管它们与哪个位置相关联,即虽然位置 A 中可能定义了 5 个即将发生的事件,但如果位置 C 和 B 也有即将发生的事件,那么小部件将返回来自 A 的 2 个事件,来自 B 的 2 个事件,以及来自 C 的 1 个事件,而不是我想要的来自位置 A 的 5 个事件。
我已更新事件小部件 index.js 以包含所需的位置选择。
module.exports = {
label: 'Events Widget',
addFields: [
{
name: 'title',
label: 'Title',
type: 'string',
required: true
},
{
name: '_location',
label: 'Location',
required: true,
withType: 'location',
type: 'joinByOne',
filters: {
projection: {
title: 1,
slug: 1,
}
}
}
]
所以我的小部件定义有一个关联的位置对象,并且我的所有事件片段都有一个关联的位置,但是我在尝试使用该信息来过滤底层光标返回到小部件的内容时遇到了障碍。 html模板。
虽然我可以/可以在模板中进行过滤,但通过返回任意数量的事件以(主要)确保我获得所需位置所需的事件数量,这似乎是一种失败的方法。
我认为将 addFilters: [...] 定义添加到 index.js 功能会满足我的需求,但我无法让这种方法发挥作用,例如
addFilters: [
{
name: '_location',
label: 'Location'
}
]
在 Google 和 StackOverflow 上花了很多时间之后,我似乎可以通过覆盖和扩展 index.js 中的默认构造定义并使用 self.widgetCursor 来实现这一点,但是我无法做到确定在哪里可以找到小部件定义中指定的位置(大概埋在 req 中的某个地方)来执行此操作。
construct: function(self, options) {
// Append upcoming flag by extending widgetCursor.
var superWidgetCursor = self.widgetCursor;
self.widgetCursor = function(req, criteria) {
return superWidgetCursor(req, criteria).upcoming(true);
};
}
我希望我遗漏了一些显而易见的东西,有人可以向我指出:)
非常感谢,
肖恩
【问题讨论】: