您好我在网站上搜索了我的问题,但没有找到一个简单的解决方案,我认为这个问题非常基础。
我正在使用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
但按日期过滤并不能解决我的问题,重写类是解决这种简单需求的复杂解决方案。
提前致谢
答案 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());
}
我并不为此感到过度兴奋,但是,我认为它非常安全且有效。