【发布时间】:2020-12-09 02:28:50
【问题描述】:
我的模板中目前有两行代码
{{ apos.singleton(data.page, 'productsLimitedBy12', 'products',{...someoptions}) }}
...
{{ apos.singleton(data.page, 'singleproduct', 'products',{...someoptions}) }}
两者都是我在 'apostrophe-pieces-widgets' 的帮助下声明的同一个小部件。
我想在撇号将加载的片段限制为数字 12 和 1 之前过滤它们。如果我在 self.load 上过滤片段,我将只有 12 - filtered_pieces。但数量应该是静态的,如果数据库中符合黑名单和白名单标准的件数少于 12 个,则数量应少于 12 个。
基本上我想要一个黑白名单,选项“对 XYZ 可见,对 XYZ 不可见,对所有人可见”
例子:
- 在数组“company1, company2”中具有以下属性的用户 ABC 应该会看到指定为对 company1 或 company2 可见的每个片段,或者对所有人可见的片段。
- 在数组“notCompany1, notCompany2”中具有以下属性的用户 DEF 应该可以看到不是来自 company1 或 company2 的每一块。
我怎样才能做到这一点?是否可以在每次请求来自特定小部件的片段时包含将添加到查询中的过滤器?
EDIT-1:
用于指定数字 1 或 12 的确切含义。如果我登录时可以访问上下文菜单并单击小部件,我会得到以下选项: 选择(可以是全部、按标签或单独) 和显示的最大值。对于第一个产品小部件,我想要 12 件,其他只有 1 件。
如果您指的是代码中的字符串,这些只是为了理解我有两行我有相同的小部件但有不同的限制,我对其进行了调整以便更好地理解。
快速总结我的工作流程:
- 我通过上下文菜单给一些产品一些白名单和黑名单的公司
- 这些公司是通过连接添加到作品中的
- 我过滤 products-widget/index.js 中的片段;但问题是过滤发生在撇号选择 12 或 1 件之后。我想过滤,然后用撇号来限制碎片。
这是我的 product/index.js(当然是修剪过的):
module.exports = {
extend: 'apostrophe-pieces',
name: 'product',
label: 'product',
pluralLabel: 'products',
contextual: true,
addFields: [
{
name: 'title',
label: 'Title',
type: 'string',
required: true
},
{
name: '_companySelection',
withType: 'company',
label: 'Company-Selection',
type: 'joinByArray',
filters: {
areas: false,
joins: false,
projection: {
_id: 1,
title: 1
}
}
},
{
name: '_companySelectionNOT',
withType: 'company',
label: 'Company-Selection NOT',
type: 'joinByArray',
filters: {
areas: false,
joins: false,
projection: {
_id: 1,
title: 1
}
}
},
],
arrangeFields: [
{}
],
construct: function (self, options) {
self.beforeSave = function (req, piece, options, callback) {
// foo()
return callback();
};
}
};
这是我保存在 aposDocs 中的数据库对象(当然是修剪过的):
{
"_id": "ckfwbczu5002035ziaa8a2pzp",
"priority": 100000,
"validFrom": "2020-10-01",
"validUntil": "2020-12-31",
"trash": false,
"title": "EXAMPLE",
"createdAt": {
"$date": "2020-10-05T09:10:16.685Z"
},
"updatedAt": {
"$date": "2020-12-04T11:21:29.692Z"
},
"companySelectionIds": ['ck2q9raez01i04kous6fo59hj'],
"companySelectionNOTIds": ["cjn0e31up02ydm8otk4h4uhwq"],
}
这是我的 products-widgets/index.js(当然是修剪过的)
module.exports = {
extend: 'apostrophe-pieces-widgets',
filters: {
projection: {
...projectobj
}
},
label: 'Product Widget',
alias: 'products',
construct: function (self, options) {
var superLoad = self.load;
self.addHelpers({...helpers})
self.load = function (req, widgets, callback) {
var currentUser = req.data.user;
return superLoad(req, widgets, function (err) {
if (err) return callback(err);
else {
widgets._pieces = filtered(user,widgets._pieces);
callback()
}
});
};
}
};
也为了快速了解我的案例:
- 用户应该看到他/她的数据匹配的每个产品 companySelectionIds 或 companySelectionIds 数组为空。
- 用户不应该看到他/她的数据与 companySelectionNOTIds 数组匹配或与 companySelectionIds
【问题讨论】:
-
我不确定
12和1数字在这种情况下的作用。似乎重要的是,具有某些与公司相关配置的用户只能获得与这些配置匹配的部分。您能否分享一些与您如何设置该公司选项字段相关的代码? -
@alexbea 感谢您的评论,我调整了我的帖子并添加了更多信息。我希望它现在更清楚了,如果没有,请不要犹豫,要求更多,我会尽力提供更多信息。最好的问候。
标签: apostrophe-cms