diff --git a/app/views/search/_product.rhtml b/app/views/search/_product.rhtml index 2a30cb6..613bc20 100644 --- a/app/views/search/_product.rhtml +++ b/app/views/search/_product.rhtml @@ -5,9 +5,10 @@ product_item_pos = 0 if ! product_item_pos product_item_pos += 1 %> +<% extra_content = @plugins.map(:asset_product_extras, product, product.enterprise).collect { |content| instance_eval(&content) } %> +
  • - <%= link_to_product product, :class => 'product-pic', :style => 'background-image:url(%s)' % - ( product.image ? product.image.public_filename(:minor) : '/images/icons-app/product-default-pic-minor.png' ) %> + <%= link_to_product product, :class => 'product-pic', :style => 'background-image:url(%s)' % product.default_image(:minor) %> <%= link_to_product product %> @@ -18,4 +19,7 @@ product_item_pos += 1 <% end %>
  • <%=_('Category:') + ' ' + link_to_product_category(product.product_category) %>
  • + + <%= extra_content.join('\n') %> + diff --git a/lib/noosfero/plugin.rb b/lib/noosfero/plugin.rb index 2c2ea8f..ec74dc1 100644 --- a/lib/noosfero/plugin.rb +++ b/lib/noosfero/plugin.rb @@ -103,6 +103,12 @@ class Noosfero::Plugin nil end + # -> Adds content to products on asset list + # returns = lambda block that creates a html code + def asset_product_extras(product, enterprise) + nil + end + # -> Adds content to the beginning of the page # returns = lambda block that creates html code or raw rhtml/html.erb def body_beginning diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css index 5508c17..206409c 100644 --- a/public/stylesheets/application.css +++ b/public/stylesheets/application.css @@ -4590,6 +4590,7 @@ h1#agenda-title { } .search-results-type-product li.product-item { + position: relative; height: 60px; overflow: hidden; } diff --git a/test/functional/search_controller_test.rb b/test/functional/search_controller_test.rb index 1f31bcf..a9cc95c 100644 --- a/test/functional/search_controller_test.rb +++ b/test/functional/search_controller_test.rb @@ -289,6 +289,27 @@ class SearchControllerTest < Test::Unit::TestCase assert_equal [prod1], assigns(:results)[:products] end + should 'include extra content supplied by plugins on product asset' do + enterprise = fast_create(Enterprise) + product = fast_create(Product, :enterprise_id => enterprise.id) + plugin1_local_variable = "Plugin1" + plugin1_content = lambda {"This is #{plugin1_local_variable} speaking!"} + plugin2_local_variable = "Plugin2" + plugin2_content = lambda {"This is #{plugin2_local_variable} speaking!"} + contents = [plugin1_content, plugin2_content] + + plugins = mock() + plugins.stubs(:enabled_plugins).returns([]) + plugins.stubs(:map).with(:body_beginning).returns([]) + plugins.stubs(:map).with(:asset_product_extras, product, enterprise).returns(contents) + Noosfero::Plugin::Manager.stubs(:new).returns(plugins) + + get :assets, :asset => 'products' + + assert_tag :tag => 'span', :content => 'This is ' + plugin1_local_variable + ' speaking!', :attributes => {:id => 'plugin1'} + assert_tag :tag => 'span', :content => 'This is ' + plugin2_local_variable + ' speaking!', :attributes => {:id => 'plugin2'} + end + should 'paginate enterprise listing' do @controller.expects(:limit).returns(1) ent1 = create_profile_with_optional_category(Enterprise, 'teste 1') -- libgit2 0.21.2