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?


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

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";
}

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


@ZUS he actualizado mi respuesta
Rakesh Donga
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.