Commit c0d3fa26c48282a63aaf8d139122eb0ba6683307

Authored by Braulio Bhavamitra
1 parent 8bc4669d

Start new product search

app/models/product.rb
@@ -155,37 +155,31 @@ class Product < ActiveRecord::Base @@ -155,37 +155,31 @@ class Product < ActiveRecord::Base
155 def name_or_category 155 def name_or_category
156 name ? name : product_category.name 156 name ? name : product_category.name
157 end 157 end
158 - def f_category_id 158 + def f_category
159 #def childs(id) 159 #def childs(id)
160 #ret = ProductCategory.find(:all, :conditions => {:parent_id => id}).collect(&:id) 160 #ret = ProductCategory.find(:all, :conditions => {:parent_id => id}).collect(&:id)
161 #([id, ret.map { |i| childs(i) }]) 161 #([id, ret.map { |i| childs(i) }])
162 #end 162 #end
163 #childs(self.product_category.id).flatten 163 #childs(self.product_category.id).flatten
164 - [self.product_category.id] 164 + self.product_category.name
165 end 165 end
166 - def f_region_id  
167 - if self.enterprise.region  
168 - self.enterprise.region.id  
169 - else  
170 - nil  
171 - end  
172 - end  
173 - def f_qualifier_id  
174 - product_qualifiers.collect(&:qualifier_id) 166 + def f_region
  167 + self.enterprise.region.name if self.enterprise.region
175 end 168 end
176 - def f_certifier_id  
177 - product_qualifiers.collect(&:certifier_id) 169 + def f_qualifier
  170 + product_qualifiers.collect{|i| i.qualifier.name if i.qualifier} +
  171 + product_qualifiers.collect{|i| i.certifier.name if i.certifier}
178 end 172 end
179 public 173 public
180 174
181 - acts_as_faceted :fields => {:f_category_id => {:class => ProductCategory, :display_field => :name, :label => _('Related products')},  
182 - :f_region_id => {:class => Region, :display_field => :name, :label => _('Region')},  
183 - :f_qualifier_id => {:class => Qualifier, :display_field => :name, :label => _('Qualifiers')},  
184 - :f_certifier_id => {:class => Certifier, :display_field => :name, :label => _('Certifiers')}},  
185 - :order => [:f_category_id, :f_region_id, :f_qualifier_id, :f_certifier_id] 175 + acts_as_faceted :fields => {
  176 + :f_category => {:label => _('Related products')},
  177 + :f_region => {:label => _('Region')},
  178 + :f_qualifier => {:label => _('Qualifiers')}},
  179 + :order => [:f_category, :f_region, :f_qualifier]
186 180
187 - acts_as_searchable :fields => [{:name_or_category => {:type => :text, :as => :name}},  
188 - {:name_or_category => {:type => :string, :as => :name_sort}}, :description, {:price => :float}, :category_full_name ] | facets.keys.map{|i| {i => :facet}}, 181 + acts_as_searchable :fields => [{:name_or_category => {:type => :text, :as => :name, :boost => 2.0}},
  182 + {:name_or_category => {:type => :string, :as => :name_sort}}, :description, {:price => :float}, :category_full_name ] + facets.keys.map{|i| {i => :facet}},
