API de sabão - Como obter solicitação pelo limite 10 com base na paginação?

8

Estou recebendo a lista de produtos usando catalogProductList , está demorando muito para retornar os valores (veja a captura de tela), na verdade, a contagem de meus produtos é 24K, como posso executar usando o limite 10 e, se clicar na página 2, carregarei apenas os próximos 10 (agora carregue tudo então apenas imprime o valor).

Agora meu design se parece,

insira a descrição da imagem aqui

Código:

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

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

Como executar o API soap v2 como limite 10 e deve ser o próximo carregamento 10 quando eu clicar na página 2?

zus
fonte
você tem uma coleção de produtos personalizada? e atualmente pagination trabalhando ou não
Rakesh Donga
Não é uma coleção de produtos personalizados, com todos os produtos e paginação funcionando.
Zus 1/03/19
por favor, adicione seu código na sua pergunta
Rakesh Donga
@RakeshDonga Apenas agora atualizado com o código. Estou usando datatables.net/examples/styling/bootstrap4 no meu codeigniter.
Zus 1/03/19
você já tentou isso? stackoverflow.com/a/32745817/10748606
Rakesh Donga

Respostas:

6

Infelizmente, tanto quanto sei, você não pode simplesmente passar um limite para a API SOAP.

Uma abordagem que funcionaria se você não precisasse filtrar a lista por nenhum atributo, deseja obter todos os atributos e não possuir os entity_ids ausentes para produtos (ou seja, você nunca excluiu um produto). Essa é a abordagem para obter lotes de x produtos com base no máximo entity_id e em uma determinada página .

De qualquer forma, se as suposições acima não forem aceitáveis ​​para sua exigência, você não deve usá-la :-)

//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
fonte
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"); 



} 
}

aqui código de limite também disponível

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

link útil

Rakesh Donga
fonte
@ZUS Eu atualizei a minha resposta
Rakesh Donga