Soap API - Как получить запрос по Limit 10 на основе нумерации страниц?

8

Я получаю список продуктов, используя catalogProductList , для возврата значений требуется слишком много времени (см. Скриншот). На самом деле количество моих продуктов составляет 24 КБ, как я могу запустить, используя лимит 10, и если я нажимаю страницу 2, то загружаются только следующие 10 (сейчас загружаются тогда все только печатает значение).

Теперь мой дизайн выглядит,

введите описание изображения здесь

Код:

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

Примечание. Https://datatables.net/examples/styling/bootstrap4.

Как запустить API soap v2 в качестве предела 10, и при следующей загрузке страницы 10 я должен щелкнуть страницу 2?

ZUS
источник
у вас есть заказная коллекция товаров? и в настоящее время работает нумерация страниц или нет
Ракеш Донга
Не кастомная коллекция товаров, получение всех товаров и нумерация страниц.
ZUS
пожалуйста, добавьте свой код в свой вопрос
Ракеш Донга
@RakeshDonga Только что обновился с кодом. Я использую datatables.net/examples/styling/bootstrap4 в моем codeigniter.
ZUS
ты попробовал это? stackoverflow.com/a/32745817/10748606
Ракеш Донга

Ответы:

6

К сожалению, насколько я знаю, вы не можете просто передать ограничение SOAP API.

Один подход, который будет работать, если вам не нужно фильтровать список по каким-либо атрибутам, вы хотите получить все атрибуты и не иметь пропущенных entity_ids для продуктов (то есть вы никогда не удаляли продукт). Это подход, позволяющий получить наборы продуктов x на основе максимального значения entity_id и заданной страницы .

В любом случае, если вышеприведенные предположения не подходят для вашего требования, вы не должны его использовать :-)

//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
источник
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"); 



} 
}

здесь также доступен код ограничения

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

полезная ссылка

Ракеш Донга
источник
@ZUS я обновил свой ответ
Ракеш Донга