189 :facets => facets.keys 183 :facets => facets.keys
190 184
191 end 185 end
app/views/search/_product.rhtml
1 -<%# FIXME add more information %>  
2 -  
3 -<%  
4 -product_item_pos = 0 if ! product_item_pos  
5 -product_item_pos += 1  
6 -%>  
7 -  
8 <% extra_content = @plugins.map(:asset_product_extras, product, product.enterprise).collect { |content| instance_eval(&content) } %> 1 <% extra_content = @plugins.map(:asset_product_extras, product, product.enterprise).collect { |content| instance_eval(&content) } %>
9 <% extra_properties = @plugins.map(:asset_product_properties, product)%> 2 <% extra_properties = @plugins.map(:asset_product_properties, product)%>
10 3
11 -<li class="product-item <%= ( pos % 2 == 0 ) ? 'odd' : 'even' %>">  
12 - <%= link_to_product product, :class => 'product-pic', :style => 'background-image:url(%s)' % product.default_image(:minor) %>  
13 - <strong>  
14 - <%= link_to_product product %>  
15 - </strong>  
16 - <ul>  
17 - <li> <%= _('Price: %s') % (product.price ? product.price : _('Not informed')) %> </li>  
18 - <% if product.enterprise && product.display_supplier_on_search? %>  
19 - <li> <%= _('Supplier: %s') % link_to_homepage(product.enterprise.name, product.enterprise.identifier) %> </li>  
20 - <% end %>  
21 -  
22 - <li> <%= _('Category:') + ' ' + link_to_product_category(product.product_category) %> </li>  
23 -  
24 - <% extra_properties.each do |property| %>  
25 - <li><%= property[:name] + ': ' + instance_eval(&property[:content]) %></li>  
26 - <% end %>  
27 - </ul> 4 +<li class="product-item">
  5 + <div class="product-item-first-column">
  6 + <%= link_to_product product, :class => 'product-pic', :style => 'background-image:url(%s)' % product.default_image(:minor) %>
  7 + <%= product.price if product.price %>
  8 + </div>
  9 + <div class="product-item-second-column">
  10 + <span class='product-title-link'><%= link_to_product product %></span>
  11 + <div class="product-supplier">
  12 + <span class="product-item-topic"><%= _('SUPPLIER') %> </span><%= link_to_homepage(product.enterprise.name, product.enterprise.identifier) %>
  13 + </div>
  14 + <div class="product-description">
  15 + <% if product.description %>
  16 + <span class="product-item-topic"><%= _('DESCRIPTION') %> </span><%= product.description %>
  17 + <% end %>
  18 + </div>
  19 + </div>
  20 + <div class="product-item-third-column">
  21 + <div class="product-region">
  22 + <% if product.enterprise.region %>
  23 + <span class="product-item-topic"><%= _('REGION') %></span>
  24 + <br /><%= product.enterprise.region.name %>
  25 + <% end %>
  26 + </div>
  27 + <div class="product-qualifiers">
  28 + <% if product.product_qualifiers.count > 0 %>
  29 + <span class="product-item-topic"><%= _('QUALIFIERS') %></span>
  30 + <% product.product_qualifiers.each do |pq| %>
  31 + <% if pq.qualifier %>
  32 + <br /><%= pq.qualifier.name %>
  33 + <% end %>
  34 + <% if pq.certifier %>
  35 + <br /><%= pq.certifier.name %>
  36 + <% end %>
  37 + <% end %>
  38 + <% end %>
  39 + </div>
  40 + </div>
28 41
29 <%= extra_content.join('\n') %> 42 <%= extra_content.join('\n') %>
  43 + <% extra_properties.each do |property| %>
  44 + <div><%= property[:name] + ': ' + instance_eval(&property[:content]) %></div>
  45 + <% end %>
30 46
  47 + <hr size=1>
31 </li> 48 </li>
app/views/search/_results_header.rhtml 0 → 100644
@@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
  1 +<div class="results-header">
  2 + <%= label_total_found(asset, results.total_entries) %>
  3 + <span class="current-page"><%= _("Showing page %s of %s") % [results.current_page, results.total_pages] %></div>
  4 + <%= facets_unselect_menu(asset) %>
  5 + <%= order_by(asset) %>
  6 +</div>
