2012-01-12 14 views
2

ここでは、クライアントのスプレーショップでいくつかのことを微調整しようとしています。アルファベット順にタクソン(ブランド)を並べ替え

サイドバーには商品ブランドのリストが含まれている必要があります。ブランドには分類法があります。

マイshared/_taxonomies.html.erbビューが含まれています

<% get_taxonomies.each do |taxonomy| %> 
    <% if taxonomy.name == 'Brand' %> 
     <h3 class='taxonomy-root'><%= t(:shop_by_taxonomy, :taxonomy => taxonomy.name.singularize) %></h3> 
     <%= taxons_tree(taxonomy.root, @taxon, Spree::Config[:max_level_in_taxons_menu] || 1) %> 
    <% end %> 
    <% end %> 

私はカテゴリを取り除くためにif taxonomy.name == 'Brand'コードを追加しました。 (よりクリーンな方法があると思います)

タクソン(ブランド)をアルファベット順に表示させるにはどうすればよいですか?

スプレー0.70.3。

答えて

4

分類法が最も/すべてのページに表示され、その後、ちょうど行くしている場合、最も可能性の高いapplication_controller.rb、共通のコントローラで

@brand_taxonomy = Taxonomy.where(:name => 'Brand').first 

を設定することがはるかに良いと思います:

<h3 class='taxonomy-root'><%= t(:shop_by_taxonomy, :taxonomy => @brand_taxonomy.name.singularize) %></h3> 
<%= taxons_tree(@brand_taxonomy.root, @taxon, Spree::Config[:max_level_in_taxons_menu] || 1) %> 

ループと条件付きを完全に排除します。

def my_taxons_tree(root_taxon, current_taxon, max_level = 1) 
    return '' if max_level < 1 || root_taxon.children.empty? 
    content_tag :ul, :class => 'taxons-list' do 
    root_taxon.children.except(:order).order(:name).map do |taxon| 
     css_class = (current_taxon && current_taxon.self_and_ancestors.include?(taxon)) ? 'current' : nil 
     content_tag :li, :class => css_class do 
     link_to(taxon.name, seo_url(taxon)) + 
     taxons_tree(taxon, current_taxon, max_level - 1) 
     end 
    end.join("\n").html_safe 
    end 
end 
:名前が注文した子供を得るために、あなたはヘルパーを書き換える必要があるだろうので

残念ながらtaxons_treeヘルパーは直接としてapplication_helpers.rbで言う、トップレベルの分類の子供たちを呼び出し

キーの変更は、.except(:order).order(:name)をヘルパーの子検索に追加することです。

最終ビューのコードは次のようになります。

<h3 class='taxonomy-root'><%= t(:shop_by_taxonomy, :taxonomy => @brand_taxonomy.name.singularize) %></h3> 
<%= my_taxons_tree(@brand_taxonomy.root, @taxon, Spree::Config[:max_level_in_taxons_menu] || 1) %> 

application_controller.rbであなたが追加したい:私はシュプレープロジェクト自分自身でこれを実装していない

before_filter :set_brand_taxonomy 

def set_brand_taxonomy 
    @brand_taxonomy = Taxonomy.where(:name => 'Brand').first 
end 

を、そして、それはあなた次第Rails 3.0.3以降のバージョンを使用していますが、これは私が提案する基本的なアプローチです。

+0

非常に詳細な回答ありがとうございます。そのままでは動作していないようです。未定義の変数に関するエラーのため、 'my_taxons_tree(brand_taxonomy.root')に' @ 'シンボルを追加しましたが、この行の' nil:NilClass'の '未定義メソッド' root 'を取得します。 rb:http://pastie.org/3178498(これもエラーを出したので、h3行を削除しました) –

+0

'@'が見つからないために修正されました。ごめんなさい: 'rails console' その後、 と入力します: 'Taxonomy.where(:名=>「ブランド」)?' ...それは何を返すん 「ブランド」という名前の親分類が存在しないようですね... – Cyberfox

+0

また、?は、 'my_taxons_tree'ヘルパーメソッドを' application_controller.rb'に追加しました;代わりに 'app/helpers'にある' application_helper.rb'に入れることをお勧めしました。 ion_controllerの場合は、コントローラの先頭に 'helper_method:my_taxons_tree'を追加し、それをプライベートブロックに入れます(' my_taxons_tree'定義の前に 'private'を1行だけ置くだけです)。 Railsのように、 'app/helpers/application_helper.rb'に入れておくのが好きです。 – Cyberfox

関連する問題