我正在使用Algolia instantsearch.js来展示选举的候选人(这里:https://laprimaire.org/candidats/)。我希望候选人的初始显示是随机的,以便每个候选人或多或少都具有相同的可见性。
我在这个答案中读到,它不是Algolia的一个特征,但无论如何应该可以用一点js技巧来做:Is it possible to sort randomly, and to query on field if it exists?
问题是我正在使用instantsearch.js,我找不到如何在instantsearch.js的情况下实现上述searchFunction。
我从文档中看到,可以使用searchFunction初始化instantsearch,该函数接收辅助函数作为参数: https://community.algolia.com/instantsearch.js/documentation/#initialization
然而,它没有找到关于此帮助程序的文档以及如何操作它,以便我可以将随机函数应用于搜索结果。
任何帮助将不胜感激! 非常感谢
Thibauld
答案 0 :(得分:6)
点击窗口小部件可让您通过transformData.allItems
and templates.allItems
parameters更好地控制如何显示点击列表。
使用此问题的shuffle
方法How can I shuffle an array?:
function shuffle (o){ for(var j, x, i = o.length; i; j = Math.floor(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x); return o; }
您可以这样做:
search.addWidget(
instantsearch.widgets.hits({
// Your other options
transformData: {
allItems: function (content) {
return { hits: shuffle(content.hits) };
}
},
templates: {
empty: 'No results',
allItems: '{{#hits}}<your previous templates.hit value>{{/hits}}'
}
})
);
{{#hits}}{{/hits}}
模板只是一些Hogan.js
逻辑,可以循环播放每个匹配。