使用magento API V2限制结果数量

时间:2012-01-19 11:24:39

标签: api magento numbers limit

您好我在网站上搜索了我的问题,但没有找到一个简单的解决方案,我认为这个问题非常基础。

我正在使用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);

这会返回所有结果,我需要限制结果数量,所以我尝试使用过滤器和其他解决方案,但没有运气。

我唯一没试过的是这一个:

Control the number of results from a Magento API call

但按日期过滤并不能解决我的问题,重写类是解决这种简单需求的复杂解决方案。

提前致谢

2 个答案:

答案 0 :(得分:3)

我不确定过滤器是否可以限制结果数量,但您可以尝试:

$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 :(得分:1)

我最终覆盖了 app / code / core / Mage / Sales / Model / Order / Api.php ,添加了一个名为“collection.limit”的“特殊魔术”字段。你的旅费可能会改变;我对Magento安装和访问Magento安装的程序(在这种情况下,一组C#程序)都有严格的控制。

我的来电者只是使用“魔术场”作为键/值对,就像这样(请再次测试,我是从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“抓住”我自己的魔法限制器,在foreach中使用if-else:

    $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());
    }

我并不为此感到过度兴奋,但是,我认为它非常安全且有效。