Фильтрация продуктов с помощью API Magento в Ruby on Rails с помощью камня Savon (SOAP)

Я использую это code для моего приложения rails с API Magento. Все в порядке, кроме одного, мне нужно отфильтровать товары по аргументам Magento API, но я не знаю как :(

Очевидно, я тестировал больше решений (массив, хэш и т. Д.), Но безуспешно.

Pd: Извините, мой английский очень ограничен

Ссылки


person skozz    schedule 08.11.2011    source источник


Ответы (3)


Я знаю, что это очень поздно, но если кто-то еще находит этот поток, я создал гем magento_api_wrapper, который реализует фильтры для Magento SOAP API v2. Вы можете найти код здесь: https://github.com/harrisjb/magento_api_wrapper

Подводя итог, если вы хотите использовать один из простых фильтров Magento SOAP API, вы можете передать хэш с ключом и значением:

api = MagentoApiWrapper::Catalog.new(magento_url: "yourmagentostore.com/index.php", magento_username: "soap_api_username", magento_api_key: "userkey123")

api.product_list(simple_filters: [{key: "status", value: "processing"}, {key: created_at, value: "12/10/2013 12:00" }])

А чтобы использовать сложный фильтр, передайте хеш с ключом, оператором и значением:

api.product_list(complex_filters: [{key: "status", operator: "eq", value: ["processing", "completed"]}, {key: created_at, operator: "from", value: "12/10/2013" }])
person harrisjb    schedule 28.02.2014

Потратил много времени на то, чтобы заставить это работать с Savon - реальных решений в сети нет. Поехал, посмотрел на вызов SOAP и пропал: элемент

params = {:filter => {:item => {:key => "status", :value => "closed"}}}

result = client.call(:sales_order_list, message: { session_id: session_id, filters: params})

При этом будут возвращены только заказы со статусом «закрыто».

person Andrew Lynch    schedule 22.03.2016
comment
отличный! Работай ко мне! когда нужно применять более одного фильтра? - person Ismael Vacco; 16.08.2016
comment
У меня это сработало для API списка продуктов каталога. Спасибо!! Как упоминал @IsmaelVacco, не уверен, как использовать несколько фильтров. Попытка [{:filter => {:item => {:key => "status", :value => "1"}}}, {:filter => {:item => {:key => "type", :value => "grouped"}}}] не работает. Он просто применяет первые фильтры из списка - person Amit Patel; 13.11.2017
comment
filters: [{:filter=>{:item=>[{:key=>"status", :value=>"1"}, {:key=>"type", :value=>"simple"}]}}] работал с несколькими фильтрами - person Amit Patel; 13.11.2017

Если вы хотите работать с Magento и Rails, Gemgento может быть тем, что вам нужно. Он заменяет интерфейс Magento на RoR.

http://www.gemgento.com

После синхронизации с Magento вы можете использовать метод Gemgento::Product.filter вместе с некоторыми областями, чтобы легко искать структуру EAV Magento.

attribute = Gemgento::Attribute.find_by(code: 'color')
Gemgento::Product.filter({ attribute: attribute, value: 'red' })

Метод фильтрации фактически может принимать всевозможные комбинации массива / хэша.

filters = [
   { attribute: [attribute1, attribute2], value: %w[red yellow black] },
   { attribute: size_attribute, value: 'L' }
]
Gemgento::Product.filter(filters)
person KPheasey    schedule 07.07.2014
comment
Хотя очень дорого. - person snowangel; 20.11.2014