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?


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

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

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


@ ZUS Ich habe meine Antwort aktualisiert
— Rakesh Donga
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.