2016-04-20 16 views
5

Tôi đang sử dụng Algolia instantsearch.js để hiển thị các ứng cử viên cho một cuộc bầu cử (ở đây: https://laprimaire.org/candidats/). Tôi muốn hiển thị ban đầu của các ứng cử viên để được ngẫu nhiên để mỗi ứng cử viên được nhiều hơn hoặc ít hơn khả năng hiển thị tương tự.Algolia instantsearch.js: làm thế nào để hiển thị kết quả với một thứ tự ngẫu nhiên?

Tôi đọc trong câu trả lời này mà nó không phải là một tính năng của Algolia nhưng điều đó chúng ta có thể làm điều đó anyway với một mẹo nhỏ js: Is it possible to sort randomly, and to query on field if it exists?

Vấn đề là tôi đang sử dụng instantsearch.js và tôi không thể tìm thấy cách triển khai hàm tìm kiếm ở trên trong trường hợp instantsearch.js.

tôi nhìn thấy từ tài liệu đi instantsearch có thể được khởi tạo với một searchFunction mà nhận được một helper như một tham số: https://community.algolia.com/instantsearch.js/documentation/#initialization

Tuy nhiên nó không tìm thấy tài liệu về helper này và làm thế nào để vận dụng nó, vì vậy mà tôi có thể áp dụng hàm ngẫu nhiên cho kết quả tìm kiếm.

Bất kỳ trợ giúp nào sẽ được đánh giá rất nhiều! Thanks a lot

Thibauld

+0

Chỉ cần làm rõ một chút ở đây, trong câu trả lời cho [Có thể sắp xếp ngẫu nhiên và truy vấn trên trường nếu nó tồn tại không?] (Http://stackoverflow.com/questions/33123488/is-it-possible- to-sort-random-and-to-query-on-field-if-it-exist), JS liên quan sẽ chỉ trộn lẫn các kết quả trên cùng một trang. Do đó nếu danh sách kết quả của bạn được phân trang, tôi không chắc chắn điều này sẽ đạt được những gì bạn đang tìm kiếm. – Jerska

+0

Sau khi nhìn thấy trang web của bạn, nó không có vẻ giống như một vấn đề mặc dù. – Jerska

Trả lời

6

Các lượt truy cập Widget này có một cách để bạn có được kiểm soát nhiều hơn về cách hiển thị danh sách các hit qua transformData.allItems and templates.allItems parameters.

Sử dụng phương pháp shuffle của câu hỏi này 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; 
} 

Bạn chỉ có thể làm:

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}}' 
    } 
    }) 
); 

Mẫu {{#hits}}{{/hits}} chỉ đơn giản là một số Hogan.js logic để loop trên mỗi bạn lượt truy cập.

+0

Tuyệt vời! Làm việc như một say mê :) Cảm ơn rất nhiều! – Thibauld

Các vấn đề liên quan