app/views/search/products.rhtml
@@ -21,9 +21,7 @@ @@ -21,9 +21,7 @@
21 <% end %> 21 <% end %>
22 <% end %> 22 <% end %>
23 23
24 -<%= facets_unselect_menu(:products) %>  
25 -  
26 -<%= order_by(:products, [[_('Best match'), ''], [_('Name'), 'name_sort asc'], [_('Lower price'), 'price asc'], [_('Higher price'), 'price desc']]) %> 24 +<%= render :partial => 'results_header', :locals => { :asset => :products, :results => @results[:products] } %>
27 25
28 <%= display_results %> 26 <%= display_results %>
29 27
public/stylesheets/application.css
@@ -1777,6 +1777,11 @@ input.disabled { @@ -1777,6 +1777,11 @@ input.disabled {
1777 1777
1778 .search-ordering { 1778 .search-ordering {
1779 float: right; 1779 float: right;
  1780 + width: 11%;
  1781 + margin: 0 0 5px
  1782 +}
  1783 +.search-ordering select {
  1784 + display: block;
1780 } 1785 }
1781 1786
1782 .search-relevance { 1787 .search-relevance {
@@ -1824,6 +1829,7 @@ input.disabled { @@ -1824,6 +1829,7 @@ input.disabled {
1824 1829
1825 #search-popup .search-field, .search-form { 1830 #search-popup .search-field, .search-form {
1826 text-align: center; 1831 text-align: center;
  1832 + float: right;
1827 } 1833 }
1828 1834
1829 #content .search-options ul, .search-options ul, 1835 #content .search-options ul, .search-options ul,
@@ -2405,7 +2411,7 @@ div#activation_enterprise div { @@ -2405,7 +2411,7 @@ div#activation_enterprise div {
2405 .slideshow-block .slideshow-block-navigation .icon-media-next { 2411 .slideshow-block .slideshow-block-navigation .icon-media-next {
2406 padding-right: 18px; 2412 padding-right: 18px;
2407 background-position: right; 2413 background-position: right;
2408 - 2414 +
2409 } 2415 }
2410 .slideshow-block .slideshow-block-navigation .icon-media-pause, 2416 .slideshow-block .slideshow-block-navigation .icon-media-pause,
2411 .slideshow-block .slideshow-block-navigation .icon-media-play { 2417 .slideshow-block .slideshow-block-navigation .icon-media-play {
@@ -2782,6 +2788,7 @@ div#activation_enterprise div { @@ -2782,6 +2788,7 @@ div#activation_enterprise div {
2782 .formfield input { 2788 .formfield input {
2783 text-indent: 5px; 2789 text-indent: 5px;
2784 padding: 2px 0px; 2790 padding: 2px 0px;
  2791 + background: #fff;
2785 } 2792 }
2786 .msie5 .formfield input, 2793 .msie5 .formfield input,
2787 .msie6 .formfield input { 2794 .msie6 .formfield input {
@@ -3056,17 +3063,42 @@ div#activation_enterprise div { @@ -3056,17 +3063,42 @@ div#activation_enterprise div {
3056 .controller-search #facets-menu { 3063 .controller-search #facets-menu {
3057 width: 20%; 3064 width: 20%;
3058 float: left; 3065 float: left;
  3066 + min-height: 300px;
3059 } 3067 }
3060 3068
3061 .controller-search #facets-menu div { 3069 .controller-search #facets-menu div {
3062 position: relative; 3070 position: relative;
3063 } 3071 }
3064 - 3072 +.facets-applied {
  3073 + float: left;
  3074 + margin: 0 0 0 27px;
  3075 + padding: 5px 0;
  3076 + width: 65%;
  3077 +}
  3078 +span.appliedFilters {
  3079 + display: block;
  3080 + font-size: 0.8em;
  3081 + font-style: italic;
  3082 + margin: 0 0 0 5px;
  3083 +}
3065 .controller-search .facet-selected { 3084 .controller-search .facet-selected {
3066 display: block; 3085 display: block;
3067 - background-color: #000;  
3068 - color: #fff; 3086 + color: #000;
  3087 + font-style:italic;
  3088 + font-size:0.8em;
3069 float: left; 3089 float: left;
  3090 + padding:4px 24px 4px 4px;
  3091 + -moz-border-radius: 4px;
  3092 + -webkit-border-radius: 4px;
  3093 + -o-border-radius: 4px;
  3094 + -khtml-border-radius: 4px;
  3095 + border-radius: 4px;
  3096 + margin: 5px;
  3097 + background: #B1DFEF url("../images/ico_filtro_exclui.png") right 7px no-repeat;
  3098 + text-decoration: none;
  3099 +}
  3100 +.controller-search a:hover.facet-selected {
  3101 + text-decoration: underline;
3070 } 3102 }
3071 3103
3072 #product-category, 3104 #product-category,
@@ -4343,7 +4375,9 @@ h1#agenda-title { @@ -4343,7 +4375,9 @@ h1#agenda-title {
4343 4375
4344 .controller-search #search-results { 4376 .controller-search #search-results {
4345 margin-top: 10px; 4377 margin-top: 10px;
4346 - width: 100%; 4378 + width: 76.5%;
  4379 + float: right;
  4380 + border-top:1px dotted #000;
4347 /* none by default, but... Who knows the future? :-) */ 4381 /* none by default, but... Who knows the future? :-) */
4348 } 4382 }
4349 4383
@@ -4383,18 +4417,18 @@ h1#agenda-title { @@ -4383,18 +4417,18 @@ h1#agenda-title {
4383 #search-results li .icon:hover { 4417 #search-results li .icon:hover {
4384 background-color: transparent; 4418 background-color: transparent;
4385 } 4419 }
4386 - 4420 +/*
4387 .controller-search .has_cat_list #map, 4421 .controller-search .has_cat_list #map,
4388 .controller-search .msie .has_cat_list #map, 4422 .controller-search .msie .has_cat_list #map,
4389 .controller-search .has_cat_list .only-one-result-box .search-results-box, 4423 .controller-search .has_cat_list .only-one-result-box .search-results-box,
4390 .controller-search .msie .has_cat_list .only-one-result-box .search-results-box { 4424 .controller-search .msie .has_cat_list .only-one-result-box .search-results-box {
4391 - width: 80%;  
4392 - float: right;  
4393 -} 4425 +width: 80%;
  4426 +float: right;
  4427 +}*/
