Soap API-ページネーションに基づいてLimit 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

カスタム製品コレクションではなく、すべての製品とページネーションを機能させます。
zus

質問にコードを追加してください
Rakesh Donga

@RakeshDongaちょうど今コードで更新されました。codeigniter でdatatables.net/examples/styling/bootstrap4 を使用 しています。
zus

あなたはこれを試してみましたか?stackoverflow.com/a/32745817/10748606
Rakesh Donga

回答:


6

残念ながら、私が知る限り、SOAP APIに制限を渡すことはできません。

属性でリストをフィルタリングする必要がなく、すべての属性を取得し、製品のentity_idが欠落していない場合(つまり、製品を削除したことがない場合)に機能する1つのアプローチ。これは、最大の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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.