Commit 082a5c3364139ddc4047ca508c29719caa627089

Authored by Aurélio A. Heckert
1 parent 32b977e3

Enable side blocks on product catalog

Also adds the ProductCategoriesBlock to list the catalog anywhere.

ActionItem896
app/controllers/my_profile/profile_design_controller.rb
@@ -32,6 +32,7 @@ class ProfileDesignController < BoxOrganizerController @@ -32,6 +32,7 @@ class ProfileDesignController < BoxOrganizerController
32 if profile.enterprise? 32 if profile.enterprise?
33 blocks << DisabledEnterpriseMessageBlock 33 blocks << DisabledEnterpriseMessageBlock
34 blocks << HighlightsBlock 34 blocks << HighlightsBlock
  35 + blocks << ProductCategoriesBlock
35 blocks << FeaturedProductsBlock 36 blocks << FeaturedProductsBlock
36 blocks << FansBlock 37 blocks << FansBlock
37 blocks += plugins.dispatch(:extra_blocks, :type => Enterprise) 38 blocks += plugins.dispatch(:extra_blocks, :type => Enterprise)
app/controllers/public/catalog_controller.rb
1 class CatalogController < PublicController 1 class CatalogController < PublicController
2 needs_profile 2 needs_profile
3 - no_design_blocks  
4 3
5 before_filter :check_enterprise_and_environment 4 before_filter :check_enterprise_and_environment
6 5
app/helpers/application_helper.rb
@@ -36,6 +36,8 @@ module ApplicationHelper @@ -36,6 +36,8 @@ module ApplicationHelper
36 36
37 include LayoutHelper 37 include LayoutHelper
38 38
  39 + include CatalogHelper
  40 +
39 def locale 41 def locale
40 (@page && !@page.language.blank?) ? @page.language : FastGettext.locale 42 (@page && !@page.language.blank?) ? @page.language : FastGettext.locale
41 end 43 end
app/helpers/catalog_helper.rb
@@ -11,20 +11,24 @@ module CatalogHelper @@ -11,20 +11,24 @@ module CatalogHelper
11 content_tag('div', all_items.join(' &rarr; '), :id => 'breadcrumb') 11 content_tag('div', all_items.join(' &rarr; '), :id => 'breadcrumb')
12 end 12 end
13 13
14 - def category_link(category, sub = false) 14 + def category_link(category)
15 count = profile.products.from_category(category).count 15 count = profile.products.from_category(category).count
16 name = truncate(category.name, :length => 22 - count.to_s.size) 16 name = truncate(category.name, :length => 22 - count.to_s.size)
17 - link_name = sub ? name : content_tag('strong', name)  
18 - link = link_to(link_name, {:action => 'index', :level => category.id}, :title => category.name)  
19 - content_tag('li', "#{link} (#{count})") if count > 0 17 + link = link_to(name, {:controller => 'catalog', :action => 'index', :level => category.id}, :title => category.name)
  18 + content_tag('div', "#{link} <span class=\"count\">#{count}</span>") if count > 0
20 end 19 end
21 20
22 - def category_sub_links(category) 21 + def category_with_sub_list(category)
  22 + content_tag 'li', "#{category_link(category)}\n#{sub_category_list(category)}"
  23 + end
  24 +
  25 + def sub_category_list(category)
23 sub_categories = [] 26 sub_categories = []
24 category.children.order(:name).each do |sub_category| 27 category.children.order(:name).each do |sub_category|
25 - sub_categories << category_link(sub_category, true) 28 + cat_link = category_link sub_category
  29 + sub_categories << content_tag('li', cat_link) unless cat_link.nil?
26 end 30 end
27 - content_tag('ul', sub_categories) if sub_categories.size > 1 31 + content_tag('ul', sub_categories) if sub_categories.size > 0
28 end 32 end
29 33
30 end 34 end
app/models/box.rb
@@ -61,6 +61,7 @@ class Box &lt; ActiveRecord::Base @@ -61,6 +61,7 @@ class Box &lt; ActiveRecord::Base
61 MyNetworkBlock, 61 MyNetworkBlock,
62 PeopleBlock, 62 PeopleBlock,
63 ProductsBlock, 63 ProductsBlock,
  64 + ProductCategoriesBlock,
64 ProfileImageBlock, 65 ProfileImageBlock,
65 ProfileInfoBlock, 66 ProfileInfoBlock,
66 ProfileSearchBlock, 67 ProfileSearchBlock,
app/models/product_categories_block.rb 0 → 100644
@@ -0,0 +1,24 @@ @@ -0,0 +1,24 @@
  1 +class ProductCategoriesBlock < Block
  2 +
  3 + def self.description
  4 + _('Product category menu')
  5 + end
  6 +
  7 + # the title of the block. Probably will be overriden in subclasses.
  8 + def default_title
  9 + _('Catalog')
  10 + end
  11 +
  12 + def help
  13 + _('Helps to filter the products catalog.')
  14 + end
  15 +
  16 + def content(args={})
  17 + profile = owner
  18 + lambda do
  19 + categories = @categories || ProductCategory.on_level().order(:name)
  20 + render :file => 'blocks/product_categories', :locals => {:profile => profile, :categories => categories}
  21 + end
  22 + end
  23 +
  24 +end
