2016-04-20 16 views
5

Sto utilizzando Algolia instantsearch.js per visualizzare i candidati a un'elezione (qui: https://laprimaire.org/candidats/). Vorrei che la visualizzazione iniziale dei candidati fosse casuale, in modo che ogni candidato ottenga più o meno la stessa visibilità.Algolia instantsearch.js: come visualizzare i risultati con un ordine casuale?

ho letto in questa risposta che non è una caratteristica di Algolia, ma che dovrebbe essere possibile farlo comunque con un piccolo trucco js: Is it possible to sort randomly, and to query on field if it exists?

Il problema è che sto usando instantsearch.js e non riesco a trovare come implementare la funzione search sopra nel caso di instantsearch.js.

vedo dalla documentazione che instantsearch possono essere inizializzati con un di ricerca testuale che riceve un aiutante come parametro: https://community.algolia.com/instantsearch.js/documentation/#initialization

Tuttavia non ha trovato documentazione su questo helper e su come manipolare, in modo che io possa applica la funzione casuale ai risultati della ricerca.

Qualsiasi aiuto sarebbe molto apprezzato! Grazie mille

Thibauld

+0

Solo un piccolo chiarimento qui, nella risposta a [È possibile ordinare in modo casuale e interrogare sul campo se esiste?] (Http://stackoverflow.com/questions/33123488/is-it-possible- to-sort-randomly-and-to-query-on-field-if-it-exists), il JS coinvolto mescolerà solo i risultati sulla stessa pagina. Quindi se il tuo elenco dei risultati è impaginato, non sono sicuro che questo realizzerà ciò che stai cercando. – Jerska

+0

Dopo aver visto la tua pagina web, non sembra comunque un problema. – Jerska

risposta

6

Il colpisce widget ha un modo per voi per ottenere un maggiore controllo su come visualizzare l'elenco di successi attraverso il transformData.allItems and templates.allItems parameters.

Utilizzando il metodo di questa domanda How can I shuffle an array?shuffle:

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

Si può semplicemente fare:

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

Il modello {{#hits}}{{/hits}} è semplicemente un po 'di Hogan.js logica per ciclo su ciascuna della vostra colpi.

+0

Ottimo! Ha funzionato come un fascino :) Grazie mille! – Thibauld

Problemi correlati