API Soap - Comment obtenir une demande par Limite 10 basée sur la pagination?

8

Je reçois la liste des produits en utilisant catalogProductList , cela prend trop de temps pour renvoyer les valeurs (voir capture d'écran) en fait, mon nombre de produits est de 24K, comment puis-je exécuter en utilisant la limite 10 et si je clique sur la page 2, puis ne charge que les 10 suivants (maintenant charge tout alors seulement imprimer la valeur).

Maintenant, mon design ressemble,

entrez la description de l'image ici

Code:

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

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

Comment exécuter API soap v2 en tant que limite 10, et devrait être la charge suivante 10 lorsque je clique sur la page 2?

zus
la source
vous avez une collection de produits personnalisée? et actuellement la pagination fonctionne ou non
Rakesh Donga
Collection de produits non personnalisée, tous les produits et la pagination fonctionnent.
zus
veuillez ajouter votre code dans votre question
Rakesh Donga
@RakeshDonga vient d'être mis à jour avec le code. J'utilise datatables.net/examples/styling/bootstrap4 dans mon codeigniter.
zus
tu as essayé ça? stackoverflow.com/a/32745817/10748606
Rakesh Donga

Réponses:

6

Malheureusement pour autant que je sache, vous ne pouvez pas simplement passer une limite à l'API SOAP.

Une approche qui fonctionnerait si vous n'avez pas besoin de filtrer la liste par aucun attribut, que vous souhaitez obtenir tous les attributs et qu'il n'y ait pas d'entité_id manquante pour les produits (c'est-à-dire que vous n'avez jamais supprimé un produit). Il s'agit de l'approche pour obtenir des lots de x produits en fonction du maximum entity_id et d'une page donnée .

Quoi qu'il en soit, si les hypothèses ci-dessus ne sont pas acceptables pour votre besoin, vous ne devriez pas l'utiliser :-)

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



} 
}

ici le code limite est également disponible

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

lien utile

Rakesh Donga
la source
@ZUS j'ai mis à jour ma réponse
Rakesh Donga