app/views/blocks/product_categories.html.erb 0 → 100644
@@ -0,0 +1,12 @@ @@ -0,0 +1,12 @@
  1 +<%= link_to _('Catalog start'), profile.catalog_url, :class=>'catalog-home-link' %>
  2 +<% if categories.present? %>
  3 +<ul class="catalog-categories-list">
  4 + <% categories.each do |category| %>
  5 + <%= category_with_sub_list(category) %>
  6 + <% end %>
  7 +</ul>
  8 +<% elsif @category.present? %>
  9 + <div class="catalog-categories-notice"><%= _('There are no sub-categories for %s') % @category.name %></div>
  10 +<% else %>
  11 + <div class="catalog-categories-notice"><%= _('There are no categories available.') %></div>
  12 +<% end %>
app/views/catalog/index.rhtml
@@ -5,23 +5,6 @@ @@ -5,23 +5,6 @@
5 5
6 <%= breadcrumb(@category) if params[:level] %> 6 <%= breadcrumb(@category) if params[:level] %>
7 7
8 -<div class='l-sidebar-left-bar'>  
9 - <ul>  
10 - <%= content_tag('li', link_to(_('Homepage'), profile.url), :class => 'catalog-categories-link') %>  
11 - <%= content_tag('li', link_to(_('Catalog start'), profile.catalog_url), :class => 'catalog-categories-link') %>  
12 - <% if @categories.present? %>  
13 - <% @categories.each do |category| %>  
14 - <%= category_link(category) %>  
15 - <%= category_sub_links(category) %>  
16 - <% end %>  
17 - <% elsif @category.present? %>  
18 - <%= content_tag('li', _('There are no sub-categories for %s') % @category.name, :id => 'catalog-categories-notice') %>  
19 - <% else %>  
20 - <%= content_tag('li', _('There are no categories available.'), :id => 'catalog-categories-notice') %>  
21 - <% end %>  
22 - </ul>  
23 -</div>  
24 -  
25 <ul id="product-list" class="l-sidebar-left-content"> 8 <ul id="product-list" class="l-sidebar-left-content">
26 <% @products.each do |product| %> 9 <% @products.each do |product| %>
27 <% extra_content = @plugins.dispatch(:catalog_item_extras, product).collect { |content| instance_eval(&content) } %> 10 <% extra_content = @plugins.dispatch(:catalog_item_extras, product).collect { |content| instance_eval(&content) } %>
public/stylesheets/application.css
@@ -2735,67 +2735,134 @@ div#activation_enterprise label, div#activation_enterprise input, div#activation @@ -2735,67 +2735,134 @@ div#activation_enterprise label, div#activation_enterprise input, div#activation
2735 margin-top: -15px; 2735 margin-top: -15px;
2736 } 2736 }
2737 2737
2738 -.l-sidebar-left-bar ul,  
2739 .l-sidebar-right-bar ul { 2738 .l-sidebar-right-bar ul {
2740 list-style-type: none; 2739 list-style-type: none;
2741 margin-left: 0; 2740 margin-left: 0;
2742 padding: 1em 1em 0.5em 1em; 2741 padding: 1em 1em 0.5em 1em;
2743 } 2742 }
2744 2743
2745 -.l-sidebar-left-bar ul ul,  
2746 .l-sidebar-right-bar ul ul { 2744 .l-sidebar-right-bar ul ul {
2747 - padding-top: 0; 2745 + padding-left: 1em;
  2746 + margin-top: 3px;
2748 } 2747 }
2749 2748
2750 -.l-sidebar-left-bar ul{  
2751 - background-color: #eeeeec;  
2752 - border-radius: 5px; 2749 +.l-sidebar-right-bar li {
  2750 + margin: 3px 0px;
  2751 + padding: 0px;
2753 } 2752 }
2754 2753
2755 -.l-sidebar-left-bar a,  
2756 .l-sidebar-right-bar a { 2754 .l-sidebar-right-bar a {
2757 text-decoration: none; 2755 text-decoration: none;
  2756 + font-size: 120%;
2758 } 2757 }
2759 2758
2760 -.l-sidebar-left-bar a:hover,  
2761 .l-sidebar-right-bar a:hover { 2759 .l-sidebar-right-bar a:hover {
2762 text-decoration: underline; 2760 text-decoration: underline;
2763 } 2761 }
2764 2762
2765 -.l-sidebar-left-bar li,  
2766 -.l-sidebar-right-bar li { 2763 +/* * * Product Categories Block * * * * * * */
  2764 +
  2765 +.product-categories-block .catalog-home-link {
  2766 + display: block;
  2767 + background: rgba(0,0,0,0.08);
  2768 + font-weight: bold;
  2769 + text-align: center;
  2770 + border-radius: 5px;
  2771 + padding: 0px;
  2772 + line-height: 200%;
  2773 + text-decoration: none;
  2774 + color: #000;
  2775 +}
  2776 +.product-categories-block .catalog-home-link:hover {
  2777 + background: rgba(0,0,0,0.6);
  2778 + color: #FFF;
  2779 + text-decoration: none;
  2780 +}
  2781 +
  2782 +.product-categories-block .catalog-categories-list {
  2783 + margin-top: 0.5em;
  2784 +}
  2785 +
  2786 +.product-categories-block ul {
  2787 + list-style-type: none;
  2788 + margin: 0px;
  2789 + padding: 0px;
  2790 + border-radius: 5px;
  2791 + color: rgba(0,0,0,0.4);
  2792 +}
  2793 +
  2794 +.product-categories-block li {
2767 margin: 0; 2795 margin: 0;
2768 padding: 0; 2796 padding: 0;
  2797 + white-space: nowrap;
2769 } 2798 }
2770 2799
2771 -#catalog-categories-notice {  
2772 - color: #555753;  
2773 - padding-bottom: 0.5em; 2800 +.product-categories-block li li div {
  2801 + padding: 0 0 0 1.5em;
2774 } 2802 }
2775 2803
2776 -.l-sidebar-left-bar .catalog-categories-link {  
2777 - background-color: #d3d7cf;  
2778 - font-weight: bold;  
2779 - height: 28px;  
2780 - text-align: center; 2804 +.product-categories-block .catalog-categories-list a {
  2805 + text-decoration: none;
  2806 + font-size: 120%;
  2807 + line-height: 150%;
  2808 + color: #333;
  2809 + overflow: hidden;
  2810 + text-overflow: ellipsis;
  2811 + display: inline-block;
  2812 + padding: 0 0.3em 0 0.5em;
2781 border-radius: 5px; 2813 border-radius: 5px;
2782 - margin-bottom: 10px; 2814 + max-width: 80%;
  2815 + vertical-align: middle;
  2816 +}
  2817 +.product-categories-block .catalog-categories-list ul a {
  2818 + text-decoration: none;
  2819 + font-size: 110%;
  2820 + line-height: 163.6%;
  2821 +}
  2822 +.product-categories-block .catalog-categories-list div:hover a:hover {
  2823 + background: rgba(0,0,0,0.6);
  2824 + color: #FFF;
  2825 + text-decoration: none;
2783 } 2826 }
2784 2827
  2828 +.product-categories-block .catalog-categories-list div:hover a,
  2829 +.product-categories-block .catalog-categories-list div:hover .count {
  2830 + background: rgba(0,0,0,0.08);
  2831 +}
