首页 文章

如何在Magento API调用中添加限制选项

提问于
浏览
2

我正在为我的商店创建Web服务 . 我正在使用magento API从商店收集产品清单 . 但它显示了所有500条记录 . 我想要每页25条记录 . 在API调用中添加什么?或者什么过滤器将适用于此?

//创建soap对象$ proxy = new SoapClient('http://localhsot/magento/api/soap/?wsdl');

// create authorized session id using api user name and api key
// $sessionId = $proxy->login('apiUser', 'apiKey');
$sessionId = $proxy->login('test_admin', '12345678');

    $filters = array(


    );


 // Get list of product
$productlist = $proxy->call($sessionId, 'product.list', array($filters));

print_r($productlist );

3 回答

  • 0

    这不起作用,你可以通过id限制它:

    $filters = array('id'=>array("gteq"=>1), 'id'=>array("lteq"=>1000));
    

    那样你可以添加一些分页?

  • 0

    我知道这是一个古老的问题,但我在努力解决这个问题 . 我创建了自己的SOAP API endpoints ,它与默认的catalogProductList函数完全相同,但有一个额外的参数 . 请参阅以下代码:

    $collection = Mage::getModel('catalog/product')->getCollection()
        ->addStoreFilter($this->_getStoreId($store))
        ->addAttributeToSelect('name');
    if($limit) {
        $collection->setOrder('updated_at', 'ASC');
        $collection->setPageSize($limit);
    }
    /** @var $apiHelper Mage_Api_Helper_Data */
    $apiHelper = Mage::helper('api');
    $filters = $apiHelper->parseFilters($filters, $this->_filtersMap);
    try {
        foreach ($filters as $field => $value) {
            $collection->addFieldToFilter($field, $value);
        }
    } catch (Mage_Core_Exception $e) {
        $this->_fault('filters_invalid', $e->getMessage());
    }
    $result = array();
    foreach ($collection as $product) {
        $result[] = array(
            'product_id' => $product->getId(),
            'sku'        => $product->getSku(),
            'name'       => $product->getName(),
            'set'        => $product->getAttributeSetId(),
            'type'       => $product->getTypeId(),
            'category_ids' => $product->getCategoryIds(),
            'website_ids'  => $product->getWebsiteIds(),
            'updated_at'  => $product->getUpdatedAt(),
            'created_at'  => $product->getCreatedAt()
        );
    }
    return $result;
    

    从那里我们跟踪最后的updated_at值并将其用作过滤器以获取下一个[LIMIT]项 . 默认情况下,updated_at和created_at不在响应中,并且列表没有被updated_at排序,所以我添加了这个 .

  • -1

    我不确定这个,但你可以尝试这个,因为API正在使用集合,这是限制集合大小的方法

    $filters = array(
        'setPageSize' => 10
    );
    

相关问题