Параметр «limit» Prestashop WebService не работает должным образом - PullRequest
0 голосов
/ 14 мая 2018

Я пытаюсь использовать параметр limit в веб-сервисе PrestaShop.Моя проблема в том, что он работает только наполовину, количество отображаемых записей работает нормально, но «отправная точка» - нет.Например: http://example.com/api/combinations?display=[id,reference]&limit=[0,500]&sort=id_ASC&ws_key=WEBSERVICEKEY
Иhttp://example.com/api/combinations?display=[id,reference]&limit=[500,500]&sort=id_ASC&ws_key=WEBSERVICEKEY
Возвращает точно тех же продуктов (первые 500).

Я использую PS 1.6.1.17 Я обновил папку classes / webservice самой последней (из 1.6.1.18).Код (classes / webservice / WebserviceRequest.php) - без переопределения:

    $sql_limit = '';
    if (isset($this->urlFragments['limit'])) {
        $limitArgs = explode(',', $this->urlFragments['limit']);
        if (count($limitArgs) > 2) {
            $this->setError(400, 'The "limit" value has to be formed as this example: "5,25" or "10"', 39);
            return false;
        } else {
            $sql_limit .= ' LIMIT '.(int)($limitArgs[0]).(isset($limitArgs[1]) ? ', '.(int)($limitArgs[1]) : '')."\n";// LIMIT X|X, Y

        }
    }

Код выглядит нормально, может быть, это связано с SQL?Я хотел бы напечатать сгенерированный запрос, чтобы проверить его, но я не смог найти способ ...

1 Ответ

0 голосов
/ 14 мая 2018

Я нашел проблему.
Актерский состав не работал здесь.
$ this-> urlFragments ['limit'] значение равно [500,500] .
Таким образом, после взрыва $ limitArgs [0] равен [500 , но код (int) ($ limitArgs [0]) всегда давал мне 0 вместо 500 как результат.
Я заменил его на уродливый str_replace, как показано ниже:

 $sql_limit .= ' LIMIT '.str_replace("[", "", $limitArgs[0]).(isset($limitArgs[1]) ? ','.(int)($limitArgs[1]) : '')."\n";// LIMIT X|X, Y

Не самый лучший, но может быть полезен, если кто-то сталкивается с такой ситуацией.

edit: я отправил в кузницу, правильный синтаксис для лимита: limit = X, Y not limit = [X, Y].

...