Soap API-如何基于分页限制10获取请求?


8

我正在使用catalogProductList获取产品列表,返回结果花费的时间太长(请参见屏幕截图),实际上我的产品数量为24K,如何使用限制10运行,如果我单击第2页然后仅加载下一个10(现在加载)然后,所有内容只会显示该值)。

现在我的设计看起来像

在此处输入图片说明

代码:

$proxy = new SoapClient('www.abc.com/api/v2_soap/?wsdl=1');
        $sessionId = $proxy->login((object)array('username' => 'abc', 'apiKey' => 'abc123'));
        $result = $proxy->catalogProductList((object)array('sessionId' => $sessionId->result, 'filters' => null));      
        return $result->result();

注意:https : //datatables.net/examples/styling/bootstrap4

如何运行API soap v2作为限制10,并且当我单击第2页时应该是下一个10负载吗?


您有定制产品系列吗?和当前分页是否有效
Rakesh Donga

不是自定义产品集合,而是要使所有产品和分页正常工作。
祖斯

请添加您的代码在你的问题
拉克什东亚

@RakeshDonga刚刚更新了代码。我 在codeigniter中使用了 datatables.net/examples/styling/bootstrap4
祖斯,

Answers:


6

不幸的是,据我所知,您不能简单地将限制传递给SOAP API。

如果您不需要按任何属性过滤列表,想要获取所有属性并且不缺少产品的entity_id(即您从未删除过产品),那么一种方法会起作用。这是根据最大的entity_id和给定的页面获取一堆x产品的方法

无论如何,如果以上假设不能满足您的要求,则不应使用它:-)

//soap v2
$client = new SoapClient('http://yoursite/api/v2_soap/?wsdl=1');

$session = $client->login('login', 'password');

//get the maximum entity_id from your database
$maxID = 101; 

//get your page parameter beginning with 1 for the first page
$page = 2; 

 //set your pagesize
$pageSize = 20;

//this is thenumber of pages you will get
$pagesInPagination = ceil ($maxID / $pageSize);

$start = $maxID - ($page - 1) * $pageSize;

$end = $start - $pageSize;

$entityIdList = [];
for ($i = $start; $i > $end; $i--){
    $entityIdList[] = $i;
}


$complexFilter = array(
    'complex_filter' => array(
        array(
            'key' => 'entity_id',
            'value' => array('key' => 'in', 'value' => implode (',',$entityIdList))
        ),
    )
);
$result = $client->catalogProductList($session, $complexFilter);

foreach($result as $product) {
    $data = (array) $product;
    echo $data['product_id']. "\n";
}

1
<?php 
defined('BASEPATH') OR exit('No direct script access allowed'); 
error_reporting(-1); 
ini_set('display_errors', 'On'); 
class Live_stock extends CI_Controller { 

public function index() 
{ 


$this->load->view("header_view"); 

$proxy = new SoapClient('abc.com/api/v2_soap/?wsdl=1'); // TODO : change url 
$sessionId = $proxy->login((object)array('username' => 'abc', 'apiKey' => 'abc123')); 
$result["productArray"] = $proxy->catalogProductList((object)array('sessionId' => $sessionId->result, 'filters' => null)); 
$this->load->view("live_stock_view",$result); 

$this->load->view("footer_view"); 



} 
}

此处也提供限制代码

$in = array();
for ($i = ($page * $size) - $size; $i < ($page * $size); $i++) {
    $in[] = $i + 1;
}
$complexFilter = array('complex_filter' => 
    array(
        array(
            'key' => 'product_id',
            'value' => array(
                'key' => 'in', 
                'value' => join(",", $in)
            )
        )
    )
);

有用的链接


@ZUS我已经更新了我的答案
Rakesh Donga
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.