API de jabón: ¿cómo obtener la solicitud del límite 10 en función de la paginación?

8

Estoy obteniendo la lista de productos usando catalogProductList , está tardando demasiado en devolver los valores (ver captura de pantalla) en realidad mi recuento de productos es de 24K, ¿cómo puedo ejecutar usando el límite 10 y si hago clic en la página 2, entonces solo cargaré los siguientes 10 (ahora cargar todo entonces solo imprime el valor).

Ahora mi diseño parece,

ingrese la descripción de la imagen aquí

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

¿Cómo ejecutar API soap v2 como límite 10, y debería ser la próxima carga 10 cuando hago clic en la página 2?

zus
fuente
tienes una colección personalizada de productos y actualmente la paginación funciona o no
Rakesh Donga
No es una colección de productos personalizada, haciendo que todos los productos y la paginación funcionen.
zus
por favor agregue su código en su pregunta
Rakesh Donga
@RakeshDonga Recién actualizado con código. Estoy usando datatables.net/examples/styling/bootstrap4 en mi codeigniter.
zus
has intentado esto? stackoverflow.com/a/32745817/10748606
Rakesh Donga

Respuestas:

6

Desafortunadamente, que yo sepa, no puede simplemente pasar un límite a la API SOAP.

Un enfoque que funcionaría si no necesita filtrar la lista por ningún atributo, desea obtener todos los atributos y no le faltan identificadores de entidad para los productos (es decir, nunca ha eliminado un producto). Este es el enfoque para obtener grupos de productos x basados ​​en la entidad máxima_id y una página determinada .

De todos modos, si los supuestos anteriores no son aceptables para su requerimiento, no debe usarlo :-)

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



} 
}

aquí también está disponible el código de límite

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

enlace útil

Rakesh Donga
fuente
@ZUS he actualizado mi respuesta
Rakesh Donga