2

嗨,我也是 spree 和 rails 的新手。请在这件事上给予我帮助。

我想在页面的侧边栏上显示选定的分类单元。假设我的分类单元结构是这样的

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_taxonomies 结果。

所以我想你可以做类似的事情:

<% 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 回答