2

こんにちは、スプリーとレールも初めてです。これで私を助けてください。

ページのサイドバーに選択した分類群を表示したい。私の分類群の構造がこれだとしましょう

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

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

だから私がいるとき*www.host.com/t/pants*

だけ見せたい

Pants
   -Party
   -Casual
   -Formal

サイドバーで、他のすべての分類群ツリーを非表示にします。

これで私を助けてください。

すべての分類法を表示する部分的なコードはこちら

<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>
4

3 に答える 3

2

現在選択されている分類群 (例: www.host.com/t/pants) は、

@searcher.properties[:taxon] 

これはズボン分類オブジェクトです。これを比較して、get_taxonomys の結果をフィルタリングできます。

だから私はあなたが次のようなことができると思います:

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

ただし、サブカテゴリ (例: /t/pants/party) にいる場合、これは機能しません。

以前の Spree バージョンには .ancestors メソッドがあったようですが、今はなくなったので、分類群の祖先を確認する簡単な方法がまだあると思いますが、正確な方法はわかりません。

完全なソリューションは次のようになります。

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

お役に立てれば

于 2012-08-05T20:09:00.737 に答える
1

@jpdoyle の助けに感謝します。

比較する

taxonomy.root 

の各インスタンスで

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

私の問題を解決しました。

于 2012-08-07T21:09:59.903 に答える
0

Spree 3.7 から、元のメソッドは次のようになり、@taxonomies変数値をオーバーライドできます。

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

そのため、選択した分類群に実際に関連付けられている分類法のみを選択できます。

于 2019-09-06T11:08:03.237 に答える