在我们的项目中,我们有几个细化列表,它们运行正常。但是,它们是默认排序,计算字母数字,正在应用。在我们的情况下,我的每个细化列表项都有一个“等级”属性,但我无法访问它,因为 API 正在控制返回的内容。
根据documentation似乎只有三种排序选择。
有没有办法解决这个问题?
例如,此代码产生以下结果。
search.addWidget(
instantsearch.widgets.refinementList({
container: '#outsideDiameter',
attributeName: 'outsideDiameter.description',
operator: 'or',
sortBy: ["name:asc"],
limit: 5,
showMore: true,
templates: {
header: getHeader('Outside Diameter'),
},
})
);
我希望列表项按小数值升序排序。换句话说:3/16", 1/4", 5/16", ..., 4.5mm, 6.0mm, etc... 每个值都有我之前提到的“等级”属性。
那可能吗?
最佳答案
对于更高级的排序,有几个选项:
renderingContent.facetOrdering
进行手动分面排序参数:https://www.algolia.com/doc/api-reference/api-parameters/renderingContent/ index.setSettings({
renderingContent: {
facetOrdering: {
values: {
size: {
order: ['1/3"', '1/2"', '17m'],
sortRemainingBy: 'hidden',
},
},
},
},
});
{
"size": "0015mm - 1/2\""
}
完成此操作后,按字母顺序排序将具有升序。对于显示,您可以使用以下方法删除前导零:refinementList({
transformItems(items) {
return items.map((item) => ({
...item,
label: item.label.replace(/^0+/, ''),
}));
},
});
在 transformItems 中,您可以做任何您想做的事情,例如先转换单位,然后按新属性排序:
refinementList({
transformItems(items) {
return items
.map((item) => ({ ...item, mm: convertToMm(item.label) }))
.sort((a, b) => b.mm - a.mm);
},
});
关于Algolia 即时搜索 : custom sort refinementlist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52209832/