无法显示所有产品
Can't display all products
我正在使用 Spree Commerce 开发 Rails 应用程序。
我正在尝试在 分类单元 中显示所有产品,因为我不是将它们用作类别,而是用作某种注册表。
所以,我正在编辑 /app/views/spree/taxons/show。html.erb。特别是这一行:
<%= render partial: 'spree/shared/products', locals: { products: @products, taxon: @taxon } %>
更改为:
<%= render :partial => 'spree/shared/products', :locals => { :products => @products } %>
但它仍然显示"No products found"。但是在我的索引中显示了它们。
那么,如何正确展示所有产品?
提前致谢。
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]
Rails 4.2.5
Spree 3.0.4
根据要求:
1) 这是产品展示
<% @body_id = 'product-details' %>
<% cache [I18n.locale, current_currency, @product, @product.possible_promotions] do %>
<div data-hook="product_show" itemscope itemtype="https://schema.org/Product">
<div class="col-md-4" data-hook="product_left_part">
<div data-hook="product_left_part_wrap">
<div id="product-images" data-hook="product_images">
<div id="main-image" class="panel panel-default" data-hook>
<div class="panel-body text-center">
<%= render :partial => 'image' %>
</div>
</div>
<div id="thumbnails" data-hook>
<%= render :partial => 'thumbnails' %>
</div>
</div>
<div data-hook="product_properties">
<%= render :partial => 'properties' %>
</div>
<div data-hook="promotions">
<%= render :partial => 'promotions' %>
</div>
</div>
</div>
<div class="col-md-8" data-hook="product_right_part">
<div data-hook="product_right_part_wrap">
<div id="product-description" data-hook="product_description">
<h1 class="product-title" itemprop="name"><%= @product.name %></h1>
<div class="well" itemprop="description" data-hook="description">
<%= product_description(@product) rescue Spree.t(:product_has_no_description) %>
</div>
<div id="cart-form" data-hook="cart_form">
<%= render :partial => 'cart_form' %>
</div>
</div>
<%= render :partial => 'taxons' %>
</div>
</div>
</div>
<% end %>
2) 从类群中显示
<h1 class="taxon-title"><%= @taxon.name %></h1>
<% content_for :sidebar do %>
<div data-hook="taxon_sidebar_navigation">
<%= render partial: 'spree/shared/taxonomies' %>
<%= render partial: 'spree/shared/filters' if @taxon.leaf? %>
</div>
<% end %>
<div data-hook="taxon_products">
<%= render partial: 'spree/shared/products', locals: { products: @products, taxon: @taxon } %>
</div>
<% unless params[:keywords].present? %>
<div data-hook="taxon_children">
<% cache [I18n.locale, @taxon] do %>
<%= render partial: 'taxon', collection: @taxon.children %>
<% end %>
</div>
<% end %>
3) 这就是我在索引中呈现的方式
<div data-hook="homepage_products">
<% cache(cache_key_for_products) do %>
<%= render :partial => 'spree/shared/products', :locals => { :products => @products } %>
<% end %>
</div>
4) _products.html.erb
<%
paginated_products = @searcher.retrieve_products if params.key?(:keywords)
paginated_products ||= products
%>
<% content_for :head do %>
<% if paginated_products.respond_to?(:num_pages) %>
<%= rel_next_prev_link_tags paginated_products %>
<% end %>
<% end %>
<div data-hook="products_search_results_heading">
<% if products.empty? %>
<div data-hook="products_search_results_heading_no_results_found">
<%= Spree.t(:no_products_found) %>
</div>
<% elsif params.key?(:keywords) %>
<div data-hook="products_search_results_heading_results_found">
<h6 class="search-results-title"><%= Spree.t(:search_results, keywords: h(params[:keywords])) %></h6>
</div>
<% end %>
</div>
<% if products.any? %>
<div id="products" class="row" data-hook>
<% products.each do |product| %>
<% url = spree.product_url(product, taxon_id: @taxon.try(:id)) %>
<div id="product_<%= product.id %>" class="col-md-3 col-sm-6 product-list-item" data-hook="products_list_item" itemscope itemtype="https://schema.org/Product">
<div class="panel panel-default">
<% cache(@taxon.present? ? [I18n.locale, current_currency, @taxon, product] : [I18n.locale, current_currency, product]) do %>
<div class="panel-body text-center product-body">
<%= link_to small_image(product, itemprop: "image"), url, itemprop: 'url' %><br/>
<%= link_to truncate(product.name, length: 50), url, class: 'info', itemprop: "name", title: product.name %>
</div>
<div class="panel-footer text-center">
<span itemprop="offers" itemscope itemtype="https://schema.org/Offer">
<span class="price selling lead" itemprop="price"><%= display_price(product) %></span>
</span>
</div>
<% end %>
</div>
</div>
<% end %>
<% reset_cycle("classes") %>
</div>
<% end %>
<% if paginated_products.respond_to?(:num_pages) %>
<%= paginate paginated_products, theme: 'twitter-bootstrap-3' %>
<% end %>
控制器索引:
module Spree
class HomeController < Spree::StoreController
helper 'spree/products'
respond_to :html
def index
@searcher = build_searcher(params.merge(include_images: true))
@products = @searcher.retrieve_products
@taxonomies = Spree::Taxonomy.includes(root: :children)
end
end
end
首先,您的文件应命名为 _products.html.erb
。
But it still says "No products found"
其次,你能给我们看看这个文件吗?
But in my index they are showed.
您能否也告诉我们您如何在索引中呈现您的产品?
编辑:似乎在 Taxons#show
中,未设置 @products
实例变量。检查您是否在 TaxonsController
.
的显示操作中设置了它
转到spree/frontend/app/controllers/spree/taxons_controller.rb
使 show
方法看起来像这样
def show
@taxon = Taxon.friendly.find(params[:id])
return unless @taxon
@searcher = build_searcher(params.merge(include_images: true))
@products = @searcher.retrieve_products
@taxonomies = Spree::Taxonomy.includes(root: :children)
end
实际上我正在寻找 "No products found" 的答案
这是我的问题 link:
Spree Commerce:未找到产品
Spree Commerce: No Products Found
我刚加入 whosebug.com 几分钟,无法对以上答案添加评论。
这里是 /controllers/spree/taxons_controller.rb:
module Spree
class 分类控制器 < Spree::StoreController
rescue_from ActiveRecord::RecordNotFound,其中:render_404
助手 'spree/products'
respond_to :html
def show
@taxon = Taxon.friendly.find(params[:id])
return unless @taxon
@searcher = build_searcher(params.merge(taxon: @taxon.id, include_images: true))
sorting_scope = params[:order].try(:to_sym) || :ascend_by_updated_at
@taxonomies = Spree::Taxonomy.includes(root: :children)
@searcher.retrieve_products
@products = @searcher.retrieve_products
@curr_page = params[:page] || 1
@products_per_page = Spree::Config.products_per_page
@start_no = @curr_page == 1 ? 1 : ((@curr_page.to_i-1)*@products_per_page)+1
@end_no = @products.length
if @curr_page.to_i > 1
@end_no = ( (@curr_page.to_i-1)*@products_per_page) + @end_no
end
# @end_no = @product_count <= @product_count ? @product_count : @products.length+(@curr_page.to_i-1)*@products_per_page
end
private
def accurate_title
@taxon.try(:seo_title) || super
end
结束
结束
我正在使用 Spree Commerce 开发 Rails 应用程序。
我正在尝试在 分类单元 中显示所有产品,因为我不是将它们用作类别,而是用作某种注册表。
所以,我正在编辑 /app/views/spree/taxons/show。html.erb。特别是这一行:
<%= render partial: 'spree/shared/products', locals: { products: @products, taxon: @taxon } %>
更改为:
<%= render :partial => 'spree/shared/products', :locals => { :products => @products } %>
但它仍然显示"No products found"。但是在我的索引中显示了它们。
那么,如何正确展示所有产品?
提前致谢。
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]
Rails 4.2.5
Spree 3.0.4
根据要求:
1) 这是产品展示
<% @body_id = 'product-details' %>
<% cache [I18n.locale, current_currency, @product, @product.possible_promotions] do %>
<div data-hook="product_show" itemscope itemtype="https://schema.org/Product">
<div class="col-md-4" data-hook="product_left_part">
<div data-hook="product_left_part_wrap">
<div id="product-images" data-hook="product_images">
<div id="main-image" class="panel panel-default" data-hook>
<div class="panel-body text-center">
<%= render :partial => 'image' %>
</div>
</div>
<div id="thumbnails" data-hook>
<%= render :partial => 'thumbnails' %>
</div>
</div>
<div data-hook="product_properties">
<%= render :partial => 'properties' %>
</div>
<div data-hook="promotions">
<%= render :partial => 'promotions' %>
</div>
</div>
</div>
<div class="col-md-8" data-hook="product_right_part">
<div data-hook="product_right_part_wrap">
<div id="product-description" data-hook="product_description">
<h1 class="product-title" itemprop="name"><%= @product.name %></h1>
<div class="well" itemprop="description" data-hook="description">
<%= product_description(@product) rescue Spree.t(:product_has_no_description) %>
</div>
<div id="cart-form" data-hook="cart_form">
<%= render :partial => 'cart_form' %>
</div>
</div>
<%= render :partial => 'taxons' %>
</div>
</div>
</div>
<% end %>
2) 从类群中显示
<h1 class="taxon-title"><%= @taxon.name %></h1>
<% content_for :sidebar do %>
<div data-hook="taxon_sidebar_navigation">
<%= render partial: 'spree/shared/taxonomies' %>
<%= render partial: 'spree/shared/filters' if @taxon.leaf? %>
</div>
<% end %>
<div data-hook="taxon_products">
<%= render partial: 'spree/shared/products', locals: { products: @products, taxon: @taxon } %>
</div>
<% unless params[:keywords].present? %>
<div data-hook="taxon_children">
<% cache [I18n.locale, @taxon] do %>
<%= render partial: 'taxon', collection: @taxon.children %>
<% end %>
</div>
<% end %>
3) 这就是我在索引中呈现的方式
<div data-hook="homepage_products">
<% cache(cache_key_for_products) do %>
<%= render :partial => 'spree/shared/products', :locals => { :products => @products } %>
<% end %>
</div>
4) _products.html.erb
<%
paginated_products = @searcher.retrieve_products if params.key?(:keywords)
paginated_products ||= products
%>
<% content_for :head do %>
<% if paginated_products.respond_to?(:num_pages) %>
<%= rel_next_prev_link_tags paginated_products %>
<% end %>
<% end %>
<div data-hook="products_search_results_heading">
<% if products.empty? %>
<div data-hook="products_search_results_heading_no_results_found">
<%= Spree.t(:no_products_found) %>
</div>
<% elsif params.key?(:keywords) %>
<div data-hook="products_search_results_heading_results_found">
<h6 class="search-results-title"><%= Spree.t(:search_results, keywords: h(params[:keywords])) %></h6>
</div>
<% end %>
</div>
<% if products.any? %>
<div id="products" class="row" data-hook>
<% products.each do |product| %>
<% url = spree.product_url(product, taxon_id: @taxon.try(:id)) %>
<div id="product_<%= product.id %>" class="col-md-3 col-sm-6 product-list-item" data-hook="products_list_item" itemscope itemtype="https://schema.org/Product">
<div class="panel panel-default">
<% cache(@taxon.present? ? [I18n.locale, current_currency, @taxon, product] : [I18n.locale, current_currency, product]) do %>
<div class="panel-body text-center product-body">
<%= link_to small_image(product, itemprop: "image"), url, itemprop: 'url' %><br/>
<%= link_to truncate(product.name, length: 50), url, class: 'info', itemprop: "name", title: product.name %>
</div>
<div class="panel-footer text-center">
<span itemprop="offers" itemscope itemtype="https://schema.org/Offer">
<span class="price selling lead" itemprop="price"><%= display_price(product) %></span>
</span>
</div>
<% end %>
</div>
</div>
<% end %>
<% reset_cycle("classes") %>
</div>
<% end %>
<% if paginated_products.respond_to?(:num_pages) %>
<%= paginate paginated_products, theme: 'twitter-bootstrap-3' %>
<% end %>
控制器索引:
module Spree
class HomeController < Spree::StoreController
helper 'spree/products'
respond_to :html
def index
@searcher = build_searcher(params.merge(include_images: true))
@products = @searcher.retrieve_products
@taxonomies = Spree::Taxonomy.includes(root: :children)
end
end
end
首先,您的文件应命名为 _products.html.erb
。
But it still says "No products found"
其次,你能给我们看看这个文件吗?
But in my index they are showed.
您能否也告诉我们您如何在索引中呈现您的产品?
编辑:似乎在 Taxons#show
中,未设置 @products
实例变量。检查您是否在 TaxonsController
.
转到spree/frontend/app/controllers/spree/taxons_controller.rb
使 show
方法看起来像这样
def show
@taxon = Taxon.friendly.find(params[:id])
return unless @taxon
@searcher = build_searcher(params.merge(include_images: true))
@products = @searcher.retrieve_products
@taxonomies = Spree::Taxonomy.includes(root: :children)
end
实际上我正在寻找 "No products found" 的答案 这是我的问题 link: Spree Commerce:未找到产品 Spree Commerce: No Products Found
我刚加入 whosebug.com 几分钟,无法对以上答案添加评论。
这里是 /controllers/spree/taxons_controller.rb:
module Spree
class 分类控制器 < Spree::StoreController rescue_from ActiveRecord::RecordNotFound,其中:render_404 助手 'spree/products'
respond_to :html
def show
@taxon = Taxon.friendly.find(params[:id])
return unless @taxon
@searcher = build_searcher(params.merge(taxon: @taxon.id, include_images: true))
sorting_scope = params[:order].try(:to_sym) || :ascend_by_updated_at
@taxonomies = Spree::Taxonomy.includes(root: :children)
@searcher.retrieve_products
@products = @searcher.retrieve_products
@curr_page = params[:page] || 1
@products_per_page = Spree::Config.products_per_page
@start_no = @curr_page == 1 ? 1 : ((@curr_page.to_i-1)*@products_per_page)+1
@end_no = @products.length
if @curr_page.to_i > 1
@end_no = ( (@curr_page.to_i-1)*@products_per_page) + @end_no
end
# @end_no = @product_count <= @product_count ? @product_count : @products.length+(@curr_page.to_i-1)*@products_per_page
end
private
def accurate_title
@taxon.try(:seo_title) || super
end
结束 结束