Ошибка списка продуктов фильтра веб-службы magento Вызов функции-члена getBackend () для необъекта - PullRequest
1 голос
/ 14 января 2012

Я использую сервисную ссылку Visual Studio 2010 для использования веб-сервиса magento soap v2 api.

php 5.3.8, magento 1.6 установить на windows 7 iis 7.5

Я могу войти и перечислить все продукты, но как только я поставлю фильтр, возникает исключение

Вызов функции-члена getBackend () для необъекта

php журнал ошибок:

Неустранимая ошибка PHP: вызов функции-члена getBackend () для необъекта в C: \ inetpub \ wwwroot \ Magento1620 \ app \ code \ core \ Mage \ Eav \ Model \ Entity \ Abstract.php в строке 816

static void TestMagentoSoapV2Wcf()
    {
        MagentoService magentoService = new MagentoService();

        MageSvcRef.associativeEntity assoEntity = new MageSvcRef.associativeEntity();
        assoEntity.key = "like";
        assoEntity.value = "n2610";

        MageSvcRef.complexFilter complexFilter = new MageSvcRef.complexFilter();
        complexFilter.key = "sku";
        complexFilter.value = assoEntity;

        MageSvcRef.complexFilter[] compFilters = new MageSvcRef.complexFilter[1];
        compFilters[0] = complexFilter;

        MageSvcRef.filters filters = new MageSvcRef.filters();
        filters.complex_filter = compFilters;

        string sessionId = magentoService.login("zzc000", "zzc000");

        var products = magentoService.catalogProductList(sessionId, filters, string.Empty);
    }

Пожалуйста, помогите

Спасибо

1 Ответ

1 голос
/ 15 января 2012

Кажется, это ошибка в Magento, но я не уверен, так как я не являюсь разработчиком PHP, она может отражать только установку Magento и PHP на Windows

изменить этот файл

\app\code\core\Mage\Catalog\Model\Product\Api\V2.php

строка 57-62

foreach ($filters->complex_filter as $_filter) {                
            $_value = $_filter->value;
            $preparedFilters[$_filter->key] = array(
                $_value->key => $_value->value
            );
        }

до

foreach ($filters->complex_filter as $_field => $_filter) {
            $preparedFilters[$_field] = array(
                    $_filter->key => $_filter->value
            );
        }

Я также заметил, что в другом файле V2.php этот фрагмент кода написан по-разному. API клиента такой же, как продукт, но API заказа написано так:

foreach ($filters->complex_filter as $_filter) {
            $_value = $_filter->value;
            if(is_object($_value)) {
                $preparedFilters[][$_filter->key] = array(
                    $_value->key => $_value->value
                );
            } elseif(is_array($_value)) {
                $preparedFilters[][$_filter->key] = array(
                    $_value['key'] => $_value['value']
                );
            } else {
                $preparedFilters[][$_filter->key] = $_value;
            }
        }

Кто-нибудь может указать правильное использование массива в PHP?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...