Soap API - Bagaimana cara mendapatkan permintaan berdasarkan Limit 10 berdasarkan pagination?

8

Saya mendapatkan daftar produk menggunakan catalogProductList , butuh waktu terlalu lama untuk mengembalikan nilai (lihat tangkapan layar) sebenarnya jumlah produk saya 24K, bagaimana saya bisa menjalankan dengan menggunakan batas 10 dan jika saya mengklik halaman 2 maka hanya memuat 10 berikutnya (Sekarang muat semuanya kemudian hanya mencetak nilai).

Sekarang desain saya terlihat seperti,

masukkan deskripsi gambar di sini

Kode:

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

Catatan: https://datatables.net/examples/styling/bootstrap4

Bagaimana menjalankan API sabun v2 sebagai batas 10, dan seharusnya 10 memuat berikutnya ketika saya mengklik halaman 2?

zus
sumber
Anda mendapatkan koleksi produk khusus? dan saat ini pagination berfungsi atau tidak
Rakesh Donga
Bukan koleksi produk khusus, membuat semua produk dan pagination berfungsi.
zus
silakan tambahkan kode Anda dalam pertanyaan Anda
Rakesh Donga
@RakeshDonga Baru saja diperbarui dengan kode. Saya menggunakan datatables.net/examples/styling/bootstrap4 di codeigniter saya.
zus
Anda sudah mencoba ini? stackoverflow.com/a/32745817/10748606
Rakesh Donga

Jawaban:

6

Sayangnya sejauh yang saya tahu Anda tidak bisa begitu saja melewati batas ke SOAP API.

Satu pendekatan yang akan berhasil jika Anda tidak perlu memfilter daftar dengan atribut apa pun, ingin mendapatkan semua atribut dan tidak memiliki entitas_ids yang hilang untuk produk (yaitu Anda tidak pernah menghapus suatu produk). Ini adalah pendekatan untuk mendapatkan banyak x produk berdasarkan maksimum entity_id dan halaman yang diberikan .

Lagi pula jika asumsi di atas tidak dapat diterima untuk kebutuhan Anda, Anda tidak boleh menggunakannya :-)

//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";
}
HelgeB
sumber
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"); 



} 
}

di sini kode batas juga tersedia

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

tautan bermanfaat

Rakesh Donga
sumber
@ ZUS saya telah memperbarui jawaban saya
Rakesh Donga