特定商店的 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
干杯
我有一个支持 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
干杯