ограничить количество результатов, используя magento API V2 - PullRequest
3 голосов
/ 19 января 2012

Привет! Я искал на сайте свой вопрос, но не нашел простого решения, и я думаю, что проблема настолько проста.

Я использую Api V2, так что, возможно, сейчас есть решение.Вот мой код:

$api_soap_url = 'http://localhost/magento/api/v2_soap?wsdl=1';

$client = new SoapClient($api_soap_url);
$session_id = $client->__soapCall('login',array($user, $pw));

$data = array($session_id);
$result = $client->__soapCall('customerCustomerList', $data);

Это возвращает все результаты, мне нужно ограничить количество результатов, поэтому я попытался использовать фильтры и другие решения, найденные здесь, но безуспешно.

Единственное, что я не пробовал, это:

Управление количеством результатов от вызова API Magento

Но фильтрация по датене решает мою проблему, и переписывание классов - очень сложное решение для такой простой задачи.

Заранее спасибо

Ответы [ 2 ]

3 голосов
/ 28 августа 2012

Я не уверен, что фильтр может ограничить количество результатов, но вы можете попробовать это:

$complexFilter = array(
    'complex_filter' => array(
        array(
            'key' => 'created_at',
            'value' => array('key' => 'gt', 'value' => '2012-05-13 06:11:00')
            // where created_at is greater than 2012-05-13 06:11:00
            // For example: eq (equals), neq (not equals), gt (greater than), lt (less than), etc.
        )
    )
);
$result = $client->customerCustomerList($session, $complexFilter);
1 голос
/ 22 марта 2013

В итоге я переопределил app / code / core / Mage / Sales / Model / Order / Api.php , добавив поле «особой магии», называемое collection.limit. Ваш пробег может отличаться; У меня есть жесткий контроль над установкой Magento и программами (в данном случае набором программ на C #), обращающимися к установке Magento.

Мой вызывающий просто использует "магическое поле" в качестве пары ключ / значение, что-то вроде этого (пожалуйста, проверьте, опять же, я звонил из C #, поэтому этот php следует считать подозрительным):

$collectionLimitClause = array (
  'key' => 'collection.limit',
  'value' => array('key' => 'eq', 'value' => '10')
);

В моей установке Magento (эта часть тестируется, работает и работает), я создал Sales / Model / Order / Api.php в своем локальном пространстве имен и переопределил функцию items. Примерно в 32-й строке этой функции вы увидите следующее:

    $apiHelper = Mage::helper('api');
    $filters = $apiHelper->parseFilters($filters, $this->_attributesMap['order']);
    try {
        foreach ($filters as $field => $value) {
            $orderCollection->addFieldToFilter($field, $value);
        }
    } catch (Mage_Core_Exception $e) {
        $this->_fault('filters_invalid', $e->getMessage());
    }

Вместо этого я «ловлю» свой собственный магический ограничитель с помощью strncmp здесь, с if-else внутри foreach:

    $apiHelper = Mage::helper('api');
    $filters = $apiHelper->parseFilters($filters, $this->_attributesMap['order']);
    try {
        foreach ($filters as $field => $value) {
            if( !strncmp($field,"collection.limit",16) ) {
                $orderCollection->getSelect()->limit($value['eq']);
            }
            else {
                $orderCollection->addFieldToFilter($field, $value);
            }
        }
    } catch (Mage_Core_Exception $e) {
        $this->_fault('filters_invalid', $e->getMessage());
    }

Я не слишком взволнован этим, но я думаю, что это довольно безопасно и работает.

...