2785 2832
2786 -.l-sidebar-left-bar .catalog-categories-link:hover {  
2787 - background-color: #babdb6; 2833 +.block.product-categories-block .catalog-categories-list a {
  2834 + font-weight: bold;
2788 } 2835 }
2789 2836
  2837 +.block.product-categories-block .catalog-categories-list ul a {
  2838 + font-weight: normal;
  2839 +}
2790 2840
2791 -.l-sidebar-left-bar .catalog-categories-link a{  
2792 - display: inline-block;  
2793 - height: 100%;  
2794 - width: 100%;  
2795 - line-height: 28px;  
2796 - text-decoration: none;  
2797 - color: #2e3436; 2841 +.product-categories-block a:hover {
  2842 + text-decoration: underline;
  2843 +}
  2844 +
  2845 +.product-categories-block .count {
  2846 + display: inline-block;
  2847 + vertical-align: middle;
  2848 + margin-left: -0.2em;
  2849 + padding: 0 0.2em;
  2850 + line-height: 180%;
  2851 + border-radius: 5px;
  2852 +}
  2853 +
  2854 +.block.product-categories-block .count:before {
  2855 + content: "(";
2798 } 2856 }
  2857 +.block.product-categories-block .count:after {
  2858 + content: ")";
  2859 +}
  2860 +
  2861 +.catalog-categories-notice {
  2862 + color: rgba(0,0,0,0.3);
  2863 + padding: 0.5em 1em;
  2864 +}
  2865 +
2799 /* * * Show Product * * * * * * * * * * * * */ 2866 /* * * Show Product * * * * * * * * * * * * */
2800 2867
2801 .controller-catalog #show_product .product-pic { 2868 .controller-catalog #show_product .product-pic {
@@ -6225,11 +6292,6 @@ li.profile-activity-item.upload_image .activity-gallery-images-count-1 img { @@ -6225,11 +6292,6 @@ li.profile-activity-item.upload_image .activity-gallery-images-count-1 img {
6225 6292
6226 /* Sidebar Layout */ 6293 /* Sidebar Layout */
6227 6294
6228 -.l-sidebar-left-bar {  
6229 - float: left;  
6230 - width: 20%;  
6231 -}  
6232 -  
6233 .l-sidebar-left-content { 6295 .l-sidebar-left-content {
6234 float: right; 6296 float: right;
6235 width: 78%; 6297 width: 78%;