2017-09-14 1 views
1

wir haben seit Wochen mit diesem Problem gekämpft und haben immer noch keine Lösung gefunden.Shopify Liquid Search.Results - Wie sortiert man nach Barcode?

Wir haben einen Shopify Store mit 2000 Produkten und 300 Anbietern. Jeder Lieferant hat eine "Rangnummer", die wir ihnen zugeordnet haben und in den Varianten jedes einzelnen Produkts in das Feld "Barcode" eingetragen haben.

Das Ziel ist, dass wir Shopify wollen in der Lage sein, unsere Suchergebnisse zu sortieren, indem der Barcode mit der Flüssigkeit „Art“ Tag wie folgt:

{% assign foo = search.results | sort:'title' %} 

Wenn wir jedoch versuchen, diese Syntax zu verwenden zu sortieren von „Barcode“ zurückgibt es keine Ergebnisse

{% assign foo = search.results | sort:'barcode' %} 

Wir haben versucht, zu verwenden ‚Art‘ mit allen folgenden Argumenten aber keiner von ihnen arbeiten:

{% assign foo = search.results | sort:'product.barcode' %} 
{% assign foo = search.results | sort:'item.barcode' %} 
{% assign foo = search.results | sort:'item.variants.first.barcode' %} 
{% assign foo = search.results | sort:'items.variants.variant.barcode' %} 

usw., aber keiner von ihnen funktioniert. Wenn irgendjemand uns in die richtige Richtung zeigen kann, für welches Argument/welche Syntax wir unsere Suchergebnisse nach variant.barcode sortieren sollen, wäre es VIEL APPRECIATED !!!!!

Dank

+0

Ich habe keine Barcodes einrichten, dies zu testen, mit, aber haben Sie versucht, '{% assign foo = search.results | Karte: 'Gegenstand' | Sortierung: 'Barcode'%} '? Der 'map' Filter wird die search.results auf ein Array von Elementen reduzieren, die * dann * mit dem Sortierfilter sortierbar sein sollen ... –

Antwort

1

In Bezug auf die nativen Funktionen you're out of luck.

Sie können so etwas tun, indem Sie Ihre eigenen rollen.

  1. manuell sortieren Sie Ihre Sammlungen von Anbieter Rang
  2. Grenze deine Suche nach Sammelergebnisse durch eigene Suchfunktion oder
  3. creat Ihre eigene Suchfunktion zu schaffen, sondern es ist ein „Filter“ auf der aktuellen Kollektion machen und Lassen Sie die native Suche in Ruhe.

Erstellen Sie Ihr eigenes Search:

  1. Setzen Sie Ihre Artikel Ergebnisse Zelle in einem Code-Schnipsel. collection-product.liquid
  2. Fügen Sie dieses Snippet in Ihre collecton Flüssigkeit hinzu.
  3. Machen Sie eine neue Sammlung Vorlage (collection.search-results.liquid)

collection.search-results.liquid sieht in etwa wie folgt aus. Ihre Paginierungsgröße sollte der Paginierungsgröße Ihrer Hauptsammlung entsprechen.

{% layout none %} 
{% paginate collection.products by 50 %} 
<div class="search-results"> 
{% for product in collection.products %} 
    {% include 'collection-product' %} 
{% endfor %} 
</div> 
{% endpaginate %} 

Jetzt wird Ihre Suche ein Eingabefeld mit etwas Javascript. Der lustige Teil. Das folgende Skript wurde von einer Arbeitsstelle gezogen. Ich habe es etwas gekürzt, um hoffentlich die Knochen klarer zu machen, aber es wird wahrscheinlich nicht so laufen wie es ist. Ich habe Referenzen zum Hinzufügen einer Suche entfernt, weil Sie für Ihre Zwecke die native benutzerdefinierte Suche wünschen.

Warum nicht nur die Ergebnisse sortieren. Sie können dieses Konzept verwenden, um Ergebnisse zu erzielen. Um alle Ergebnisse individuell zu durchsuchen, müssen Sie die Ergebnisse akkumulieren und nach Abschluss der Suche sortieren.Die Suchzeit hängt dann stark von der Größe der Sammlung und der Netzwerkgeschwindigkeit des Benutzers ab.

var defaultView = $(".filters-off"); // add this class to your main collection wrapper 
var facetView = $("#filter_target"); // <div id="filter_target"></div> below your main collection wrapper 

var currentRequest = 0; 
function filterCollection(term){ 
    //[[t1, t2], [t3,t4]] 
    // console.log('applying '+ JSON.stringify(facets)); 

    var anyResults = false; 
    var resultsPage=0; 
    var PAGE_SIZE = 50; 
    var productsFound = 0; 
    var collectionPath = location.pathname; 

    console.log('get from '+ collectionPath); 
    currentRequest = new Date().getTime(); 

    var viewLink = collectionPath+'?view=search-results'; // same as your layout none template 

    function applyFilter(myRequest){ 
     resultsPage++; 
     if(resultsPage > 20) return false; // arbitrary abort for too many results 
     if(resultsPage > 1) viewLink+='&page='+resultsPage; 
     return $.get(viewLink).then(function(page){ 
      if(currentRequest != myRequest){ 
       console.log('mid abort'); 
       return false; 
      } 
      var pageProducts = $("div[data-tags]", page); //some markup you added to collection-product snippet to help plucking the product elements 
      if(!pageProducts.length) return false; 

      console.log('found: '+ pageProducts.length); 

      var filteredProducts = pageProducts.filter(function(){ 
       if($(this).text().indexOf(term) != -1) return true; // search the returned text 

       if($(this).attr('data-keywords').indexOf(term) != -1) return true; 
       return false; 
      }); 
      if(filteredProducts.length){ 
       if(!anyResults){ 
        anyResults = true; 
        toggleView(true); 

       } 
       filterView.append(filteredProducts); 
       productsFound+= filteredProducts.length; 
      } 
      return (pageProducts.length == PAGE_SIZE && currentRequest == myRequest) ? applyFilter(myRequest) : false; 
     }).then(function(proceed){ 
      if(currentRequest == myRequest){ 

       if(!anyResults){ 
        toggleView(false, true); 
       } 
      } 
     }); 
    } 
    applyFilter(currentRequest); 
} 


function toggleView (showFacets, showNoGo){ 
    facetView.empty(); 
    $(".filter-progress").empty(); 
    if(showFacets) { 
     defaultView.add('.pagination').hide(); 

    }else { 

     if(!showNoGo){ 
      defaultView.add('.pagination').show(); 
     }else { 
      $(".no-facets").clone(true).appendTo(facetView).show(); // .no-facets is normally hidden chunk that allows for easy internationaliztion of "No results found" type messages 
     } 
    } 
}; 
Verwandte Themen