特定商店的 Spree 产品 API - spree-multi-domain

Spree Products API for a particular store - spree-multi-domain

我有一个支持 spree 多域扩展的 Spree 应用程序。这里他们是不同的商店,分配了不同的产品。(在管理面板中)

对于 STORE 1 域来说是 store1.example.com 并且对于 STORE 2 -> store2.example.com

这里我设置了多个商店的通配符子域

*.example.com

现在好了,当我调用 example.com/api/products.json?token=MY_TOKEN_ID

我得到 JSON 格式的完整产品列表。但 在这里,我在通过 api 调用检索商店 1 和商店 2 的产品时遇到问题。

当我为

调用 products.json 时

商店 1 store1.example.com/api/products.json?token=MY_TOKEN_ID

商店 2 store2.example.com/api/products.json?token=MY_TOKEN_ID

然后我也会像往常一样获得完整的产品列表 example.com/api/products.json?token=MY_TOKEN_ID

我在这里期望的是,当我为特定商店的产品调用 GET 请求时,我应该获得在管理面板中分配的该特定商店的产品。

所以怎么办,看不懂。

请帮忙??

spree-multi-gem 并非 100% 稳定且仍在开发中。

您需要覆盖 API 并为每个请求使用 current_store。

A new ControllerHelpers::Store concern provides a current_store helper to fetch a helper based on the request’s domain.

只是一个例子,与api

无关

创建一个 /app/controllers/spree/taxons_controller_decorator.rb 并扩展 TaxonsController。你需要 class_eval 它,否则你会覆盖完整的 class!!

Spree::TaxonsController.class_eval do
   def show
    @taxon = Spree::Taxon.find_by_store_id_and_permalink!(current_store.id, params[:id])
    return unless @taxon

    @searcher = build_searcher(params.merge(:taxon => @taxon.id))
    @products = @searcher.retrieve_products
    @taxonomies = get_taxonomies
  end
end

因此,Spree::TaxonsController 中的所有其他函数都保持原样,只是 show 方法被覆盖了

所以对于你的情况:这是原始文件

https://github.com/spree/spree/blob/master/api/app/controllers/spree/api/v1/products_controller.rb

所以你需要进入你的 rails 应用程序并有一个 /app/controllers/spree/api/v1/products_controller_decorator.rb 你去的地方(我认为可行)

Spree::Api::V1::ProductsController.class_eval do

end

但在阅读之后我认为最好的想法是覆盖 https://github.com/spree/spree/blob/715d4439f4f02a1d75b8adac74b77dd445b61908/api/app/controllers/spree/api/base_controller.rb#L132

第 132 行 product_scope :-)

这应该对你有帮助 - 如果没有,你最好去 magento :P

干杯