API Soap: come ottenere la richiesta tramite Limit 10 in base all'impaginazione?


8

Ricevo l'elenco dei prodotti utilizzando catalogProductList , il suo recupero impiega troppo tempo a restituire i valori (vedi screenshot) in realtà il mio conteggio dei prodotti è 24K, come posso eseguire utilizzando il limite 10 e se faccio clic su pagina 2, carico solo i successivi 10 (Carica ora tutto quindi stampa solo il valore).

Ora il mio design sembra

inserisci qui la descrizione dell'immagine

Codice :

$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

Come eseguire API soap v2 come limite 10 e dovrebbe essere il prossimo caricamento 10 quando faccio clic su pagina 2?


hai la raccolta personalizzata dei prodotti? e attualmente l'impaginazione funziona o no
Rakesh Donga

Raccolta dei prodotti non personalizzata, per far funzionare tutti i prodotti e l'impaginazione.
zus

si prega di aggiungere il codice alla domanda
Rakesh Donga

@RakeshDonga Appena aggiornato con il codice. Sto usando datatables.net/examples/styling/bootstrap4 nel mio codeigniter.
zus

Risposte:


6

Sfortunatamente, per quanto ne so, non puoi semplicemente passare un limite all'API SOAP.

Un approccio che funzionerebbe se non fosse necessario filtrare l'elenco in base ad alcun attributo, desiderare ottenere tutti gli attributi e non avere entità_id mancanti per i prodotti (ovvero non è mai stato eliminato un prodotto). Questo è l'approccio per ottenere mazzi di prodotti x basati sul massimo entity_id e una determinata pagina .

Comunque se i presupposti di cui sopra non sono accettabili per le tue esigenze, non dovresti usarli :-)

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



} 
}

qui è disponibile anche il codice limite

$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 utile


@ZUS Ho aggiornato la mia risposta
Rakesh Donga il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.