4394 4428
4395 -.controller-search .has_cat_list #product-categories-menu {  
4396 - width: 20%;  
4397 - float: left; 4429 + .controller-search .has_cat_list #product-categories-menu {
  4430 + width: 20%;
  4431 + float: left;
4398 } 4432 }
4399 4433
4400 .controller-search #product-categories-menu a { 4434 .controller-search #product-categories-menu a {
@@ -4451,9 +4485,6 @@ h1#agenda-title { @@ -4451,9 +4485,6 @@ h1#agenda-title {
4451 background-color: #FF0; 4485 background-color: #FF0;
4452 } 4486 }
4453 4487
4454 -.controller-search .search-results-box.odd {  
4455 - margin-left: 1%;  
4456 -}  
4457 .controller-search .msie .search-results-box.odd { 4488 .controller-search .msie .search-results-box.odd {
4458 float: right; 4489 float: right;
4459 } 4490 }
@@ -4584,15 +4615,15 @@ h1#agenda-title { @@ -4584,15 +4615,15 @@ h1#agenda-title {
4584 overflow: auto; 4615 overflow: auto;
4585 } 4616 }
4586 4617
4587 -.search-results-type-product .odd,  
4588 -.search-results-type-product .even {  
4589 - float: none;  
4590 -}  
4591 -  
4592 .search-results-type-product li.product-item { 4618 .search-results-type-product li.product-item {
4593 position: relative; 4619 position: relative;
4594 height: 60px; 4620 height: 60px;
4595 overflow: hidden; 4621 overflow: hidden;
  4622 + clear: both;
  4623 +}
  4624 +
  4625 +.product-item-topic {
  4626 + font-weight: bold;
4596 } 4627 }
4597 4628
4598 #content #search-results .common-profile-list-block li a.profile_link { 4629 #content #search-results .common-profile-list-block li a.profile_link {
@@ -4647,15 +4678,11 @@ h1#agenda-title { @@ -4647,15 +4678,11 @@ h1#agenda-title {
4647 } 4678 }
4648 4679
4649 .controller-search #content .only-one-result-box .search-results-type-product .product-item { 4680 .controller-search #content .only-one-result-box .search-results-type-product .product-item {
4650 - width: 50%;  
4651 height: 80px; 4681 height: 80px;
4652 max-height: 70px; 4682 max-height: 70px;
4653 overflow: hidden; 4683 overflow: hidden;
4654 float: left; 4684 float: left;
4655 } 4685 }
4656 -.controller-search .msie #content .only-one-result-box .search-results-type-product .product-item {  
4657 - width: 49%;  
4658 -}  
4659 4686
4660 .controller-search .product-pic { 4687 .controller-search .product-pic {
4661 display: block; 4688 display: block;
@@ -6079,7 +6106,7 @@ h1#agenda-title { @@ -6079,7 +6106,7 @@ h1#agenda-title {
6079 } 6106 }
6080 6107
6081 .msie7 #leave_scrap { 6108 .msie7 #leave_scrap {
6082 - overflow: hidden; 6109 + overflow: hidden;
6083 } 6110 }
6084 6111
6085 .msie7 #profile-activity hr, .msie7 #profile-network hr, .msie7 #profile-wall hr { 6112 .msie7 #profile-activity hr, .msie7 #profile-network hr, .msie7 #profile-wall hr {
@@ -6102,7 +6129,7 @@ h1#agenda-title { @@ -6102,7 +6129,7 @@ h1#agenda-title {
6102 .msie7 .leave_scrap_to_self .profile-activity-image, 6129 .msie7 .leave_scrap_to_self .profile-activity-image,
6103 .msie7 .leave_scrap .profile-activity-image { 6130 .msie7 .leave_scrap .profile-activity-image {
6104 z-index: 3; 6131 z-index: 3;
6105 - left: 2px; 6132 + left: 2px;
6106 } 6133 }
6107 6134
6108 .msie7 #profile-activity .profile-activity-send-message, 6135 .msie7 #profile-activity .profile-activity-send-message,
@@ -6118,40 +6145,40 @@ h1#agenda-title { @@ -6118,40 +6145,40 @@ h1#agenda-title {
6118 6145
6119 .msie7 .ui-tabs .ui-tabs-nav li { 6146 .msie7 .ui-tabs .ui-tabs-nav li {
6120 top: 1px; 6147 top: 1px;
6121 - margin: 0;  
6122 - margin-right: 4px; 6148 + margin: 0;
  6149 + margin-right: 4px;
6123 } 6150 }
6124 6151
6125 .msie7 .profile-wall-scrap-replies { 6152 .msie7 .profile-wall-scrap-replies {
6126 float: none; 6153 float: none;
6127 - margin-top: 10px; 6154 + margin-top: 10px;
6128 } 6155 }
6129 6156
6130 .article-translations-menu { 6157 .article-translations-menu {
6131 - bottom: 17px; 6158 + bottom: 17px;
6132 } 6159 }
6133 6160
6134 .article-translations-menu { 6161 .article-translations-menu {
6135 - text-decoration: none !important;  
6136 - height: 0;  
6137 - float: right; 6162 + text-decoration: none !important;
  6163 + height: 0;
  6164 + float: right;
6138 } 6165 }
6139 6166
6140 .article-translations .menu-submenu-header, 6167 .article-translations .menu-submenu-header,
6141 .article-translations .menu-submenu-content, 6168 .article-translations .menu-submenu-content,
6142 .article-translations .menu-submenu-footer { 6169 .article-translations .menu-submenu-footer {
6143 - background: none; 6170 + background: none;
6144 } 6171 }
6145 6172
6146 .article-translations .menu-submenu { 6173 .article-translations .menu-submenu {
6147 - bottom: auto;  
6148 - right: 0;  
6149 - border: 1px solid;  
6150 - background: #fff; 6174 + bottom: auto;
  6175 + right: 0;
  6176 + border: 1px solid;
  6177 + background: #fff;
6151 } 6178 }
6152 6179
6153 .article-translations .menu-submenu-list { 6180 .article-translations .menu-submenu-list {
6154 - list-style: none; 6181 + list-style: none;
6155 } 6182 }
6156 6183
6157 /* Forum */ 6184 /* Forum */
@@ -6230,3 +6257,121 @@ h1#agenda-title { @@ -6230,3 +6257,121 @@ h1#agenda-title {
6230 #cboxClose { 6257 #cboxClose {
6231 display: none !important; 6258 display: none !important;
6232 } 6259 }
  6260 +/* Alterações */
  6261 +.controller-search #content .search_form {
  6262 + background: transparent !important;
  6263 + padding:0 !important;
  6264 +}
  6265 +.formfield input {
  6266 + border: 1px solid #231F20;
  6267 + height: 28px;
  6268 + width: 558px;
  6269 +}
  6270 +.search-field .formfield {
  6271 + height: 34px;
  6272 + display: inline-block
  6273 +}
  6274 +
  6275 +#content form .search-field input.button.submit {
  6276 + width: 152px;
  6277 + background: #000;
  6278 + overflow: visible;
  6279 + color:#fff;
  6280 + text-align: left;
  6281 + padding:0;
  6282 + border: none;
  6283 + height:34px;
  6284 + display:inline-block;
  6285 + max-height:none;
  6286 + -moz-border-radius: 5px;
  6287 + -webkit-border-radius: 5px;
  6288 + -khtml-border-radius: 5px;
  6289 + -o-border-radius: 5px;
  6290 + border-radius: 5px;
  6291 +}
  6292 +#content form .search-field input:hover.button.submit {
  6293 + background-color:#444;
  6294 +}
  6295 +#content #public-profile-search form .search-field input.button.submit {
  6296 + margin: 0;
  6297 + width: 116px;
  6298 +}
  6299 +#facets-menu .facet-menu {
  6300 + border-bottom: 1px solid #333;
  6301 + margin-bottom: 15px;
  6302 +}
  6303 +#facets-menu .facet-menu-label {
  6304 + background:#E8F5FB;
  6305 + text-transform:uppercase;
  6306 + padding:10px 10px 2px 10px;
  6307 +}
  6308 +#facets-menu .facet-menu-options {
  6309 + color: #959595;
  6310 + font-size: 0.8em
  6311 +}
  6312 +#facets-menu .facet-menu-options a {
  6313 + color: #007788;
  6314 + font-size: 1.2em;
  6315 +}
  6316 +.controller-search #content #search-results .search-results-type-product li.product-item {
  6317 + display:block;
  6318 + float:none
  6319 + overflow:visible;
  6320 + padding:10px 0;
  6321 + margin:10px 0;
  6322 + border-bottom:1px solid #000;
  6323 + height:auto;
  6324 + max-height:none;
  6325 +}
  6326 +.controller-search .search-results-innerbox li.product-item hr {
  6327 + display:block;
  6328 + margin:0;
  6329 + clear: both;
  6330 + border: none;
  6331 + background: none;
  6332 +}
  6333 +.product-item-first-column, .product-item-second-column, .product-item-third-column {
  6334 + float: left;
  6335 + margin:0 !important;
  6336 +}
  6337 +.product-item-first-column, .product-item-third-column {
  6338 + width: 20%;
  6339 +}
  6340 +.product-item-second-column {
  6341 + width:60%;
  6342 +}
  6343 +#content h1.page-title.no-boxes {
  6344 + left:230px !important;
  6345 +}
  6346 +#main-content-wrapper-8 {
  6347 + padding: 0 !important;
  6348 +}
  6349 +.product-item-second-column span.product-title-link {
  6350 + display:block;
  6351 + margin:0 0 15px 0;
  6352 +}
  6353 +.product-item-second-column span.product-title-link a {
  6354 + color: #006577;
  6355 + font-weight:bold;
  6356 + font-size:1.2em;
  6357 +}
  6358 +.results-header {
  6359 + border-bottom: 1px solid #000;
  6360 + float: right;
  6361 + font-size: 0.9em;
  6362 + padding: 10px 0;
  6363 + width: 76.5%;
  6364 + margin:0 0 5px 0;
  6365 +}
  6366 +.total-pages-found {
  6367 + float: left;
  6368 + width: 50%;
  6369 +}
  6370 +.current-page {
  6371 + float: right;
  6372 + width: 50%;
  6373 + text-align: right;
  6374 +}
  6375 +#advanced_search_link {
  6376 + display: none;
  6377 +}