Ich habe mehrere Attribute, die als attributesToRetrieve
festgelegt sind. In meiner Vorlage werden jedoch nur einige davon angezeigt. Etwa so etwas wie dieses:Attribut nur in Suchergebnisvorlage anzeigen, wenn hervorgehobene Übereinstimmungen enthalten sind
<div id="results">
<div>{{_highlightResult.attr1.value}}</div>
<div>{{_highlightResult.attr2.value}}</div>
<div>{{_highlightResult.attr3.value}}</div>
</div>
Auf diese Weise werden die Attribute in jedem Fall wiedergegeben werden, und hervorgehoben, wenn sie ein passendes Wort enthalten.
Nun würde Ich mag einen anderen Abschnitt erhöhen, wenn alle anderen Attribute nur dann angezeigt werden kann, aber wenn sie ein angepaßtes Wort hervorgehoben werden, so etwas wie enthalten:
<div id="results">
<div>{{_highlightResult.attr_1.value}}</div>
<div>{{_highlightResult.attr_2.value}}</div>
<div>{{_highlightResult.attr_3.value}}</div>
<!--
The following div will be rendered and displayed only
if any of these special attributes contain an highlighted word.
Only an attribute containing a matched word will be displayed
-->
<div class="other-attr">
{{_highlightResult.Long_SpecialAttr_1.value}}
{{_highlightResult.SpecialAttr_2.value}}
{{_highlightResult.SpecialAttr_3.value}}
</div>
</div>
Wie im Kommentar erwähnt, Dieser Abschnitt wird nur gerendert und angezeigt, wenn eines dieser speziellen Attribute ein hervorgehobenes Wort enthält. Außerdem wird nur ein Attribut angezeigt, das ein übereinstimmendes Wort enthält.
Plus, wie Sie sehen können, gibt es eine Long_SpecialAttr_1
, es ist ein langes Textattribut, das ich möchte, dass es als ein Attribut mit Auszügen angezeigt wird.
Um eine bessere Vorstellung (vielleicht) zu geben, was ich versuche für diesen zusätzlichen Abschnitt ist unter jedem Suchergebnisse so etwas wie die eine Google-Anzeige zu erreichen, eine Art Text Blob Text mit drei Punkten auf die markierten Wörter enthalten diese Attribute.
Ist das möglich? Ich benutze Algolia instasearch.js, danke!
UPDATE
Dank @Jerska für seine Antwort, leider ein kleines Stück Code funktioniert nicht in meinem Fall, und zwar:
['highlight', 'snippet'].forEach(function (type) {
data['_' + type + 'Result'].forEach(function (elt) {
elt.display = elt.matchLevel !== 'none';
});
});
mir in der Konsole einen Fehler geben data._snippetResult.forEach() is undefined
Angabe . Also ich, dass etwas mit dieser Änderung:
for(var el in d._snippetResult)
{
// create new property with bool value, true if not "none"
d._snippetResult[el].display = d._snippetResult[el].matchLevel !== 'none';
};
Brilliant! Vielen Dank für diese sehr detaillierte Antwort! :) Ich hatte ein kleines Problem mit 'forEach', der Konsolenfehler meldete, dass es eine undefinierte Funktion gab (ich vermute, weil man' forEach' nur auf Arrays werfen kann, oder habe ich etwas übersehen?), Also habe ich dieses Bit modifiziert wie im Update erwähnt. – Gruber
Oh ja, ich nahm meine Träume wahr. ES5 'forEach' funktioniert tatsächlich nicht mit Objekten, während die' forEach' Funktion von Unterstreichung/lodash funktioniert. Ich werde meine Antwort aktualisieren. – Jerska
Ich sehe, aber ich denke, der hier wirklich fehlt könnte ich Lodash nicht verwenden, noch: P – Gruber