2 Stimmen

Spree-Anzeige nur ausgewählter Taxons in der Seitenleiste für verschiedene Seiten

Hallo, ich bin neu in Spree und Rails als gut. Bitte helfen Sie mir mit diesem.

Ich möchte ausgewählte Taxons in der Seitenleiste für eine Seite anzeigen. Sagen wir, meine Taxonstruktur ist die folgende

Dresses
   -Party
      -sub category
   -Casual
      -sub category
      -sub category
   -Formal

Pants
   -Party
   -Casual
   -Formal
Shirts
   -Party
   -Casual
   -Formal

Wenn ich also in *www.host.com/t/pants*

Ich möchte nur anzeigen

Pants
   -Party
   -Casual
   -Formal

in der Seitenleiste und blenden Sie alle anderen Taxonbäume aus.

Bitte, helfen Sie mir dabei.

der Teilcode ist hier, der alle Taxonomien anzeigt

<nav id="taxonomies" class="sidebar-item" data-hook>

  <% get_taxonomies.each do |taxonomy| %>

    <h6 class='taxonomy-root'><%= t(taxonomy.name.singularize) %></h6>

    <%= taxons_tree(taxonomy.root, @taxon, Spree::Config[:max_level_in_taxons_menu] || 1) %>

  <% end %>

</nav>

2voto

j15e Punkte 518

Das aktuell ausgewählte Taxon (z. B. www.host.com/t/pants) ist verfügbar unter

@searcher.properties[:taxon] 

Dies ist das Hosentaxonomie-Objekt, mit dem Sie die Ergebnisse von get_taxonomies filtern können.

Man könnte also so etwas machen wie :

<% get_taxonomies.select{|t| @searcher.properties[:taxon].nil? or t.id == @searcher.properties[:taxon].id }.each do |taxonomy| %>

Dies funktioniert jedoch nicht, wenn Sie sich in Unterkategorien befinden (z. B. /t/pants/party)

Scheint, wie es eine .ancestors-Methode in früheren Spree-Version, aber jetzt ist es weg, so dass ich denke, es gibt noch eine schnelle Möglichkeit, Taxons Vorfahren zu überprüfen, aber ich habe nicht gefunden, wie genau.

Die vollständige Lösung würde in etwa so aussehen:

<% get_taxonomies.select{|t| @searcher.properties[:taxon].nil? or t.ancestors.includes( @searcher.properties[:taxon].id) }.each do |taxonomy| %>

Ich hoffe, das hilft

1voto

Aahlad Punkte 131

Vielen Dank an @jpdoyle für seine Hilfe.

Vergleichen

taxonomy.root 

mit jeder Instanz von

(@searcher.properties[:taxon]).ancestors.collect { |ancestor| seo_url(ancestor)}

mein Problem gelöst.

0voto

Sanjay Prajapati Punkte 719

In Spree 3.7 sieht die ursprüngliche Methode wie folgt aus, und wir können sie außer Kraft setzen @taxonomies variabler Wert:

def show
  @taxon = Taxon.friendly.find(params[:id])
  return unless @taxon

  @searcher = build_searcher(params.merge(taxon: @taxon.id, include_images: true))
  @products = @searcher.retrieve_products
  taxonomies = Spree::Taxonomy.includes(root: :children)
  @taxonomies = taxonomies.select { |t| t.id == @taxon.taxonomy_id }
end

So können wir nur diejenigen Taxonomien auswählen, die tatsächlich mit dem ausgewählten Taxon verbunden sind.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X