Soap API - Wie erhalte ich eine Anfrage von Limit 10 basierend auf der Paginierung?

8

Ich erhalte eine Produktliste mit catalogProductList . Es dauert zu lange, bis die Werte zurückgegeben werden (siehe Screenshot). Meine Produktanzahl beträgt 24 KB. Wie kann ich mit Limit 10 arbeiten und wenn ich auf Seite 2 klicke , lade ich nur die nächsten 10 (Jetzt laden) alles dann nur den Wert ausdrucken).

Jetzt sieht mein Design aus wie:

Geben Sie hier die Bildbeschreibung ein

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

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

Wie führe ich API Soap v2 als Limit 10 aus und sollte die nächsten 10 laden, wenn ich auf Seite 2 klicke?

zus
quelle
Sie haben benutzerdefinierte Produktkollektion bekommen? und derzeit Paginierung funktioniert oder nicht
Rakesh Donga
Keine benutzerdefinierte Produktkollektion, bei der alle Produkte und die Paginierung funktionieren.
Zus
Bitte fügen Sie Ihren Code in Ihre Frage
Rakesh Donga
@ RakeshDonga Gerade jetzt mit Code aktualisiert. Ich verwende datatables.net/examples/styling/bootstrap4 in meinem Codeigniter.
Zus
Hast du das versucht? stackoverflow.com/a/32745817/10748606
Rakesh Donga

Antworten:

6

Soweit ich weiß, können Sie der SOAP-API leider nicht einfach ein Limit übergeben.

Ein Ansatz, der funktionieren würde, wenn Sie die Liste nicht nach Attributen filtern müssen, alle Attribute abrufen möchten und keine entity_ids für Produkte fehlen (dh Sie haben noch nie ein Produkt gelöscht). Dies ist der Ansatz, um Bündel von x Produkten basierend auf der maximalen entity_id und einer bestimmten Seite abzurufen .

Wenn die oben genannten Annahmen für Ihre Anforderung nicht akzeptabel sind, sollten Sie sie nicht verwenden :-)

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



} 
}

hier auch limitcode verfügbar

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

nützlicher Link

Rakesh Donga
quelle
@ ZUS Ich habe meine Antwort aktualisiert
Rakesh Donga